首页 > 其他 > 详细

nginx配置总结

时间:2014-03-17 09:40:15      阅读:512      评论:0      收藏:0      [点我收藏+]

1. 全局配置

   user nginx ngnix;

   #运行nginx进程的用户与组

   worker_process 2;

   #启动几个worker进程

   error_log logs/error.log;

   #定义错误访问日志的路径

   pid  logs/nginx.pid;

   #定义pid文件的路径

   worker_rlimit_nofile 8192;

   #每个worker进程启动可以打开的文件数目

   

   events {

   worker_connections 4096;

   #每个worker可以接收的请求连接数。

   }


2. 日志配置

    log_format   main ‘$remote_addr - $remote_user [$time_local]  $status ‘

   ‘"$request" $body_bytes_sent "$http_referer" ‘

   ‘"$http_user_agent" "$http_x_forwarded_for"‘;

   #定义日志的记录格式,此格式的名字为main。


3. 虚拟主机配置

   server {

       listen80;

       #监听的地址与端口,后面可以跟参数,如listen 192.168.0.11:443 ssl。

       server_namenode1.yonchin.com;

       #定义虚拟服务器的名字。

       access_loglogs/node1.access.log main;

       #访问路径,和记录格式。

       roothtml;

       #文档根目录,可以是绝对路径也可以是相对路径。

   }


4. 访问控制

   location /status {

       deny 192.168.0.11;

       allow 192.168.0.0/24;

       allow 10.128.1.0/16;

       deny all;

       #acl规则是从上到下的依此生效的。

   }


5. 基本认证

   location /status {

       auth_basic    "Nginx Status Info";

       #登陆时显示的信息。

       auth_basic_user_file /etc/nginx/.htpasswd;

       #定义密码认证文件,允许访问/status这个URI用户和对应的密码。

   }

   .htpasswd的创建:

       htpasswd -cm /etc/nginx/.htpasswd user1


6. 状态信息

   location /status {

       stub_status    on;

       #开启状态信息的查看功能。

       access_log off;

       #关闭访问/status的日志。

       allow 192.168.0.12;

       #仅允许192.168.0.12这个地址访问。

       deny all;

   }


7. gzip 配置

   gzip    on;

   #开启对响应报文的压缩功能。

   gzip_buffers168k;

   #压缩响应报文所使用的缓冲区个数以及每个缓冲区的大小。

   gzip_comp_level6;

   #压缩的程度,1-9压缩比例依此增加,不必太高要不浪费CPU时钟。

   gzip_disable"MSIE [1-6]\.";

   #对不支持压缩功能的浏览器,禁用gzip功能。

   gzip_min_length1024;

   #响应报文最小多大,可以对其使用gzip功能。

   gzip_http_version1.1;

   #对哪个http协议的版本,进行压缩。

   gzip_proxied expired no-cache no-store private;

   #对来自后端的哪种响应报文进行压缩,即nginx本身为代理服务器。

   gzip_typestext/plainapplication/xml;

   #对哪种类型的响应文件需要进行压缩。

   gzip_varyon;

   #在响应头部信息中,添加一个头信息为"Vary: Accept-Encoding"

   

8. rewrite配置

   域名跳转:

   server {

       listen 80;

       server_name node1.yonchin.com;

       rewrite^/http://node2.yonchin.com;

       #将对node1.yonchin.com的所有请求都重定向到http://node2.yonchin.com上。

   }

   指定路径跳转:

   location / {

       rewrite^/forum/?$/bbs/ permanent;

       #将对/forum下面的URI的访问永久重定向到/bbs/上。rewrite后面可以跟的参数有4种:

       last:表示匹配完rewrite规则后,不再继续进行后面rewrite的匹配。但所匹配到的URL会去查找一个合适的location指令所定义的内容。所以,这个参数不用在location上下文中,否则容易产生死循环。

       break:表示匹配完rewrite规则后,不再继续进行后面rewrite的匹配。这个参数可以用在location上下文中。

       redirect:会返回302的临时重定向代码。如果重定向后的URL不是以http://或https://开头的话,可以使用这个参数。

       permanent:返回一个301的永久重定向代码。

   

   }

   

