该指令设置与代理服务器的读超时时间默认60s。它决定了nginx会等待多长时间来获得请求的响应。这个时间不是获得整个response的时间,而是两次reading操作的时间。
server {
listen 80;
server_name m.kzf.com;
if ($http_user_agent ~* (Windows|Macintosh)) {
return http://www.kzf.com;
View Code
default server 配置
vi defaul.conf
server {
listen 80 default_server;
server_name _;
root /opt/nginx/html;
}
default_server 的作用就是当请求过来后根据域名找不到相应的server name 就会匹配此处的规则。
隐式配置
defaul server 分为两种上面的为显示配置,还有一种是隐式配置,所谓隐式配置就是没有确切的配置,就会默认加载的第一个配置文件里面的第一个server 配置为default server。
应用场景
一般正常提供访问的地址都是定义server name 为域名,为了禁止ip 访问就会通过default server 匹配到ip 访问的请求,然后此类访问返回403 禁止IP 访问。
加载顺序
nginx 批量载入配置 conf.d/*conf 时会按 ascii 排序载入,这就会以 server_a.conf server_b.conf server_c.conf 的顺序载入,如果没有生命 default_server 的话,那 server_a 会作为默认的 server。另外如果主配置文件中有server 配置,因为朱配置文件最先加载所以此处的server作为default_server的优先级是最大的。
referer指令实现防盗链配置
有一些后端服务以接口的形式通过前端页面来访问的,也就是说前端页面里面嵌套的后端的访问地址,为了安全后端接口只允许前端页面里面访问请求后端接口,而不允许其他未知网站跳转到后端。可以通过nginx 配置
server {
listen 80;
server_name www.asdf.com;
location /api {
valid_referers none blocked server_names www.qq.com; #none blocked 等这些条件是或的关系,就是满足一
if ($invalid_referer) {
return 403;
proxy_pass http://backend.service.com;
valid_referers 指令详解
该指令后面可以接 none blocked serevr_names string或者是正则表达式
none 代表没有referer ,如果直接访问后端接口 http://backend.service.com/api 那么请求头里面是没有referer 字段的,也就是none ,也就是根据实际情况决定是否允许直接访问接口进而决定是否配置none。
blocked 代表有referer但是被防火墙或者是代理给去除了
string或者正在表达式 用来匹配referer
nginx会通过查看referer字段和valid_referers后面的referer列表进行匹配,如果匹配到了就invalid_referer字段值为0 否则设置该值为1
通过curl 测试验证配置是否生效
curl http://www.asdf.com/api -H 'Referer:http://www.qq.com' 正常转发到后端
curl http://www.asdf.com/api refere不存在,也就是None ,如果配置了none 就会正常转发到后端
curl http://www.asdf.com/api -H 'Referer:http://www.baidu.com' 返回403
注意返回301 重定向情况:
当location 后面配置路径有/ 时候,但是用户请求的url 后面没有/ 那么请求到达nginx 后就会重定向,添加缺失的/ 。
示例如下:
location /api/ {
proxy_pass http://backend.service.com;
}
curl http://www.asdf.com/api #请求的url 中未带/ ,返回代码301 ,避免这种情况就需要加上/ 或者location 中的路径去掉/。
rewrite 指令的相对路径和绝对路径区别
当nginx 前面还有一层slb 做转发的时候,并且slb监听端口与nginx 监听端口不一致的时候,rewrite 指令的使用相对路径与绝对路径就有很大不同。
前提条件:url 为 http://asdf-kzf.com 经过slb 的80 转发到了nginx 的4438 端口
相对路径配置
server {
listen 4438;
server_name xxx;
location / {
rewrite ^/$ /test permanent;
}
此配置浏览器显示转发的路径重定向为http://asdf-kzf.com:4438/test ,但是此请求到了slb 无法识别此端口,所以请求有问题。
绝对路径配置
server {
listen 4438;
server_name xxx;
location / {
rewrite ^/$ https://asdf-kzf.com/test permanent;
}
次请求
http://asdf-kzf.com/test 由于是绝对路径转发所以没有nginx 端口,所以相当于重新发起了请求到slb ,所以此配置是对的
总结:当nginx 前面没有代理,或者其代理与它本身端口是相同的,此时可以使用相对路径进行rewrite server
listen 80;
proxy_intercept_errors on;
charset utf-8;
server_name chain-front-tst.xxx.com;
client_max_body_size 200m;
set $accessip false;
if ( $http_x_forwarded_for ~ 124.127.104.130,.* ) {set $accessip true;} #rmkj-youxian
if ( $http_x_forwarded_for ~ 124.127.104.130 ) {set $accessip true;} #rmkj-youxian
if ( $http_x_forwarded_for ~ 180.212.253.41,.* ) {set $accessip true;}
if ( $http_x_forwarded_for ~ 180.212.253.41 ) {set $accessip true;}
if ( $http_x_forwarded_for ~ 10.50.8.32,.* ) {set $accessip true;} #vpn
if ( $http_x_forwarded_for ~ 10.50.8.32 ) {set $accessip true;} #vpn
if ( $accessip = 'false') {return 403;}
if ($http_referer ~ "baidu.com") {
rewrite ^/(.*)$ https://chain.peopletech.cn/ permanent;
location ~ .*\.(css|js|swf)$ {
add_header Cache-Control max-age=200;
if_modified_since off;
expires off;
etag off;
root /h5;
location / {
add_header Cache-Control private;
add_header Cache-Control "no-store";
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if_modified_since off;
expires off;
etag off;
root /h5;
index index.html;
try_files $uri $uri/ /index.html;
location /api/v2/ {
proxy_pass http://nft-api;
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 /media/uploads/ {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods *;
add_header Access-Control-Allow-Headers *;
root /;
#image_filter_buffer 200M;
#image_filter_interlace on;
#image_filter_jpeg_quality 80;
#image_filter resize 100 80;
location /api/v3/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#注意添加theone3 白名单
proxy_pass https://theone3-appapi.peopletech.cn;
#proxy_pass http://qa-theone3appapi.peopletech.cn;
location /api/v3/certificate/c750X1805 {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://nft-compose-api;
location /MP_verify_pvvGnSyTQDwEiXuP.txt {
root /etc/nginx/;
location /MP_verify_zaOvZJ2n3WL4t8Dd.txt {
root /etc/nginx/;
location /MP_verify_5QHNYaCMHnTn7UNv.txt {
root /etc/nginx/;