worker_processes
设置 worker 的数量,Nginx的进程模型采用的是master、worker模式,一个master负责协调,多个worker负责与客户端交互。此处设置为 auto 即可
events
- 设置使用的模型和每个 worker 的连接数。
- Linux操作系统中模型建议使用 epoll。
- worker 的连接数通常设置为 10240 即可,当然如果硬件资源非常好,也可以适当加大。
include
包含另一个文件的内容,将另一个文件的内容放在标记处。
多个文件可以写多个 include,也可以使用通配符匹配多个文件。
sendfile 和 tcp_nopush
sendfile: 设置文件高效传输是否开启,默认开启。
tcp_nopush:必须是 sendfile 值为 on 时才有效,当 tcp_nopush 设置为 on 代表当数据包累计到一定大小时再发送,有助于提升文件传输效率。
建议都设置为 on。
gzip
设置为 on,代表会先将数据压缩再进行传输,这样做会增加传输的效率,节省带宽,但会影响服务器CPU的性能。
开启此配置,还需要配置一些额外的属性。
此处可以权衡是节省带宽还是提高CPU性能,建议开启,根据实际情况配置
gzip on;gzip_min_length 512; # 限制最小压缩,单位字节,小于该值则不会压缩 gzip_comp_level 5; # 压缩的级别,值为1到9,级别越高压缩的比例越大,cpu消耗越多 gzip_types text/plain application/javascript text/css image/jpeg image/gif image/png application/json; # 需要压缩的文件类型
server
- 一个server块就是一个虚拟的服务。
- 在server块中可以指定虚拟服务的 端口、服务名、路由规则等信息。
- server可以有多个。
- 一个server下,location也可以有多个
#权重 upstream my_test_server { server 192.168.0.100:8080 weight=1; server 192.168.0.101:8080 weight=2; server 192.168.0.102:8080 weight=3; } upstream proxyserver { server localhost:18080; server localhost:28080; } server { listen 60000; server_name localhost; # 浏览器访问域名 charset utf-8; access_log /etc/nginx/logs/localhost60000.access.log access; location /returntest { # 结尾不带/,则用proxy_pass+location,结尾带/,则只使用proxy_pass proxy_pass http://proxyserver/; } } server { listen 80; # 端口 server_name localhost; # 服务名,可以是IP地址或者域名,当端口相同时,会根据服务名选择走哪个路由规则 location / { proxy_pass http://my_test_server; } location ~ .*\.(html|jpg|txt|js|css) { #正则表达式匹配,*代表不区分大小写 root /data/web; # 对应nginx安装目标下的html文件夹,也可以设置为绝对路径,例如:root /home/html; index index.html index.htm; # 指定默认首页为 hello.html add_header 'Access-Control-Allow-Origin' '*'; #指定允许跨域访问的源站,可以使用 * 表示允许任何来源跨域访问 add_header 'Access-Control-Allow-Credentials' 'true'; #指定是否允许发送 Cookie 和 HTTP 认证信息 add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; #指定允许跨域请求的 HTTP 方法 add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization'; #指定允许的自定义请求头部 proxy_pass http://127.0.0.1:5000; } error_page 500 502 503 504 /50x.html; # 指定这些状态码跳转的错误页 location = /50x.html { root html; } }
location的匹配规则详解
语法规则: location [=|~|~*|^~] /uri/ { … }
- = 严格匹配。如果请求匹配这个location,那么将停止搜索并立即处理此请求
- ~ 区分大小写匹配(可用正则表达式)
- ~* 不区分大小写匹配(可用正则表达式)
- !~ 区分大小写不匹配
- !~* 不区分大小写不匹配
- ^~ 如果把这个前缀用于一个常规字符串,那么告诉nginx 如果路径匹配那么不测试正则表达式
# 路由 location / { root /etc/nginx/html; # 访问/etc/nginx/html/index.html index index.html index.htm; # 入口文件 } location /html/ { root /etc/nginx; # 访问/etc/nginx/html/other/index.html index index.html index.htm; # 入口文件 } location /htmlalias/ { alias /etc/nginx/html/; index index.html index.htm; } location /producterone/ { proxy_pass http://172.18.0.4:8080; #转发到其他服务http://172.18.0.4:8080//producterone/say } location /returnok/ { return 200 "success"; #返回200和消息 } #root 实际访问文件路径会拼接URL中的路径 #alias 实际访问文件路径不会拼接URL中的路径 #proxy_pass 表示代理转发