nginx配置文件

Posted on Posted in nginx
Tips: 本文创建于2014年9月16日,已超过 2 年,内容或图片可能已经失效!

## nginx

#### web服务

  1. worker_processes    4;    #几核  
  2.   
  3. events{  
  4.     worker_connection   5000;   #一个进程可以支持的最大线程  
  5. }  
  6.   
  7. server{     #一个server一个网站  
  8.     listen  80;#监听端口  
  9.     server_name localhost;  #域名  
  10.     location / {  
  11.         root    html;   #网站的路径  
  12.         index   index.html  index.htm;  
  13.     }  
  14.       
  15.     error_page  500 502 503 504 /50x.html  
  16.     location = /50x.html{  
  17.         root    html;  
  18.     }  
  19. }  

#### 分发 虚拟主机/增加server

> 基于端口

  1. server{     #一个server一个网站  
  2.     listen  8080;#监听端口  
  3.     server_name localhost;  #域名  
  4.     location / {  
  5.         root    htdoc;  
  6.         index   index.html  index.htm;  
  7.     }  
  8. }  

> 基于域名

  1. server{     #一个server一个网站  
  2.     listen  80;#监听端口  
  3.     server_name www.ruofish.com;    #域名  
  4.     location / {  
  5.         root    html;   #网站的路径  
  6.         index   index.html  index.htm;  
  7.     }  
  8. }  