9. https配置

   server {

       listen 443 ssl;

       #监听443端口并开启ssl功能。或者直接使用ssl on;也可以开启ssl。

       server_namenode1.yonchin.com;

       indexindex.html;

       #主页文件。

       root/www

       ssl_protocolsSSLv3 TLSv1 TLSv1.1 TLSv1.2;

       #定义ssl所支持的协议。

       ssl_ciphersAES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;

       #启用加密算法。

       ssl_certificate/etc/nginx/nginx.crt;

       #公钥的路径。

       ssl_certificate_key/etc/nginx/nginx.key;

       #私钥的路径。

       ssl_session_timeout10m;

       #定义客户端重用缓存中ssl会话参数的超时时长。

       ssl_session_cacheshared:SSL:10m;

       #定义缓存ssl会话参数的类型和大小。类型分builtin和shared两种,builtin表示每个worker进程单独使用一个缓存,shared表示所有的worker进程共享一个缓存。建议使用shared类型。

   }

   

   建立证书:

   (umask 077; openssl genrsa -out nginx.key 1024)

   openssl req -new -X509 -key ngnix.key -out nginx.crt

   

10. proxy配置

   http {

   proxy_set_header Host$host;

   #向代理服务发往后端的请求头域中,添加客户端所请求的主机名。

   proxy_set_headerX-Real-IP$remote_addr;

   #向代理服务发往后端的请求头域中,添加X-Real-IP头域,值为$remote_addr即客户端IP。

   proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;

   #将$remote_addr的值追加到X-Forwareded-For请求头域后面。如果没有X-Forwareded-For请求头域,则$proxy_add_x_forwarded_for的值与$remote_addr的值相等。

   client_max_body_size10m;

   #客户端请求的请求体的最大大小。

   client_body_buffer_size128k;

   #客户端请求体可以使用的缓冲大小。

   proxy_buffering on;

   #开启代理对后端服务器响应数据的缓冲功能。

   proxy_connect_timeout90;

   #代理服务器与后端连接建立的超时时间。

   proxy_send_timeout90;

   #代理服务器向后端服务器发送请求的超时时间。

   proxy_read_timeout90;

   #代理服务器接收后端服务器响应的超时时间。

   proxy_buffers4 64k;

   #对于每个连接,所能使用的缓冲区的个数以及每个缓冲区的大小。

   proxy_buffer_size128k;

   #表示可以接受后端服务器所响应的最大数据。

   proxy_busy_buffers_size128k;

   #表示缓存中的响应数据要发送到客户端时,所使用的缓冲大小。

   proxy_temp_file_write_size128k;

   #如果一次可写入临时文件的数据大小。

   server {

       listen 80;

       server_namenode1.yonchin.com;

           location / {

               proxy_passhttp://192.168.0.12;

           }

       }

   }

   缓存所代理的数据:

   http {

       proxy_cache_path/data/nginx/cache  levels=1:2 keys_zone=static:10m inactive=24h max_size=1g;

   #定义缓存路径,几级的缓存目录,缓存区域的名称和大小,多长时间处于非活动状态时可以删除,最大缓存多少数据。

   

   server {

       proxy_passhttp://192.168.0.12;

       proxy_set_headerHost $host;

       proxy_cachestatic;

       #使用上面定义的缓存区域。

       proxy_cache_valid200 302 1d;

       #不同的响应码的缓存时长。

       proxy_cache_validany 1m;

       #除了200,302外,其他的所有响应码缓存1分钟。

       prox_cache_use_staleerror timeout invalid_header updating http_500 http_502 http_503 http_504;

       #表示出现那种情况的时候可以使用缓存中过期的数据。

       }

   }

11. 负载均衡

   算法:

   rr :轮询,默认即是这种算法。

   wrr :加权轮询,需要添加weight参数。

   ip_hash :基于客户端IP地址的hashing来进行请求的负载均衡。

   least_conn :基于最少的活动连接数对请求负载均衡。

   

   例子:

   http {

       upstream backend {

       server 192.168.0.11weight=2;

       server 192.168.0.12weight=3;

       server 127.0.0.1 backup;

       #backup表示正常情况下,127.0.0.1不提供服务,只有在所有的其他server宕机后才使用它。

       }

   或:

   upstream backend {

       ip_hash;

       server 192.168.0.11;

       server 192.168.0.12 down;

       #down参数表示此后端服务器不可用,常与ip_hash算法结合使用。

       server 127.0.0.1 backup;

       }

   server {

           location / {

           proxy_pass http://backend;

           }

       }

   }


