1、安装Nginx

在安装Nginx之前,确保系统已正确安装gcc、openssl-devel、pcre-devel及zlib-devel软件库,Nginx安装过程如下:
         wget http://nginx.org/download/nginx-1.0.14.tar.gz                       //下载文件
         tar zxvf nginx-1.0.14.tar.gz                                                            //解压压缩文件
         ./configure --with-http_stub_status_module --prefix=/opt/nginx     //配置命令,启用 Nginx 的 NginxStatus 功能,以监控 Nginx 的运行状态。
         cd nginx-1.0.14                //进入nginx目录
         make                                //编译源程序
         make install                      //运行程序
2、Nginx配置文件结构
       Nginx的配置文件为nginx.conf,位于安装目录的conf目录下。nginx.conf由多个块组成,最外面的是块是main,main包含events和hhtp,http包含upstream和多个server,server又包含多个location。
       main块为全局设置,将影响其它所有设置;
       upstream块为负载均衡服务设置,设置一系列后端服务器;
       server块为主机设置,指定主机和端口;
       location块url匹配特定位置设置,用于匹配网页位置。
       server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
       在这几个块中,每个部分都包含若干指令,这些指令主要包含Nginx的主模块指令、事件模块指令、HTTP核心模块指令,同时每个部分还可以使用其他HTTP模块指令,例如Http SSL模块、HttpGzip Static模块和Http Addition模块等。
3、Nginx配置
 3.1、全局配置
       user nginx;                    #指定Nginx Worker进程运行用户以及用户组
       worker_processes 2;    #指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存。建议指定和CPU的数量一致即可
       error_log logs/error.log notice;    #用来定义全局错误日志文件,日志输出级别有debug、info、notice、warn、error、crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少
       pid logs/nginx.pid;    #用来指定进程pid的存储文件位置
       worker_rlimit_nofile 65535;    #用于绑定worker进程和CPU, Linux内核2.4以上可用
        events{                          #设定Nginx的工作模式及连接数上限
              use epoll;                #用来指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是标准的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在Linux平台上,而kqueue用在BSD系统中。对于Linux系统,epoll工作模式是首选
              worker_connections 65536;      #用于定义Nginx每个进程的最大连接数,默认是1024。最大客户端连接数由worker_processes和worker_connections决定,即Max_client=worker_processes*worker_connections。
 在作为反向代理时,max_clients变为:max_clients = worker_processes * worker_connections/4。
 进程的最大连接数受Linux系统进程的最大打开文件数限制,在执行操作系统命令“ulimit -n 65536”后worker_connections的设置才能生效
 }
3.2、http配置
 http{
         include conf/mime.types;            #文件扩展名与文件类型映射表,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度
         default_type application/octet-stream;        #默认文件类型,这里设定默认类型为二进制流
         log_format main '$remote_addr - $remote_user [$time_local] '    
         '"$request" $status $bytes_sent '
        '"$http_referer" "$http_user_agent" '
        '"$gzip_ratio"';        #指定Nginx日志的输出格式。main为此日志输出格式的名称
        client_max_body_size 20m;    #设置允许客户端请求的最大的单个文件字节数
        client_header_buffer_size 32K;    #指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。这里设置为32K
         large_client_header_buffers 4 32k;    #指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K
        Sendfile on;    #用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 60;    #置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接
        client_header_timeout 10;    #设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误
        client_body_timeout 10;    #设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60
        send_timeout 10;    #指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接
3.3、HttpGzip配置
       HttpGzip模块支持在线实时压缩输出数据流,在配置之前先用/opt/nginx/sbin/nginx -V命令查看该模块是否安装,具体如下:
       [root@xxx ~]# /opt/nginx/sbin/nginx  -V
 显示如下:
       nginx version: nginx/1.0.14
       built by gcc 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC)
       configure arguments: --with-http_stub_status_module --with-http_gzip_static_module --prefix=/opt/nginx
 相关属性如下:
        gzip on;    #设置开启或者关闭gzip模块
        gzip_min_length 1k;    #设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中获取。默认值是0,不管页面多大都进行压缩。建议设置成大于1K的字节数,小于1K可能会越压越大
        gzip_buffers 4 16k;    #表示申请4个单位为16K的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果
        gzip_http_version 1.1;    #设置识别HTTP协议版本,默认是1.1,目前大部分浏览器已经支持GZIP解压,使用默认即可
        gzip_comp_level 2;    #指定GZIP压缩比,1 压缩比最小,处理速度最快;9 压缩比最大,传输速度快,但处理最慢,也比较消耗cpu资源
        gzip_types text/plain application/x-javascript text/css application/xml;    #指定压缩的类型,无论是否指定,“text/html”类型总是会被压缩的
        gzip_vary on;    #可以让前端的缓存服务器缓存经过GZIP压缩的页面,例如用Squid缓存经过Nginx压缩的数据
