指引网

当前位置: 主页 > 服务器 > Nginx >

nginx配置实例及解释(含反向代理)

来源:网络 作者:佚名 点击: 时间:2017-08-02 23:30
[摘要] nginx配置实例及解释(含反向代理)
  1. user www www; 
  2.  
  3. worker_processes auto; 
  4. #nginx要开启的进程数 一般等于cpu的总核数 其实一般情况下开4个或8个就可,不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。 
  5.  
  6. error_log  /home/wwwlogs/nginx_error.log  crit; 
  7.  
  8. pid        /usr/local/nginx/logs/nginx.pid; 
  9.  
  10. worker_rlimit_nofile 51200; 
  11. #更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制。设置后你的操作系统和Nginx可以处理比“ulimit -a”更多的文件,所以把这个值设高,这样nginx就不会有“too many open files”问题了。 
  12.  
  13.  
  14. #events模块中包含nginx中所有处理连接的设置。 
  15. events 
  16.     { 
  17.         use epoll; 
  18.         #设置用于复用客户端线程的轮询方法。如果你使用Linux 2.6+,你应该使用epoll。如果你使用*BSD,你应该使用kqueue。 
  19.          
  20.         worker_connections 51200; 
  21.         #设置可由一个worker进程同时打开的最大连接数。如果设置了上面提到的worker_rlimit_nofile,我们可以将这个值设得很高。 
  22. 记住,最大客户数也由系统的可用socket连接数限制(~ 64K),所以设置不切实际的高没什么好处。 
  23.  
  24.         multi_accept on; 
  25.         #nginx收到一个新连接通知后接受尽可能多的连接。 
  26.     } 
  27. #HTTP模块控制着nginx http处理的所有核心特性。 
  28. http 
  29.     { 
  30.         include       mime.types; 
  31.         default_type  application/octet-stream; 
  32.  
  33.         server_names_hash_bucket_size 128; 
  34.         client_header_buffer_size 32k; 
  35.         large_client_header_buffers 4 32k; 
  36.         client_max_body_size 50m; 
  37.         #允许客户端请求的单个文件最大字节数 
  38.         client_body_buffer_size 128k; 
  39.         #缓冲区代理缓存用户端请求的最大字节数,可以理解为先保存到本地在传给用户 
  40.          
  41.          
  42.         client_header_timeout 10;  
  43.         #设置请求头的超时时间 
  44.         client_body_timeout 10;  
  45.         #设置请求体的超时时间 
  46.          
  47.         sendfile   on; 
  48.         #可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。 
  49.          
  50.         tcp_nopush on; 
  51.         #设置nginx在一个数据包里发送所有头文件,而不一个接一个的发送。 
  52.  
  53.         keepalive_timeout 60; 
  54.         #设置客户端链接超时时间。服务器将在这个超时时间过后关闭链接。我们将它设置低些可以让ngnix持续工作的时间更长。 
  55.          
  56.         reset_timedout_connection on; 
  57.         #设置nginx关闭不响应的客户端连接。这将会释放那个客户端所占有的内存空间。 
  58.          
  59.         tcp_nodelay on; 
  60.         #设置nginx不要缓存数据,而是一段一段的发送--当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。 
  61.          
  62.         fastcgi_connect_timeout 300; 
  63.         fastcgi_send_timeout 300; 
  64.         fastcgi_read_timeout 300; 
  65.         fastcgi_buffer_size 64k; 
  66.         fastcgi_buffers 4 64k; 
  67.         fastcgi_busy_buffers_size 128k; 
  68.         fastcgi_temp_file_write_size 256k; 
  69.  
  70.         gzip on; 
  71.         #采用gzip压缩的形式发送数据。这将会减少我们发送的数据量 
  72.         gzip_min_length  1k; 
  73.         #设置对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它,因为压缩这些小的数据会降低处理此请求的所有进程的速度。 
  74.         gzip_buffers     4 16k; 
  75.          
  76.         gzip_http_version 1.1; 
  77.         gzip_comp_level 2; 
  78.         #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置。 
  79.         gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; 
  80.         #设置需要压缩的数据格式。 
  81.          
  82.         gzip_vary on; 
  83.         gzip_proxied   expired no-cache no-store private auth; 
  84.         #gzip_proxied允许或者禁止压缩基于请求和响应的响应流。如果置为any,意味着将会压缩所有的请求 
  85.         gzip_disable   "MSIE [1-6]\."
  86.         #为指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容。 
  87.  
  88.         limit_conn_zone $binary_remote_addr zone=perip:10m; 
  89.         #设置用于保存各种key(比如当前连接数)的共享内存的参数。5m就是5兆字节,这个值应该被设置的足够大以存储(32K*5)32byte状态或者(16K*5)64byte状态。$binary_remote_addr是限制同一客户端ip地址 
  90.          
  91.         limit_conn_zone $server_name zone=perserver:10m; 
  92.         #$server_name是限制同一server最大并发数; 
  93.          
  94.         limit_conn perip 10; 
  95.         ##如果设置limit_conn_zone,则新增 "limit_conn perip 10;",limit_conn 为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接 
  96.          
  97.         limit_rate 100k; 
  98.         #limit_rate为限制下载速度 
  99.          
  100.         server_tokens off; 
  101.         #是否在错误页面中的nginx版本数字,这样对于安全性是有好处的 
  102.          
  103.         #log format 
  104.         log_format  access  '$remote_addr - $remote_user [$time_local] "$request" ' 
  105.              '$status $body_bytes_sent "$http_referer" ' 
  106.              '"$http_user_agent" $http_x_forwarded_for'
  107.         access_log off; 
  108.         #设置nginx是否将存储访问日志。关闭这个选项可以让读取磁盘IO操作更快 
  109.          
  110.         proxy_connect_timeout 600; 
  111.         #跟后端服务器连接超时时间,发起握手等待响应超时时间 
  112.          
  113.         proxy_read_timeout 600; 
  114.         #连接成功后等待服务器响应时间,其实已经进入后端服务器队列中排队等候处理 
  115.          
  116.         proxy_send_timeout 600; 
  117.         #后端服务器数据传回时间,就是在规定时间内后端服务器必须传完所有数据 
  118.          
  119.         proxy_buffer_size 16k; 
  120.         #代理请求缓存区大小,这个缓存区会存储用户头信息以供nginx进行规则处理,一般空间大小只要能保存下头信息即可 
  121.          
  122.         proxy_buffers 4 32k; 
  123.         #设置单个用户缓存区个数以及最大缓存大小 
  124.          
  125.         proxy_busy_buffer_size 64k; 
  126.         #系统繁忙是可以申请更大的缓存空间 
  127.          
  128.         #upstream 设置一组可以在proxy_pass和fastcgi_pass可用的代理服务器,默认的负载均衡方式为轮询。Upstream模块中server指令用于指定后端服务器名称和参数,服务器名称可以是域名、端口号、ip、或unix socket 
  129.         upstream php_server_pool{ 
  130.             server 192.168.1.10:80 weight=4 max_fails=2 fail_timeout=30s; 
  131.             #指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。  
  132.             server 192.168.1.11:80 weight=4 max_fails=2 fail_timeout=30s; 
  133.             server 192.168.1.12:80 weight=2 max_fails=2 fail_timeout=30s; 
  134.         } 
  135.         upstream message_server_pool{ 
  136.             server 192.168.1.13:3245; 
  137.             server 192.168.1.14:3245 down; 
  138.             #down 表示单前的server暂时不参与负载  
  139.             server 192.168.1.15:3245 backup; 
  140.             #其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。            
  141.         } 
  142.         //第一个虚拟主机,一般默认 
  143.         server{ 
  144.             listen 80; 
  145.             server_name www.yourdomain.com; 
  146.             index index.shtml index.html index.htm index.php; 
  147.             root  /home/wwwroot/www.yourdomain.com; 
  148.      
  149.             #error_page   404   /404.html; 
  150.             include enable-php.conf; 
  151.             location / { 
  152.                 rewrite ^([^\.]*)/shows-([0-9]+)-([0-9]+)-([0-9]+)\.shtml$ $1/index.php?a=shows&catid=$2&id=$3&page=$4 last;  
  153.                 #url重写 
  154.                 if (!-e $request_filename) {    
  155.                     rewrite  ^(.*)$  /index.php?s=$1  last;    
  156.                     break;     
  157.                 } 
  158.              }   
  159.      
  160.             location /nginx_status 
  161.             { 
  162.                 stub_status on; 
  163.                 access_log   off; 
  164.             } 
  165.          
  166.      
  167.             location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 
  168.             { 
  169.                 expires      30d; 
  170.             } 
  171.      
  172.             location ~ .*\.(js|css)?$ 
  173.             { 
  174.                 expires      12h; 
  175.             } 
  176.      
  177.             location ~ /\. 
  178.             { 
  179.                 deny all; 
  180.             } 
  181.             access_log  /home/wwwlogs/www.yourdomain.com.log  access; 
  182.         } 
  183.         //第二个虚拟主机,反向代理php_server_pool这组服务器 
  184.         server{ 
  185.             listen  80; 
  186.             server_name www1.yourdomain.com; 
  187.              
  188.             location / 
  189.             { 
  190.                 #如果后端服务器返回502、504、执行超时等操作,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。 
  191.                 proxy_next_upstream http_502 http_504 error timeout invalid_header; 
  192.                 proxy_pass http://php_server_pool; 
  193.                 proxy_set_header Host www1.yourdomain.com; 
  194.                 proxy_set_header X-Forwarded-For $remote_addr; 
  195.             } 
  196.             access_log  /home/wwwlogs/www1.yourdomain.com.log  access; 
  197.         } 
  198.         //第三个虚拟主机 
  199.         server{ 
  200.             listen 80; 
  201.             server_name www2.yourdomain.com; 
  202.             #访问http://www2.yourdomain.com/message/***地址,反向代理message_server_pool这组服务器 
  203.             location /message/ 
  204.             { 
  205.                 proxy_pass http://message_server_pool; 
  206.                 proxy_set_header Host $host; 
  207.             } 
  208.             location / 
  209.             { 
  210.                 proxy_pass http://php_server_pool; 
  211.                 proxy_set_header Host $host; 
  212.                 proxy_set_header X-Forwarded-For $remote_addr; 
  213.             } 
  214.             access_log off; 
  215.         } 
  216.         include vhost/*.conf; 
  217.     } 

 

------分隔线----------------------------