目录
命令
nginx -t
进入nginx安装目录sbin下,输入命令./nginx -t
作用:
1、验证nginx配置文件是否正确
2、查看配置文件 nginx.conf 路径
nginx -s reload
作用:平滑重启(服务不会中断)
常用配置
1、设置代理
location / {
# add_header access-control-allow-origin *;
proxy_pass http://IP地址:端口号;
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Origin $host:$server_port;
proxy_set_header Referer $host:$server_port;
}
2、gzip
参考:
nginx中如何设置gzip(总结)
nginx下gzip配置参数详解
2.1、gzip压缩提升网站速度,常用的gzip配置
Nginx自带的有gzip模块 http://wiki.nginx.org/NginxChsHttpGzipModule ,这个模块支持在线实时压缩输出数据流。经过良好的配置优化,可以大幅的提升网站的输出效率。
#是否开启gzip压缩
gzip on|off;
#http的协议版本
# 开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
gzip_http_version 1.0|1.1;
#IE版本1-6不支持gzip压缩,关闭
gzip_disable 'MSIE[1-6].';
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在浏览器请求报文 content-type 中查看
gzip_types text/css text/javascript application/javascript image/jpeg image/png image/gif;
#设置压缩缓冲区大小,压缩在内存中缓冲几块? 每块多大?,此处设置为4个8K内存作为压缩结果流缓存
gzip_buffers 4 16k;
#启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
#gzip 压缩级别,1-9,数字越大压缩的越好,也越占用CPU时间
gzip_comp_level 9;
#给响应头加个vary,告知客户端能否缓存
gzip_vary on|off;
#反向代理时使用,Nginx作为反向代理的时候启用,开启或者关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含”Via”的 header头。
gzip_proxied any;
2.2 、什么样的资源不适合开启gzip压缩
二进制资源:例如图片/mp3这样的二进制文件,不必压缩;因为压缩率比较小, 比如100->80字节,而且压缩也是耗费CPU资源的.
2.3 、如何解决:公司的静态资源服务器全部使用的Nginx,且都开启了gzip压缩。内部测试是完全正常的,然而一到外网,居然没有做gzip! ?
原因:做负载均衡的机器上面没开gzip:在应用服务器前,公司还有一层Nginx的集群作为七层负责均衡,在这一层上,是没有开启gzip的。
还需要设置gzip_http_version为1.0:nginx和后端的upstream server之间默认是用HTTP/1.0协议通信。
3、nginx location配置
参考:
nginx location配置
3.1、匹配模式
location路由匹配的大致规则:location [=|^~|~|~*|@] path { ... }
location = /uri =开头表示精确匹配,只有完全匹配上才能生效。
location /uri 不带任何修饰符,也表示前缀匹配,但是在正则匹配之后。
location ^~ /uri ^~ 开头对URL路径进行前缀匹配,只要匹配到该前缀就可以生效,并且在正则之前。
location ~ /uri ~开头表示区分大小写的正则匹配。
location ~* /uri ~*开头表示不区分大小写的正则匹配。
location / 通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default。
优先级从前往后依次递减:精确匹配(=)、前缀匹配(^~)、正则匹配(~和~*)、通配符路径
3.2、root 、 alias
root指向的文件实际路径:root+location
alias指向的文件实际路径:alias
server {
listen 2020;
location /test {
root /data;
}
}
# 指向的文件路径为/data/test
server {
listen 2020;
location /test {
alias /data;
}
}
# 最终指向的文件路径为/data
定义位置区别:
- root可以在http、server、location、if中定义内容
- alias只能在location中定义
root在http、server定义以后,location会默认继承上层定义的内容,可以在location中使用root对上层root定义进行重写,或者使用alias让上层root在该lcation中失效。
3.3、try_files
语法: try_files file … uri 或 try_files file … = code
作用域:server,location
try_files按配置顺序检查文件是否存在,返回第一个找到的文件。结尾的斜线表示为文件夹 -$uri/。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数。
只有最后一个参数可以引起一个内部重定向,之前的参数只设置内部URI的指向。 最后一个参数是回退URI且必须存在,否则将会出现内部500错误。
server {
root /www/data;
location /images/ {
# 判断原始的uri文件是否存在,如果不存在返回/www/data/images/default.gif
try_files $uri /images/default.gif;
# 判断uri是否带有文件名或者目录名,如果没有返回404页面
try_files $uri $uri/ $uri.html =404;
}
}
3.4、proxy_pass
该参数用作反向代理,可以用来做负载均衡、前端解决跨域等功能。使用结构proxy_pass url
server {
listen 2020;
location /api/ {
proxy_pass http://localhost:7001;
# 最后不加/
# localhost:2020/api/component/list => http://locahost:7001/api/component/list
# 最后加/
# localhost:2020/api/component/list => http://locahost:7001/component/list
}
}
3.6、rewrite
rewrite参数用来将客户端请求重定向到一个新的地址。使用格式rewrite regex replacement [flag];
- regex(必填):正则匹配,只有正则匹配成功后,才能进行地址修改等后续步骤
- replacement(必填):新的url(以http:// https:// $schema等开头)或者uri,正则匹配成功后会用这个值替换原来的请求地址。当replacement值是url时,客户端请求发生重定向,因此会有两次请求,第一次请求是客户端原请求,响应的状态码为302,第二次请求的地址就是replacement值,本次rewrite逻辑运行完成以后,后续的rewrite不再匹配;当replacement值为uri时,客户端请求可能发生重定向,是否发生重定向与flag参数有关
- flag(可选)
break:本条rewrite逻辑运行完成以后,后续的rewrite不再匹配
last:本条rewrite逻辑运行完成以后,后续的rewrite不再匹配,重新开始location路由匹配
permanent:永久重定向,301
redirect:临时重定向,302
如果想要深入学习搞明白rewrite,请参考 搞懂nginx的rewrite模块 、location rewrite配置
3.5、index
index用于指定网站的起始页面,默认值index index.html;
index参数只是用来指定文件的路径,nginx根据index参数查找文件是否存在,如果存在就用文件路径拼接成新的url,nginx内部重定向到这个新的url,来获取到起始页面资源。下面用具体的例子来进行说明(/data/test目录下有一个index.html文件):
server {
listen 2020;
location / {
root /data/test;
index index.html;
}
}
# 请求localhost:2020,响应内容为文件/data/test/index.html内容
4、跨域配置
location / {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}