列举出一些 Nginx 的常用配置,每次修改过nginx配置后,可以使用命令 nginx -s reload
,进行配置更新
0. nginx常用内置变量
变量名 | 功能 |
---|---|
$host | 请求信息中的Host ,如果请求中没有,则等于设置的服务器名 |
$request_method | 客户端的请求类型,如GET 、POST |
$remote_addr | 客户端的IP 地址 |
$remote_port | 客户端的端口 |
$content_length | 请求中的Content-length 字段 |
$http_user_agent | 客户端agent 信息 |
$http_cookie | 客户端cookie 信息 |
$args | 请求中的参数 |
$server_protocol | 请求使用的协议,如HTTP/1.0 、HTTP/1.1 |
$server_addr | 服务器地址 |
$server_name | 服务器名称 |
$server_port | 服务器的端口号 |
1.worker_processes
一般一个进程足够了,你可以把连接数设得很大。
如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。
或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加
服务器是“多个CPU+gzip+网站总文件大小大于内存”的环境,worker_processes设置为CPU个数的两倍比较好
2.server_name
用来指定IP地址或者域名,多个域名之间用空格分开
1 | server_name _; #server_name这么写表示不启用域名,直接ip访问 |
当我们监听的的端口只有一个server配置的时候,server_name 可以不填
3.gzip
nginx自带压缩功能,但对视频图片效果不好,建议只对css,js等进行压缩
1 | gzip on; #默认为off |
更详细的配置请查看gzip配置
4.location
语法规则location [=|~|~*|^~] /uri/ { … }
=
开头表示精确匹配^~
开头表示uri以某个常规字符串开头,理解为匹配 url路径即可。nginx不对url做编码,因此请求为/static/20%/aa,可以被规则^~ /static/ /aa匹配到(注意是空格)。以xx开头~
开头表示区分大小写的正则匹配 以xx结尾~*
开头表示不区分大小写的正则匹配 以xx结尾!~
和!~*
分别为区分大小写不匹配及不区分大小写不匹配 的正则/
通用匹配,任何请求都会匹配到。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24location = / {
#规则A
}
location = /login {
#规则B
}
location ^~ /static/ {
#规则C
}
location ~ \.(gif|jpg|png|js|css)$ {
#规则D,注意:是根据括号内的大小写进行匹配。括号内全是小写,只匹配小写
}
location ~* \.png$ {
#规则E
}
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
location / {
#规则H
}
5.静态http服务器配置
1 | server { |
6.反向代理配置
反向代理普通请求
1 | server{ |
反向代理websocket
1 | server{ |
7.重定向配置
1 | server{ |
8.防盗链设置
1 | location ~* \.(gif|jpg|png|bmp)$ { |
9.根据图片文件类型设置过期时间
1 | location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|swf)$ { |
10.设置禁止访问某个目录
1 | location ~* \.(txt|doc)$ { |
11.隐藏版本号
可防止别人通过你所用的nginx版本,找其漏洞,进行攻击你,可查看请求的response中的Server
字段进行查看效果。
1 | http{ |
12.开启ssl加密,开启https
1 | server{ |
关于生成自签名证书,可参照这篇文章linux生成私有证书
13.开启文件目录显示
当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录
1 | server { |
14.限制请求方法
$request_method能够获取到请求nginx的method
1 | server { |
15.设置缓冲区容量上限
在http层级设置,可以防止缓冲区溢出攻击
1 | http{ |