Nginx学习笔记1

1.Nginx   --  是一个高性能的 HTTP 和 反向代理 服务器



优点:
1.高并发连接,稳定,消耗内存和CPU低,开源
2.配置文件简单
3.支持rewrite重写规则   -- 能够根据域名、url的不同,将HTTP请求分到不同的后端服务器群组
4.内置的健康检查功能   -- 如果Nginx Proxy后端的某台Web服务器宕机了,不会影响前端访问
5.节省带宽  -- 支持Gzip压缩,可以添加浏览器本地缓存的Header头
6.稳定性高  -- 用于反向代理,宕机概率极低
7.支持热部署  -- 可以7*24小时不间断运行,即使运行数月也不需重启,还能在不间断服务情况下,对软件版本进行升级
8.静态文件处理能力非常强


注意: Nginx在Windows下性能要比Linux下低很多


2.Widows下使用Nginx?


  1.开启    start nginx
  2.关闭    nginx -s quit
  3.其他控制:
    nginx -s [stop|quit|reopen|reload]


3.Linux下Nginx的安装?


  1.安装:
       tar zxvf nginx-1.6.3.tar.gz
       cd nginx-1.6.3
       ./configure
       make
       sudo make install
  以上命令,Nginx将被默认安装到/usr/local/nginx目录下, 可通过 ./configure --help 查看Nginx可选的编译选项
  


4.Linux下Nginx的启动、停止、平滑重启?


  1.启动Nginx: 如果Nginx安装在 /usr/local/nginx目录中
  
             /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    
    说明: 参数  -c  只定了配置文件的路径,如果不加 -c 参数,Nginx会默认加载器安装目录的conf子目录中的nginx.conf文件,
                本例中即: /usr/local/nginx/sbin/conf/nginx.conf
     
  2.Nginx的停止:  -- 一般通过发送系统信号给Nginx的主进程的方式来停止Nginx
            
             1.通过ps命令查找Nginx的主进程号: ps -ef | grep nginx
                                              备注信息为  "master process" 的Nginx进程是  主进程,另外几个  "work process" 为子进程, 前面表示的时主进程号
             2. 几种停止Nginx的方式:
                   1.从容停止Nginx:
                                kill - QUIT Nginx主进程号
                                                                                          或  
                                kill - QUIT '/usr/local/webserver/nginx/logs/nginx.pid'
                   2.快速停止Nginx:
                                kill - TERM Nginx主进程号
                                                                                         或   
                                kill - TERM '/usr/local/webserver/nginx/logs/nginx.pid'             
            
                                kill - INT Nginx主进程号
                                                                                         或   
                                kill - INT '/usr/local/webserver/nginx/logs/nginx.pid'             
                    
                   3.强制停止所有Nginx进程:
                    
                               pkill -9 nginx
                               
    3.Nginx的平滑重启:
       
       1.先检测配置文件的正确性:
       
                     如果改变了Nginx的配置文件(nginx.conf),想重启Nginx,通用可以通过发送系统信号给Nginx主进程的方式进行,  不过重启之前,要确认Nginx配置文件的 语法是否正确,否则Nginx将不会加载新的配置文件
                     通过以下命令判断Nginx配置文件 是否正确:
                                   /usr/local/webserver/nginx/sbin/nginx -t -c
                                   /usr/local/webserver/nginx/conf/nginx.conf
                                   如果配置文件不正确,屏幕会提示那几行出错,
                                   如果配置文件正确,将会显示两行信息:
                                   the configuration file /usr/local/webserver/nginx/conf/nginx.conf syntax is ok
                                   configuration file /usr/local/webserver/nginx/conf/nginx.conf test is successful                   
        2.平滑重启 Nginx:
                      kill -hup Nginx主进程号
                                                             或
                      kill -hup '/usr/local/webserver/nginx/logs/nginx.pid'
  
说明:当Nginx接收到HUP信号时,它会尝试先解析配置文件,如果成功就应用新的配置文件,   之后Nginx运行新的工作进程并从容关闭旧的工作进程,
            通知工作进程关闭监听套接字,但继续为当前连接的客户提供服务。所有客户端的服务完成后,旧的工作进程被关闭。
            如果新的配置文件应用失败,Nginx将继续使用旧的配置进行工作
            
   4.Nginx的信号控制:  几种信号
      
        1.TERM,INT 快速关闭
        2.QUIT   从容关闭
        3.HUP    平滑重启,重新加载配置文件
        4.USR1 重新打开日志文件,在切割日志时用途较大
        5.USR2 平滑升级可执行程序
        6.WINCH 从容关闭工作进程
        
  
  
        