3.4、负载均衡配置
 upstream通过一个简单的调度算法来实现客户端IP到后端服务器的负载均衡。
       upstream cszhi.com{    #指定了一个负载均衡器的名称
       ip_hash;
       server 192.168.8.11:80;
       server 192.168.8.12:80 down;
       server 192.168.8.13:8009 max_fails=3 fail_timeout=20s;
       server 192.168.8.146:8080;    #指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态
    }
 Nginx的负载均衡模块支持4种调度算法,其中后2项属于第三方的调度方法。
         轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响;
         Weight:指定轮询权值,Weight值越大,分配到的访问机率越高,主要用于后端每个服务器性能不均的情况下;
         ip_hash:每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,有效解决了动态网页存在的session共享问题;
         fair:比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块;
        url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率。Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包。
 后端服务器在负载均衡调度中的常用状态:
       down:表示当前的server暂时不参与负载均衡;
       backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻;
       max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误;
       fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
3.5、虚拟主机配置
 server{
       listen 80;    #指定虚拟主机的服务端口
       server_name 192.168.8.18 mscims.com;    #指定IP地址或者域名,多个域名之间用空格分开
       index index.html index.htm index.php;    #设定访问的默认首页地址
       root /wwwroot/www.cszhi.com    #指定虚拟主机的网页根目录
       charset gb2312;    #设置网页的默认编码格式
       access_log logs/www.ixdba.net.access.log main;    #指定此虚拟主机的访问日志存放路径,最后的main用于指定访问日志的输出格式
3.6、location匹配配置
        URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。使用location URL匹配配置还可以实现反向代理,用于实现PHP动态解析或者负载负载均衡。
       location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {    #所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理
      root /www.mscims.com;
      expires 30d;    #静态文件的过期时间30天
 }


4、正则匹配
4.1、表达式匹配
 1、~ 为区分大小写匹配;
 2、~* 为不区分大小写匹配;
 3、!~和!~*分别为区分大小写不匹配及不区分大小写不匹配;
4.2、文件及目录匹配
 1、-f和!-f用来判断是否存在文件
 2、-d和!-d用来判断是否存在目录
 3、-e和!-e用来判断是否存在文件或目录
 4、-x和!-x用来判断文件是否可执行
4.3、rewrite指令的flag标记
1、last 相当于apache里面的[L]标记,表示rewrite。
2、break本条规则匹配完成后,终止匹配,不再匹配后面的规则。
3、redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
4、permanent 返回301永久重定向,浏览器地址会显示跳转后的URL地址
4.4、Rewrite 规则相关指令
1.break指令
使用环境:server,location,if;
该指令的作用是完成当前的规则集,不再处理rewrite指令。
2.if指令
使用环境:server,location
该指令用于检查一个条件是否符合,如果条件符合,则执行大括号内的语句。If指令不支持嵌套,不支持多个条件&&和||处理。
3.return指令
语法:return code ;
使用环境:server,location,if;
该指令用于结束规则的执行并返回状态码给客户端。
4.rewrite 指令
语法:rewriteregex replacement flag
使用环境:server,location,if
该指令根据表达式来重定向URI,或者修改字符串。指令根据配置文件中的顺序来执行。注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句。
5.Set指令
语法:setvariable value ; 默认值:none; 使用环境:server,location,if;
该指令用于定义一个变量,并给变量赋值。变量的值可以为文本、变量以及文本变量的联合。
6.Uninitialized_variable_warn指令
语法:uninitialized_variable_warnon|off
使用环境:http,server,location,if
该指令用于开启和关闭未初始化变量的警告信息,默认值为开启。