12. 动静分离

   upstream dynamic {

       server 192.168.0.12;

       server 192.168.0.13;

   }

   server {

       listen 80;

       server_name node1.yonchin.com;

       index index.html;

       root /usr/shard/nginx/html;

       

       location ~* \.(html|gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$ {

       expires 5d;

       #在响应给客户端的响应头部,添加"Expires"和"Cache-Control"响应头部,此处表示对匹配到的文件在客户端缓存5天。

   }

       location ~* \.php$ {

       proxy_pass http://dynamic;

       }

   }

   或:

   upstream static {

       server 192.168.0.11;

       }

   upstream dynamic {

       server 192.168.0.12;

       server 192.168.0.13;

   }

   server {

       location ~* \.(html|gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma) {

       proxy_pass http://static;

   }

       location ~* \.php$ {

           proxy_pass http://dynamic;

       }

   }

   

13. 防盗链

   location ~* \.(png|gif|jpg|jpeg|ico|swf|flv|wma|wmv|mp3|asf|rar|zip)$ {

       valid_referersnone blocked server_names

                           *.myselfsite.com

                           ~\.google\. ~\.baidu\.;

   }

   #请求头中不包含Referer头域的,经过防火墙或代理服务器Referer被删除的,有Referer且属于server_name指令中定义的,Referer头域中是*.myselfsite.com的,包含google和baidu字段的,都允许访问。

   if ($invalid_referer){

       return 403;

   #如果Referer中的URL不匹配指令valid_referers中定义的内容,那么$invalid_referer的值将为真,就会返回给客户端403的错误。

   }


14. 后端健康监测

   软件:tengine-2.0.1.tar.gz

   系统:CentOS6.5

   安装:

   ./configure   --user=nginx   --group=nginx     --with-http_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module --enable-mods-shared=all --with-file-aio  --with-http_sysguard_module --with-pcre

   make && make install

   配置:

       http {

           upstream webs {

               server 192.168.0.12;

               server 192.168.0.13;

               check interval=3000 rise=2 fall=5 timeout=1000 type=http;

               #interval:发送健康监测的时间间隔。

               #rise:如果连续成功检测2次,服务器就被认为是up。

               #fall:如果连续失败检测5次,服务器就被认为是down。

               #timeout:健康检测的超时时间。

               #type:健康检查包的类型。支持tcp、ssl_hello、http、mysql、ajp。

               check_http_send "HEAD / HTTP/1.0\r\n\r\n";

               #健康检测的内容。注意HTTP协议的版本是1.0。1.1的版本无法正常检测后端。

               check_http_expect_alive http_2xx http_3xx;

               #后端返回什么状态码,就认为是健康的。还支持http_4xx和http_5xx。

           }

       server {

           location / {

               proxy_passhttp://webs;

           }

           location /status {

               check_status;

               #显示服务器的健康状态页面。

               access_logoff;

               allow 192.168.0.0/24;

               denyall;

           }

         }

       }

15. 过载保护

   环境同上。

   http {

       dso {

       load ngx_http_sysguard_module;

       #动态加载sysguard模块

       }

       server {

       sysguard on;

       #开启sysguard功能。

       sysguard_load load=2*0.5 action=/test.html;

       #如果CPU的平均负载率超过2*0.5则就显示/test.html这个页面的内容。2表示CPU的个数为两个,0.5可以理解为每个CPU的的单独负载。

       sysguard_mem swapratio=20% action=/test.html;

       #如果swap分区的使用率超过20%的话,就返回test.html这个页面内容。

       sysguard_mem free=100Maction=/test.html;

       #如果空闲内存少于100M的话,就返回test.html这个页面内容。当然也可以直接返回错误状态码,例如:

       server {

           sysguard on;

           sysguard load=1.5 action=/loadlimit;

           location /loadlimit {

               return 503;

           }

       }

     }

   }


16. 常用命令行

   日志轮转:

   mv access.log access.log.0

   kill -USR1 `cat master.nginx.pid`

   #USR1这个信号,就是告诉nginx主进程重新打开一个日志文件。

   在线升级nginx:

   kill -USR2 `cat master.nginx.pid`

   平滑重启:

   kill -HUP `cat master.nginx.pid`

   从容关闭工作进程:

   kill -WINCH `cat master.nginx.pid`

   从容关闭:

   kill -QUIT `cat master.nginx.pid`

   #从容的意思就是等所有的连接断开后,在关闭进程。


17. 与PHP FPM结合的配置

   location ~ \.php$ {

       fastcgi_pass 192.168.0.12:9000;

       fastcgi_index index.php;

       fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

       include fastcgi_params;

       }


   在文件fastcgi_params中加入下面一行配置:

   fastcgi_paramSCRIPT_FILENAME $document_root$fastcgi_script_name;

   

   :此处也可以不加上面的一行配置,但是fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;这行中的/scripts需要改成php-fpm服务器上的文档的存放路径。


本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1377741

nginx配置总结,布布扣,bubuko.com

nginx配置总结

原文:http://noican.blog.51cto.com/4081966/1377741

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!