5.Nginx的平滑升级?
             -- 当需要将正在运行中的Nginx升级、添加、删除服务器模块时,可在不中断服务的情况下,使用新版本、重编译的Nginx替换旧版本的可执行程序
     步骤:
     1.使用新的可执行程序替换旧的可执行程序  -- 对于编译安装的Nginx,可将新版编译安装到旧版的Nginx安装路径中,  -- 最后备份旧版可执行文件
     
     2.发送指令 :
                kill -USR2 旧版本的Nginx主进程号
                        
     3.旧版Nginx的主进程将重命名它的.pid文件为 .oldbin(/usr/local/webserver/logs/nignx.pid.oldbin),
                     然后执行新版的Nginx可执行程序,依次启动新的主进程和新的工作进程
                    
     4.此时新、旧版Nginx会同时运行,通过处理输入的请求,要逐步停止旧版本的Nginx实例,必须发生WINCH信号给旧的主进程,然后,它的工作进程将开始从容关闭
                  
                  kill -WINCH 旧版本的Nginx主进程号
                                  
                     






                           Nginx的基本配置与优化
                           


1. Nginx的配置构成:  一个核心 + 多个模块


一个核心:         ---        主要用于提供Web Server的基本功能,以及Web和Mail反向代理的功能,还用于启用网络协议,创建必要的运行时环境以及确保不同的模块之间平滑地进行交互
多个模块:         ---        实现跟协议相关的功能和某应用特有的功能
          ---        模块大致分类:
                                                                          事件模块
                                                                          阶段性处理器
                                                                          输出过滤器
                                                                          变量处理器
                                                                          协议
                         upstream
                                                                          负载均衡


事件模块  -- 主要用于提供OS独立的事件通知机制,eg:kqueue或epoll等
协议模块  -- 主要负责实现Nginx通过 http、tls/ssl, smtp、pop3以及imap与对应的客户端建立会话。


Nginx核心模块       :  Main 和Events
               此外还包括标准HTTP模块、可选HTTP模块和邮件模块,其还可以支持诸多第三方模块。Main用于配置错误日志、进程及权限等相关的参数,Events用于配置IO模型,如epoll、kqueue、select或poll等,它们是必备模块。
               


2.Nginx主配置文件:  由几个段组成,每个段的定义格式如下: 每一个指令都必须使用分号(;)结束,否则为语法错误
              格式:
         
{
          ;
         }
         
3.Nginx配置文件的主要结构:
              
      ##Main段,定义全局属性
      events{
      ##定义不同IO模型下的工作机制
      }
      
      http{
           ##定义作为Web服务器的相关属性(还可以反向代理mail)
           server{
                  ##定义一个虚拟主机的属性,所有Web服务必须定义成一个虚拟主机,与httpd不同
             
             location [option] uri{
                      ##定义一个URI的特性
                      
                 ##location中可以嵌套location
                 location [option] uri { 
                     #嵌套location
 
                }
                
                if(condition){
                     ##定义URL重写
                }
                
             }     
           }
      }
      
      
      upstream {
      
           ##将多个server结合在一起,实现负载均衡
            
      }




4.Nginx中个分段详解:


Nginx 的配置文件主要分为4部分:
main (全局设置)            -> 此部分设置的指令将影响其它所有设置
server (主机设置)          -> 主要用于指定 "主机" 和 "端口"
upstream (负载均衡设置)    -> 用于负载均衡location (URL 匹配特定位置的设置)                      
location (URL 匹配特定位置的设置)        -> 匹配网页文件的类型和位置




   --  Main段: 定义Nginx的全局属性
          
          1.定义Nginx运行的用户和用户组
            user www www;
          
          2.进程相关的设置
            Nginx进程数,建议设置为等于CPU总核心数或总核心数的2倍
            worker_processes 4;
            
                                     通过sched_setaffinity()将worker绑定至CPU上,只能用于main上下文。语法格式为:
            #worker_cpu_affinity cpumask ... 
            worker_cpu_affinity 0001 0010 0100 1000;  ##绑定在1-4号cpu上
             
            timer_resolution用于降低gettimeofday()系统调用的次数。默认情况下,每次从kevent()、epoll、/dev/poll、select()或poll()返回时都会执行此系统调用。语法格式为:
             
            timer_resolution 100ms
            
            
          3.日志设置:
          
                                             全局错误日志定义类型: [file|stderr[ debug | info | notice | warn | error | crit | alert |emerg ]]
                                             另外: 日志还可以定义在http、server和location上下文中,语法格式一样
                    #error_log file | stderr [ debug | info | notice | warn | error | crit | alert | emerg ]                             




          4.定义进程文件:
                    pid        logs/nginx.pid;
                    #pid /var/run/nginx.pid
                    


          5.Main段的示例配置:
                         worker_processes 16;
                         error_log  logs/error.log;
                         pid logs/nginx.pid
                         


   ---  events段: 定义工作模式与连接数上限


          1.参考时间模型:  use [kqueue | rtsig | epoll | /dev/epoll | select | poll ];
                                                           注: epoll 是Linux系统中的高性能网络IO模型,  FreeBSD中建议使用 kqueue模型
              eg: use epoll;
          
          2.最大连接数:
                                                            设定每个worker所处理的最大连接数,  它与来自main上下文的worker_processes一起决定了maxclients的值                   
                                                                     
                                                                     算法: 最大连接数   =  连接数 *进程数
              eg: worker_connections 20000;
                                  注意:
                                  在反向代理场景中,其计算方法与上述公式不同,因为默认情况下浏览器将打开2个连接,而nginx会为每一个连接打开2个文件描述符,因此,其maxclients的计算方法为:
                     
            max clients = worker_processes * worker_connections/4                                                     
         
         
          3.Events段配置示例:
                     events{
                          use epoll;
                          worker_connections 2048;
                     }


 


   ---   http段: 定义http服务器属性,含location、upstream等


            http 
            { 
            include mime.types; #文件扩展名与文件类型映射表 
            default_type application/octet-stream; #默认文件类型 
            #charset utf-8; #默认编码 
            server_names_hash_bucket_size 128; #服务器名字的hash表大小 
            client_header_buffer_size 32k; #上传文件大小限制 
            large_client_header_buffers 4 64k; #设定请求缓 
            client_max_body_size 8m; #设定请求缓 
            sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。 
            autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。 
            tcp_nopush on; #防止网络阻塞 
            tcp_nodelay on; #防止网络阻塞 
            keepalive_timeout 120; #长连接超时时间,单位是秒
             
            #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。 
            fastcgi_connect_timeout 300; 
            fastcgi_send_timeout 300; 
            fastcgi_read_timeout 300; 
            fastcgi_buffer_size 64k; 
            fastcgi_buffers 4 64k; 
            fastcgi_busy_buffers_size 128k; 
            fastcgi_temp_file_write_size 128k;
             
            #gzip模块设置 
            gzip on; #开启gzip压缩输出 
            gzip_min_length 1k; #最小压缩文件大小 
            gzip_buffers 4 16k; #压缩缓冲区 
            gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0) 
            gzip_comp_level 2; #压缩等级 
            gzip_types text/plain application/x-javascript text/css application/xml; 
            #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。 
            gzip_vary on; 
            #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用
             
            upstream www.toxingwang.com { 
            #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。 
            server 192.168.8.101:80 weight=3; 
            server 192.168.8.102:80 weight=2; 
            server 192.168.8.103:80 weight=3; 
            } 
            #虚拟主机的配置 
            server 
            { 
            #监听端口 
            listen 80; 
            #域名可以有多个,用空格隔开 
            server_name www.feiku.com feiku.com; 
            index index.html index.htm index.php; 
            root /data/www/feiku; 
            location ~ .*.(php|php5)?$ 
            { 
            fastcgi_pass 127.0.0.1:9000; 
            fastcgi_index index.php; 
            include fastcgi.conf; 
            } 
            #图片缓存时间设置 
            location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ 
            { 
            expires 10d; 
            } 
            #JS和CSS缓存时间设置 
            location ~ .*.(js|css)?$ 
            { 
            expires 1h; 
            } 
            #日志格式设定 
            log_format access '$remote_addr - $remote_user [$time_local] "$request" ' 
            '$status $body_bytes_sent "$http_referer" ' 
            '"$http_user_agent" $http_x_forwarded_for'; 
            #定义本虚拟主机的访问日志 
            access_log /var/log/nginx/feikuaccess.log access;
             
            #对 "/" 启用反向代理 
            location / { 
            proxy_pass http://127.0.0.1:88;
            proxy_redirect off; 
            proxy_set_header X-Real-IP $remote_addr; 
            #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            #以下是一些反向代理的配置,可选。 
            proxy_set_header Host $host; 
            client_max_body_size 10m; #允许客户端请求的最大单文件字节数 
            client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数, 
            proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时) 
            proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) 
            proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时) 
            proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小 
            proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置 
            proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) 
            proxy_temp_file_write_size 64k; 
            #设定缓存文件夹大小,大于这个值,将从upstream服务器传 
            }
             
            #设定查看Nginx状态的地址 
            location /NginxStatus { 
            stub_status on; 
            access_log on; 
            auth_basic "NginxStatus"; 
            auth_basic_user_file conf/htpasswd; 
            #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。 
            }
             
            #本地动静分离反向代理配置 
            #所有jsp的页面均交由tomcat或resin处理 
            location ~ .(jsp|jspx|do)?$ { 
            proxy_set_header Host $host; 
            proxy_set_header X-Real-IP $remote_addr; 
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
            proxy_pass http://127.0.0.1:8080;
            } 
            #所有静态文件由nginx直接读取不经过tomcat或resin 
            location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ 
            { expires 15d; } 
            location ~ .*.(js|css)?$ 
            { expires 1h; } 
            } 
            }


