紧张由三部分组成

全局块events块http块全局块

从配置文件开始到events块之间的内容是全局块,紧张用来配置Nginx做事器整体运行的配置指令,紧张包括配置运行Nginx的用户组、许可天生的worker process数,进行PID存放路径、日志存放路径和类型以及配置文件的引入

#nginx的用户和用户组#user nobody;# nginx处理并发的数量,值越大,处理并发数量越多# 常日为cpu数量worker_processes 1;#全局缺点日志定义 位置 级别([ debug | info | notice | warn | error | crit ])#error_log logs/error.log;#error_log logs/error.log notice;#error_log logs/error.log info;#进程文件#pid logs/nginx.pid;#一个nginx进程打开的最多文件描述符数目,理论值该当是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配要求并不屈均,以是建议与ulimit -n的值保持同等.worker_rlimit_nofile 65535;events块

紧张是影响Nginx做事器与用户网络的连接,常用的配置包括是否开启对多worker process下的网络连接进行序列化,是否许可同时接管多个网络连接,选取那种事宜驱动模型来处理连接要求,每个worker process可以同时支持的并发数

nginx禁止下载phpNginx设置装备摆设详解 AJAX

events {#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; #epoll模型是Linux内核中的高性能网络I/O模型,如果在mac上面,就用kqueue模型。
use kqueue;# 每个worker process可以同时支持的连接数为1024# nginx支持的最大并发数是worker_processesworker_connections#如果是作为反向代理做事器的话,最大并发数是worker_processesworker_connections/2,由于反向代理做事器,每个并发会建立与客户真个连接和与后真个连接,会占用两个连接 worker_connections 1024;}
http块

Nginx配置中修正最频繁的配置便是http块的配置

http块又分为了http全局块和server块

http全局块

紧张配置的是文件的引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接要求上限等

server块紧张是虚拟主机的配置

又分为了server全局块和location块

http { # 文件扩展名与文件类型映射表 include mime.types; # 默认文件类型 default_type application/octet-stream; #默认编码 #charset utf-8; #做事器名字的hash表大小 server_names_hash_bucket_size 128; #上传文件大小限定 client_header_buffer_size 32k; #设定要求缓冲 large_client_header_buffers 4 64k; #设定要求缓冲 client_max_body_size 8m; # 开启目录列表访问,得当下载做事器,默认关闭. # 显示目录 autoindex on; # 显示文件大小 默认为on,显示出文件的确切大小,单位是bytes 改为off后,显示出文件的大概大小,单位是kB或者MB或者GB autoindex_exact_size on; # 显示文件韶光 默认为off,显示的文件韶光为GMT韶光 改为on后,显示的文件韶光为文件的做事器韶光 autoindex_localtime on; #日志格式化 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; # 日志保存 日志的格式利用main #access_log logs/access.log main; # sendfile 高效传输文件的模式 sendfile on; # 将文件一次性一起传输给客户端,提高网络包的传输效率 #tcp_nopush on; # 开启实时传输,与tcp_nopush相反,只在长连接下有效 #tcp_nodelay on; #连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; # 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; #许可压缩的页面的最小字节数,页面字节数从header偷得content-length中获取.默认是0,不管页面多大都进行压缩.建议设置成大于1k的字节数,小于1k可能会越压越大 gzip_min_length 1k; #表示申请4个单位为16k的内存作为压缩结果流缓存,默认值是申请与原始数据大小相同的内存空间来存储gzip压缩结果 gzip_buffers 4 16k; #压缩版本(默认1.1,目前大部分浏览器已经支持gzip解压.前端如果是squid2.5请利用1.0) gzip_http_version 1.1; #压缩等级.1压缩比最小,处理速率快.9压缩比最大,比较花费cpu资源,处理速率最慢,但是由于压缩比最大,以是包最小,传输速率快 gzip_comp_level 2; #压缩类型,默认就已经包含text/html,以是下面就不用再写了,写上去也不会有问题,但是会有一个warn. gzip_types text/plain application/x-javascript text/css application/xml; #选项可以让前真个缓存做事器缓存经由gzip压缩的页面.例如:用squid缓存经由nginx压缩的数据 gzip_vary on; #实际的做事器列表 #upstream myserver { # server 127.0.0.1:8080; # server 127.0.0.1:8082; #} # 虚拟主机设置 server { #监听的端口号 listen 8080; #访问域名 server_name localhost; #编码格式 #charset koi8-r; #虚拟主机访问日志定义 #access_log logs/host.access.log main; # url匹配 location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # 禁止访问.ht文件 #location ~ /\.ht { # 禁止下载 # deny all; #} } server { # 监听端口 HTTPS listen 443 ssl; server_name ably.com; # 配置域名证书 ssl_certificate /server/Certs/certificate.crt; ssl_certificate_key /WebServer/Certs/private.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; index index.html index.htm index.php; root /data/www/; location ~ .\.(php|php5)?$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; } # 配置地址拦截转发,办理跨域验证问题 location /oauth/{ proxy_pass https://localhost:13580/oauth/; proxy_set_header HOST $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 图片缓存韶光设置 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/access.log access; # 设定查看Nginx状态的地址.StubStatus模块能够获取Nginx自上次启动以来的事情状态,此模块非核心模块,须要在Nginx编译安装时手工指定才能利用 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; #htpasswd文件的内容可以用apache供应的htpasswd工具来产生. } } include servers/;}location配置匹配规则

location有多种匹配规则[=|~|~|^~] /url/

=表示精确匹配,优先级最高\^~表示uri以某个字符串开头,即^~/spring/ 可以被所有以/spring/开头的匹配到~为区分大小写的正则匹配,如果利用!~则表示取反,不匹配的正则~为不区分大小写的正则匹配,如果利用!~则表示取反,不匹配的正则/通用匹配,任何要求都会匹配到静态文件路径

可以利用root或alias来指定静态资源文件路径,root可以配置在http块、server块、location块以及if块中,alias只能配置在location块中

root

利用root来表示要求的url时会进行完全的拼接,即如果要求利用的uri是/pic/index.html的话,利用root实际获取的是/data/www/web/pic/index.html

location /pic/ { root /data/www/web;}alias

alias会将location中配置的路径丢弃掉,即即如果要求利用的uri是/pic/index.html的话,利用alias实际获取的是/data/www/web/index.html

location /pic/ { alias /data/www/web;}Nginx常见配置参数servernameshashmaxsize 1024;servernameshashbucketsize 512;clientheaderbuffer_size 32k; # 客户端要求头部的缓冲区大largeclientheader_buffers 4 32k;clientmaxbody_size 10m;#设置最大的许可客户端要求主体的大小(上传文件大小限定), 默认为1mclientbodybuffer_size 128k;keepalive_timeout 60; #客户端连接超时时间,单位是秒, 默认是75秒sendfile on; # 开启高效传输模式,默认为offtcp_nopush on;tcp_nodelay on;ssi on; # 开启ssi支持,默认为falsessisilenterrors on; # 设置为on表示在处理ssi文件时不输出错误信息,默认为falsessitypes text/html; # 默认支持html ,如果须要支持shtml(做事器实行脚本),须要设置为ssitypes text/shtmlserver_tokens off; # 关闭nginx版本号的显示,默认为onNginx优化干系参数worker_processes 2; # 配置天生的worker process数量,一样平常为cpu核数workerrlimitnofile 65536; # 一个nginx进程打开的最多文件描述符数目,一样平常设置为与系统设定的值相同(ulimit -n)workercpuaffinity 01 10;# 为每个进程分配CPU的事情内核use epoll; # 事务模型

events { use epoll; # 事务模型 worker_connections 20000; # 一个nginx进程的连接数,nginx做事器许可的同事连接的客户端最大数量Client = worker_processes worker_connections/2;}Nginx常见用法依据UA屏蔽爬虫

if ($http_user_agent ~ "qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo! Slurp|Yahoo! Slurp China|YoudaoBot|Sosospider|Sogouspider|Sogou web spider|MSNBot|ia_archiver|Tomato Bot") { return 403;}屏蔽IP访问

allow 133.27.182.82;allow 113.106.18.0/24;allow 121.201.104.0/24;deny all;利用Auth权限访问

auth_basic "bbs-auth";auth_basic_user_file /usr/local/nginx/conf/bbsauthpwd;限定带宽

# 用户下载达到 500k 后,便掌握其速率在 50k 以内location /download/ { limit_rate_after 500k; limit_rate 50k;}限定连接

# 定义了一个名为“down”,10M大小,以连接IP为key的连接数据存储空间limit_conn_zone $binary_remote_addr zone=down:10m;# 读取名为`down`连接数据存储空间的数据,限定每个key(上面因此ip作为IP) 最大同时连接数为4location ~ .\.(rar|zip|apk)?$ { limit_conn down 4; limit_rate 150k;}limit_conn_log_level notice: 指定当触发limit的时候日志打印级别限定要求

# 定义一个名为”one”, 10M大小,每秒1个要求的要求数据存储空间limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;# 引用名为“one”的存储空间,burst为等待要求数量数,当等待要求数量超过50个时,则抛出503缺点,nodelay 针对的是 burst 参数,burst=50 nodelay 表示这50个要求立马处理,不能延迟,相称于特事特办。
不过,纵然这20个突发要求立马处理结束,后续来了要求也不会立马处理。
burst=50 相称于缓存行列步队中占了50个坑,纵然要求被处理了,这20个位置这只能按 100ms一个来开释limit_req zone=one burst=50 nodelay;limit_req_log_level notice: 指定当触发limit的时候日志打印级别
实时显示Nginx运行状况

在安装nginx是编译httpstubstatusmodule即可,利用参数为–with-httpstubstatusmodule

location /ngx_status { stub_status on; access_log on;}设置缺点页面

error_page 404 /404.htmlNginx 常见缺点码301 永久重定向302 临时重定向403 禁止访问404 文件不存在413 文件上传超过限定500 做事器缺点502 后台做事器无相应504 Nginx超时,要求过多,事情进程不敷