#运行用户 user www www; #启动进程,通常设置成和cpu的数量相等 worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000; worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; #全局错误日志及PID文件 日志级别:debug|info|notice|warn|error|crit error_log /var/log/nginx/error.log error; pid /var/run/nginx.pid; worker_rlimit_nofile 51200; 更改worker进程的最大打开文件数限制。如果没设置的话,这个值为操作系统的限制 #工作模式及连接数配置 events { use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能 worker_connections 1024;#单个后台worker process进程的最大并发链接数 multi_accept off; #多个worker按串行方式来处理连接,也就是一个连接只有一个worker被唤醒,其他的处于休眠状态。设置为off后,多个worker按并行方式来处理连接,也就是一个连接会唤醒所有的worker,知道连接分配完毕,没有取得连接的继续休眠。当你的服务器连接数不多时,开启这个参数会让负载有一定程度的降低。但是当服务器的吞吐量很大时,为了效率,请关闭这个参数 } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { include mime.types;#设定mime类型,类型由mime.type文件定义 default_type text/html; client_max_body_size 8m; #客户端上传的body的最大值 lua_max_pending_timers 10240; sendfile on; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime. tcp_nopush on; #数据包会累积一下再一起传输,可以提高一些传输效率 server_tokens off;#关闭在错误页面中的nginx版本数字 if_modified_since exact #判断页面是不是最新的,浏览器本地最新的浏览器从本地获取。 tcp_nodelay on; #小的数据包不等待直接传输 access_log off; error_log /var/log/nginx/error.log crit;#告诉nginx只能记录严重的错误 limit_conn addr 100;#为给定的key设置最大连接数。这里key是addr,我们设置的值是100,也就是说我们允许每一个IP地址最多同时打开有100个连接 #连接超时时间 keepalive_timeout 10; #keepalive_disable none; client_header_timeout 10;#设置请求头和请求体(各自)的超时时间。我们也可以把这个设置低些 client_body_timeout 10; reset_timeout_connection on;#关闭不响应的客户端连接 send_timeout 10;#客户端没有读取任何数据,nginx就会关闭连接 client_header_buffer_size 128k; #设置header的缓冲大小 large_client _header_buffer 4 128k;#客户请求头缓冲大小。nginx默认会用client_header_buffer_size这个buffer来读取header值,如果header过大,它会使用large_client_header_buffers来读取 #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #禁用某些浏览器的gizp Microsoft Internet Explorer,简称MSIE gzip_proxied any; #Nginx作为反向代理的时候启用,根据某些请求和应答来决定是否在对代理请求的应答启用gzip压缩 #expired - 启用压缩,如果header头中包含 "Expires" 头信息 #no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息 #no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息 #private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息 #no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息 #no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息 #auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息 #any - 无条件启用压缩 gzip_min_length 1000; #对数据启用压缩的最少字节数。如果一个请求小于1000字节,我们最好不要压缩它 gzip_comp_level 4; #设置数据的压缩等级。这个等级可以是1-9之间的任意数值,9是最慢但是压缩比最大的。我们设置为4,这是一个比较折中的设置 gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; #php fastcgi的缓存 fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=TEST:10m inactive=5m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300; fastcgi_buffer_size 16k; fastcgi_buffers 16 16k; fastcgi_busy_buffers_size 16k; fastcgi_temp_file_write_size 16k; fastcgi_cache TEST; fastcgi_cache_valid 200 302 1h; fastcgi_cache_valid 301 1d; fastcgi_cache_valid any 1m; fastcgi_cache_min_uses 1; fastcgi_cache_use_stale error timeout invalid_header http_500; open_file_cache max=204800 inactive=20s;#nginx打开文件 缓存的同时也指定了缓存最大数目,以及缓存的时间,缓存溢出,最长使用过的文件(LRU)将被移除 open_file_cache_valid 30s;#在open_file_cache中指定检测正确信息的间隔时间 open_file_cache_min_uses 2;#定义了open_file_cache中指令参数不活动时间期间里最小的文件数 open_file_cache_errors on; #proxy代理缓存 proxy_cache_path /cache/proxy_cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=30g; #100m和30G,按照服务要求,适当增大 proxy_temp_path /cache/proxy_temp; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; #设定负载均衡的服务器列表,实现nginx的内部跳转 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的Squid开启3128端口 server 192.168.8.1:80 weight=5; server 192.168.8.2:80 weight=1; server 192.168.8.3:80 weight=6; } server { listen 2001; server_name gmslog.jd.com; location / { autoindex on; root "/export/Logs/gms-log"; index index.html index.log; } } server { #侦听80端口 listen 80; #定义使用www.xx.com访问 server_name www.xx.com; index index.html index.htm #设定本虚拟主机的访问日志格式 log_format tick "$msec|||$u_t|||$http_x_forwarded_for|||$u_domain|||$u_url|||$u_title|||$u_referrer|||$u_sh|||$u_sw|||$u_cd|||$u_lang|||$http_user_agent|||$u_utrace|||$u_account|||$u_time"; access_log logs/www.xx.com.access.log tick buffer=32k; open_log_file_cache max=1000 inactive=10s min_size=2 valid=1m#记录日志缓存 location / { proxy_cache cache_one; proxy_cache_min_uses 3; proxy_cache_revalidate on; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_cache_key "$host$request_method$uri$is_args$args"; proxy_cache_valid 200 304 12h; proxy_cache_valid 301 302 1m; proxy_cache_valid any 1m; proxy_pass http://mysvr; proxy_redirect off; proxy_next_upstream http_503 http_500 http_502 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header N-Cache "$upstream_cache_status From $host"; log_not_found off; expires 1d; } location = /access { access_by_lua_block { --ngx.say(ngx.var.header_Accept); ngx.exec("/test"); } } location = /test { default_type 'text/plain'; resolver 192.168.177.255; set $cache_key "1234567890"; content_by_lua_file conf/test.lua; } ##获取post过来的参数,get过来的参数,获取header location /form { set_form_input $name; content_by_lua ' local say = ngx.say; local header_Content_type = ngx.req.get_headers()["Cache-Control"] if not header_Content_type then say("error"); end say(header_Content_type); local name = ngx.var.name; say(name); local age = ngx.var.arg_age; say(age); '; } # rewrite location /face { #rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect; rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg break; proxy_pass http://192.168.149.90/api/rec/list?name=123; } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; } #静态文件,nginx自己处理 location ^~ /(images|static)/ { root /var/www/virtual/htdocs; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。 expires 30d; } location ~* \.(gif|jpg|jpeg)$ { root /var/www/virtual/htdocs; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。 expires 30d; } #设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } location / { deny 192.168.1.1; allow 192.168.1.0/24; allow 10.1.1.0/16; allow 2001:0db8::/32; deny all; } location /face { rewrite ^(.*)$ http://211.151.188.190:8080/face.jpg redirect; } #禁止访问 .htxxx 文件 location ~ /\.ht { deny all; } } }