--- 几个重要的模块配置:




--- 1. http服务器配置中的 Gzip配置:


##以下是httpGzip模块配置 
#httpGzip modules 
    gzip  on;  //开启gzip压缩 
    gzip_min_length 1k;  //设置允许压缩的页面最小字节数 ,  当响应内容大小大于多少bytes后使用gzip
    gzip_buffers 4 16k; //申请4个单位为16K的内存作为压缩结果流缓存 
    gzip_http_version 1.1; //设置识别http协议的版本,默认是1.1 
    gzip_comp_level 2; //指定gzip压缩比,1-9 数字越小,压缩比越小,速度越快. 级别越高压缩率越高,但是相应的耗cpu
    gzip_types text/plain  application/x-javascript text/css application/xml; //指定压缩的类型 # 对于什么类型的内容使用gzip 
    gzip_vary on; //让前端的缓存服务器存经过gzip压缩的页面 




--- 2. Nginx的server虚拟机配置:两种方式一种是直接在主配置文件中设置server字段配置虚拟主机,另外一种是使用include字段设置虚拟主机,这样可以减少主配置文件的复杂性
     


##以下是server主机设置


server{
       listen 80;   //监听端口为80
       server_name  www.feiku.com;   //设置主机域名
       charset utf-8;  //设置访问的语言编码
       access_log  logs/www.feiku.com.access.log  main; //设置虚拟主机访问日志的存放路径及日志的格式为main 
       
       ##设置虚拟主机的基本信息
       location /{
       root sites/www;    //设置虚拟主机的网站根目录
       index index.html index.htm;  //设置虚拟主机默认访问的网页
       }
       
       ##查看Nginx当前的状态情况,需要模块  "with-http_stub_status_module"支持
       location /status{
                 stub_status on;
                 access_log /usr/local/nginx/logs/status.log; 
                 auth_basic "NginxStatus";
       } 
}


1. post方法请求静态文件

默认情况下,web服务器都不允许post方法请求静态文件,会返回响应403 Not Allowed。但是有些时候确实有这种需求。可以通过配置文件来改变这种设置:在需要处理静态文件的location里这样配置即可,
[plain]  view plain copy
  1. location /static/ {  
  2.     root /path/to/files/;  
  3.     error_page 405 =200 $uri;  
  4. }  

2. Nginx默认一次只能发送50个子请求(subrequest)

在nginx源码中,src/http/ngx_http_request.h文件中:
[cpp]  view plain copy
  1. #define NGX_HTTP_MAX_SUBREQUESTS        50  
在使用Openresty时,可以向configure脚本传参 置这个限制, ./configure --with-cc-opt="-D NGX_HTTP_MAX_SUBREQUESTS=250"