> 限速

  1. limit_zone one $binary_remote_addr 10M; #总带宽10M  
  2. server {  
  3.                 listen 80;  
  4.                 server_name www.domain.com;  
  5.                 location / {  
  6.                         root html;  
  7.                         index index.html index.htm;  
  8.                  
  9.                         limit_rate 10k;  #下载速度  
  10.                         limit_rate_after 200m;  #下到200M以后,速度降低为上面那10K  
  11.                         limit_conn one 1;  #允许一个IP同时链接多少次  
  12. }  

#### 代理

> nginx 代理与反向代理

  1. server {  
  2.         listen        80;  
  3.         server_name www.abc.com;  
  4.         location / {  
  5.             proxy_pass http://192.168.18.250;  #代理  
  6.           }  
  7. }  
  8.   
  9. server {  
  10.         listen        80;  
  11.         server_name www.abc.com;  
  12.         location ~ \.php$ {  
  13.             proxy_pass http://192.168.18.250;  
  14.           }  
  15. }  

> URL重定向

  1. server {  
  2.         listen        80;  
  3.         server_name www.abc.com;  
  4.         location / {  
  5.             rewrite ^/ http://192.168.18.250;   #重写  
  6.           }  
  7. }  

> 防盗链

1. 首先要排除 daolian.jpg

  1. location ~ daolian\.jpg${  
  2.             }  

2. 如果不是你的网站链过来的,就显示daolian.jpg这个图片

  1. location ~* .(gif|jpg|png|swf|flv)$ {  
  2.      root /tmp/4;  
  3. valid_referers none blocked www.domain.com *.domain.com;  
  4. if ($invalid_referer) {  
  5. #rewrite ^/ http://www.domain.com/daolian.jpg;  
  6. return 403;  
  7.     }  
  8. }  
  9.   
  10. server {  
  11.         listen 80;  
  12.         server_name www.domain.com;  
  13.         location / {  
  14.                 root /tmp/186;  
  15.                 index index.html;  
  16.         }  
  17.   
  18.         location ~ daolian.jpg {  
  19.                 root /tmp/186;  
  20.                 }  
  21.         location ~* .(gif|jpg|png|swf|flv)$ {  
  22.                 root /tmp/186;  
  23.                 valid_referers none blocked www.domain.com *.domain.com;  
  24.                 if ($invalid_referer) {  
  25.                 rewrite ^/ http://www.domain.com/daolian.jpg;  
  26.                 }  
  27.         }  
  28. }  

[官网][1]

  1. user nginx;  
  2.   
  3. worker_processes  4;    #几核  
  4.   
  5. worker_rlimit_nofile 102400;  
  6.   
  7. worker_cpu_affinity 00000001 00000010 00000100 00001000;  
  8.   
  9. error_log   /var/log/nginx/error.log ;  
  10.   
  11. pid        /var/run/nginx.pid;  
  12.   
  13.   
  14. events {  
  15.   
  16.     use epoll;  
  17.   
  18.     multi_accept on;  
  19.   
  20.     worker_connections  65535;  #一个进程可以支持的最大线程  
  21.   
  22. }  
  23.   
  24.   
  25. http {  
  26.   
  27.     include       /etc/nginx/mime.types;  
  28.   
  29.     default_type  application/octet-stream;  
  30.   
  31.   
  32.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '  
  33.   
  34.                       '$status $body_bytes_sent "$http_referer" '  
  35.   
  36.                       '"$http_user_agent" "$http_x_forwarded_for"';  
  37.   
  38.   
  39.     access_log  /var/log/nginx/access.log  main;  
  40.   
  41.   
  42.     sendfile        on;  
  43.   
  44.     tcp_nopush      on;  
  45.   
  46.     tcp_nodelay     on;  
  47.   
  48.      
  49.   
  50.     keepalive_timeout  60;  
  51.   
  52.     client_header_timeout 20;  
  53.   
  54.     client_body_timeout 20;  
  55.   
  56.     reset_timedout_connection on;  
  57.   
  58.     send_timeout 20;  
  59.   
  60.   
  61.     limit_conn_zone $binary_remote_addr zone=addr:10m;  
  62.   
  63.     gzip  on;  
  64.   
  65.     gzip_proxied any;  
  66.   
  67.     gzip_min_length 256;  
  68.   
  69.     gzip_comp_level 4;  
  70.   
  71.     gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;  
  72.   
  73.   
  74.    open_file_cache max=100000 inactive=20s;  
  75.   
  76.     open_file_cache_valid 30s;  
  77.   
  78.     open_file_cache_min_uses 2;  
  79.   
  80.     open_file_cache_errors on;  
  81.   
  82.     include /etc/nginx/conf.d/*.conf;  
  83.   
  84.     #include /etc/nginx/sites-enabled/*;  
  85.   
  86. }  

下面详细讲述一下这个配置文件里面各个参数的意义:

user nginx

#设置运行nginx的用户为nginx,前提是系统上已经存在这个用户

#如果是yum安装的nginx,系统会存在这个用户,但是最好用命令确认一下

#grep "nginx" /etc/passwd 看看是否已经存在nginx用户了

worker_processes 4;

# 设置用4个进程

worker_cpu_affinity 00000001 00000010 00000100 00001000;

#设置把任务向所有的CPU分配,注意,并不是平均分配

multi_accpet on;

#告诉nginx收到一个新连接通知后接受尽可能多的连接

worker_rlimit_nofile 102400;

#设置一个nginx进程打开的最大文件描述符的个数

#Linux对于每个进程打开的文件描述符的个数有限制,一个进程所赋予的最大文件描述符的个数越多,则拥有的资源就越多

use epoll;

#使用epoll这种IO模型

worker_connections 102400;

#每个进程允许的最大连接数

#从理论上说,每个nginx服务器允许的最大连接数=分配的nginx进程数量*每个进程赋予的最大连接数

keepalive_timeout 60;

#设置keepalive超时时间

sendfile on;

#如果不写这个参数,则默认的是pre-sendfile则是在传送数据之前在用户空间申请数据缓冲区,read()将数据从文件那拷贝到这个缓冲区,而write()则将缓冲区数据写入网络。

#因为是从用户空间申请缓冲区,效率较低,而sendfile()是将数据从磁盘读到OS缓存,这种拷贝是在内核完成的,效率高

#sendfile()比read()和write()以及打开关闭丢弃缓冲更加有效

tcp_nopush

#告诉nginx在一个数据包里发送所有的头文件,而不是一个接一个的发送

tcp_nodelay

#告诉nginx不要缓存数据,而是一段一段的发送,当需要及时的发送数据的时候,就应该设置这个属性

client_header_buffer_size 4k;

#允许客户端请求头部的缓冲区的大小,这个可以根据系统分页大小来设置,一般一个请求的头部大小不会超过1K,不过由于系统内存分页都大于1K,所以这里设置为分页大小,分

#页大小可以用命令getconf pagesize来取得

gzip on

#表示启用压缩,以压缩的形式发送数据,这回减少发送的数据量

gzip_disable

#为指定的客户端禁用gzip功能,比如gzip_disable "msie6"

gzip_static

#告诉nginx在压缩资源之前,先查找是否有gzip预先处理过的资源,这要求预先压缩文件,从而允许使用最高的压缩比,那么nginx就不需要再来压缩这些文件了

gzip_proxied

#表示允许或者禁止压缩基于请求和响应的响应流,如果设置为any,则表示会压缩所有的请求

gzip_min_length

#设置对数据启用压缩的最少字节数,比如可以设置请求少于1000字节,就不要压缩,因为压缩过小的数据反而会降低处理此请求的所有进程的响应速度

gzip_comp_level

#设置数据的压缩等级,这个等级设置的值的范围在1~9,其中9表示压缩比最大,一般设置为4

gzip_type

#设置需要压缩的数据格式

open_file_cache max=102400 inactive=20s

#为打开的文件指定缓存,默认没有启用,max指定缓存数量,建议的值和打开文件描述符的个数一致,inactive指的是经过多长时间文件没被请求后删除缓存

open_file_cache_valid 30s;

#指的是多长时间检查一次缓存的有效信息

open_file_cache_min_users 1;

#指的是open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符在缓存中一直是打开的。

--------------------------------------------------------------------------------

经过初步测试,对于这些值的调整将起到作用较为显著:

增大nginx的进程数 worker_processes

启用尽可能的多进程模式 multi_accept on;

启用epoll use epoll;

减小keepalive_timeout的值 keepalive_timeout 30;

对提高nginx的最大并发数有较好的作用

[1]: http://www.nginx.org

» 转载请注明来源:若我若鱼 » nginx配置文件

Leave a Reply

Your email address will not be published. Required fields are marked *

11 − two =