3. Nginx location匹配规则

匹配顺序:
a. 字符串匹配,和location块的顺序无关,根据uri匹配所有的location,从而得到一个匹配度最大的location。
b. 正则匹配,按照location块的顺序从前向后,如果找到匹配的location,则直接由该location处理请求。如果所有的location都不匹配,则由在字符串匹配中,匹配度最大的location处理。
匹配规则:
= /uri/   ——字符串精确匹配
^~ /uri/ ——字符串前缀匹配
~ /uri/   ——大小写区分的正则匹配
~* /uri/ ——大小写不区分的正则匹配
@ /uri/ ——命名location,只用于内部重定向请求
其中,如果=和^~匹配成功之后会立即停止搜索,即不再进行正则匹配。

4. 监控Nginx的状态

需要HttpStubStatusModule模块,默认情况是不开启的,所以需要编译时,指定开启这个模块。
[cpp]  view plain copy
  1. ./configure --with-http_stub_status_modules  
nginx的配置:
[cpp]  view plain copy
  1. location /nginx_status {  
  2.   # copied from http://blog.kovyrin.net/2006/04/29/monitoring-nginx-with-rrdtool/  
  3.   stub_status on;  
  4.   access_log   off;  
  5.   allow SOME.IP.ADD.RESS;  
  6.   deny all;  
  7. }  
然后通过浏览器访问localhost/nginx_status,浏览器显示Nginx的状态
[cpp]  view plain copy
  1. Active connections: 291  
  2. server accepts handled requests  
  3.   16630948 16630948 31070465  
  4. Reading: 6 Writing: 179 Waiting: 106  

5. Nginx启用aio

默认Nginx是没有开启aio的,需要在配置编译时,加上相应选项否则启动Nginx会报错 unknown directive “aio”。
[plain]  view plain copy
  1. ./configure --with-file-aio  

6. 限制请求内容的大小

指令:client_max_body_size,用于设置这个值,默认是1m。context可以是http,server或者location。

7. 通过echo模块合并静态文件请求

正常html中包含多个js文件或者css文件,那么浏览器需要多次http请求才能完成这些文件的加载。比如html文件:
[html]  view plain copy
  1. <html>  
  2. <head>  
  3.     <script type='text/javascript' src='/static/a.js'>script>  
  4.     <script type='text/javascript' src='/static/b.js'>script>  
  5.     <script type='text/javascript' src='/static/c.js'>script>  
  6. ……  
  7. html>  
那么就需要3次请求。下面介绍echo模块实现请求合并。先修改html:
[html]  view plain copy
  1. <html>  
  2. <head>  
  3.     <script type='text/javascript' src='/merge?/static/a.js&/static/b.js&/static/c.js'>script>  
  4. ……  
  5. html>  
nginx配置文件:
[plain]  view plain copy
  1. location /static/ {  
  2.     root /home/www/doc_root;  
  3. }  
  4.   
  5. location /merge {  
  6.     default_type 'text/javascript';  
  7.   
  8.     echo_foreach_split '&' $query_string;    # 将查询字符串以&分割  
  9.         echo_location_async $echo_it;        # 发送子请求到$echo_it对应的location  
  10.         echo;  
  11.     echo_end;  
  12. }  
通过这种方式可以有效减少客户端请求,降低服务器端的压力。

8. nginx开启gzip

[plain]  view plain copy
  1. gzip    on;    # 开启gzip,默认关闭  
  2. gzip_comp_level    5;    # 压缩级别,1-9,级别越高压缩率越高,但是相应的耗cpu  
  3. gzip_min_length    1025;    # 当响应内容大小大于多少bytes后使用gzip  
  4. gzip_types    text/plain application/x-javascript application/json text/javascript text/css    # 对于什么类型的内容使用gzip  

一个Nginx配置的完整示例:

8
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
   #user  nobody;
   2 worker_processes  2;
  
   #error_log  logs/error.log;
   #error_log  logs/error.log  notice;
   #error_log  logs/error.log  info;
  
   #pid        logs/nginx.pid;
  
  10 
  11 events {
  12     worker_connections  1024;
  13 }
  14 
  15 
  16 http {
  17     
  18      #设定mime类型,类型由mime.type文件定义
  19     include       mime.types;
  20     default_type  application /octet-stream ;
  21 
  22      #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  23      #                  '$status $body_bytes_sent "$http_referer" '
  24      #                  '"$http_user_agent" "$http_x_forwarded_for"';
  25 
  26      #access_log  logs/access.log  main;
  27 
  28     sendfile        on;
  29      #tcp_nopush     on;
  30 
  31      #keepalive_timeout  0;
  32     keepalive_timeout  65;
  33 
  34      #gzip  on; 
  35       
  36      #后端服务器
  37      #使用权重,设置负载均衡参数
  38     upstream backend {                      
  39          #server   192.168.0.106:8080 weight=2 max_fails=3;   
  40      #server   192.168.0.105:8080 weight=1;
  41     server   192.168.0.106:8080;   
  42     server   192.168.0.105:8080;
  43     }
  44 
  45      #配置虚拟主机
  46     server {
  47      
  48      ##监听端口
  49         listen      80;
  50     
  51     
  52      #虚拟主机的名字
  53      #使用localhost
  54          #server_name  localhost;
  55      #nginx服务器ip
  56      #server_name 192.168.0.106;
  57      ##使用域名来绑定
  58     server_name www.ceit.com;
  59     
  60          #charset koi8-r;
  61 
  62          #access_log  logs/host.access.log  main;
  63 
  64      #默认请求(拦截/)
  65          #location / {
  66          #   #定义首页索引文件的名称
  67          #   #index index.php index.html index.htm;   
  68          #}
  69 
  70         location / {
  71             index  index.html index.htm;
  72          #后面没有配置正斜杠,即绝对根路径。如果配了,
  73          #nginx不会把location中匹配的路径部分代理走
  74          #通过后端服务器代理,实现负载均衡
  75             proxy_pass   http: //backend ;
  76 
  77          #代理部分的参数设置
  78             proxy_redirect    off;
  79             proxy_set_header   Host $host;
  80             proxy_set_header   X-Real-IP $remote_addr;
  81             proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
  82             client_max_body_size   10m;
  83             client_body_buffer_size   128k;
  84             proxy_connect_timeout   15;
  85             proxy_send_timeout   15;
  86             proxy_read_timeout   15;
  87             proxy_buffer_size   8k;
  88             proxy_buffers   4 64k;
  89             proxy_busy_buffers_size   128k;
  90             proxy_temp_file_write_size  128k;
  91         }
  92 
  93      #static file
  94         location ~* ^.+\.(ico|gif|jpg|jpeg|png|html|htm)$ {  
  95             root          /static ;  
  96         proxy_pass   http: //backend ;
  97             access_log   off;  
  98             expires      30d;  
  99     } 
100 
101       #static file
102     location ~* ^.+\.(css|js|txt|xml|swf|wav)$ {  
103             root          /static ;  
104         proxy_pass   http: //backend ;
105             access_log   off;  
106             expires      24h;  
107         }  
108     }
109 }

多服务器的Nginx配置示例:

user  nginx nginx; 

worker_processes 2;       #相当于cpu个数

error_log  logs/nginx_error.log ;         #错误日志  crit 日志格式

pid        /usr/local/nginx/nginx.pid;              #主进程PID保存文件

#Specifies the value for maximum file descriptors that can be opened by this process. 

worker_rlimit_nofile 65535;         #文件描述符数量

events

{

  use epoll;    #网络I/O模型,建议linux使用epoll,FreeBSD使用kqueue

  worker_connections 65535;       #最大允许连接数

}

http        #全局设置

{

  include       mime.types;

  default_type  application/octet-stream;

  #charset  gb2312;

  server_names_hash_bucket_size 128;

  client_header_buffer_size 32k;

  large_client_header_buffers 4 32k;

  client_max_body_size 8m;

  sendfile on;

  tcp_nopush     on;         #tcp延迟

  keepalive_timeout 60;              #保持连接时间

  tcp_nodelay on;

  fastcgi_connect_timeout 300;

  fastcgi_send_timeout 300;

  fastcgi_read_timeout 300;

  fastcgi_buffer_size 64k;

  fastcgi_buffers 4 64k;

  fastcgi_busy_buffers_size 128k;

  fastcgi_temp_file_write_size 128k;          #fastcgi设置

  gzip on;      #开启gzip压缩,大大加速网页传输速度,节省了带宽,以下都是gzip的设置

  gzip_proxied any;

  gzip_min_length  1k;

  gzip_buffers     4 16k;

  gzip_comp_level 2;

  gzip_types       text/html text/text text/plain application/x-javascript text/css application/xml application/x-httpd-php image/jpeg image/png image/gif ;

  gzip_vary on;

  #limit_zone  crawler  $binary_remote_addr  10m;

  server         #设置网站的基本信息,当有多个server时,就能实现虚拟主机的功能了,我的有4个,因此就有四个虚拟主机    

  {

    listen       80;    #监听端口

    server_name  www.it163.org;         #绑定域名

    index index.html index.htm index.php;        #默认首页

    root  html;    #网站根目录

    error_page 404 /404.html;     #404错误页面地址

    location = /404.html {

       root html;       #404错误页面地址位置

    }    

    if ( $host =  it163.org  ) {

       rewrite ^ http:// www.it163.org $request_uri redirect;

    }     #301重定向redirect 表示返回的状态码是301

    #limit_conn   crawler  20;    

    location ~ .*\.(php|php5)?$   #解析php文件

    {      

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9000;

      fastcgi_index index.php;

      include fcgi.conf;

    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

      expires      30d;     #图片格式缓存30天

    }

    location ~ .*\.(js|css)?$

    {

      expires      1h;       #js/css缓存1小时

    }    

    log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '

              '$status $body_bytes_sent "$http_referer" '

              '"$http_user_agent" $http_x_forwarded_for';    #访问日志文件格式

    access_log logs/access.log  access;

}

  server  #第二个虚拟主机

  {

    listen       80;

    server_name  www.apkpk.com apkpk.com;

    index index.html index.htm index.php;

    root  /web/www.apkpk.com;

    error_page 404 /404.html;

    location = /404.html {

       root /web/www.apkpk.com;

    }    

    if ( $host = apkpk.com ) {

       rewrite ^ http://www.apkpk.com$request_uri redirect;

    }

    #limit_conn   crawler  20;    

    location ~ .*\.(php|php5)?$

    {      

      #fastcgi_pass  unix:/tmp/php-cgi.sock;

      fastcgi_pass  127.0.0.1:9000;

      fastcgi_index index.php;

      include fcgi.conf;

    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

      expires      30d;

    }

    location ~ .*\.(js|css)?$

    {

      expires      1h;

    }    

    access_log logs/apkpk.access.log;

}

   server              #第三个虚拟主机

   {

     listen       80;

     server_name  www.tu8cn.com tu8cn.com;

     index index.html index.htm index.php;

     root  /web/www.tu8cn.com;

     error_page 404 /404.html;

     location = /404.html {

         root    /web/www.tu8cn.com;

     }

     if ( $host = tu8cn.com ) {

         rewrite ^ http://www.tu8cn.com$request_uri redirect;

     }

     #limit_conn   crawler  20;

    location ~ .*\.(php|php5)?$

     {

       #fastcgi_pass  unix:/tmp/php-cgi.sock;

       fastcgi_pass  127.0.0.1:9000;

       fastcgi_index index.php;

       include fcgi.conf;

     }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

     {

       expires      30d;

     }

     location ~ .*\.(js|css)?$

     {

       expires      1h;

     }

     access_log logs/tu8cn.access.log;

}

   server              #第四个虚拟主机

   {

     listen       80;

     server_name  www www.it163.org  it163.org

     index index.html index.htm index.php;

     root  /web/www.ecshop.com;

     error_page 404 /404.html;

     location = /404.html {

         root    /web/www.tu8cn.com;

     }

     if ( $host = ecshop.com ) {

         rewrite ^ http://www.it163.org $request_uri redirect;

     }

     #limit_conn   crawler  20;

    location ~ .*\.(php|php5)?$

     {

       #fastcgi_pass  unix:/tmp/php-cgi.sock;

       fastcgi_pass  127.0.0.1:9000;

       fastcgi_index index.php;

       include fcgi.conf;

     }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

     {

       expires      30d;

     }

     location ~ .*\.(js|css)?$

     {

       expires      1h;

     }

     access_log logs/ecshop.access.log;

}

server    #这个不是显示虚拟主机,显示服务器负载情况

  {

    listen  80;

    server_name www.it138.org;

    location / {

    stub_status on;

    access_log   off;

    }

  }

}






















































你可能感兴趣的:(高性能服务器)