#nginx 配置规则
参考
##location
uri匹配规则
语法规则: location [=||*|^~] /uri/ {… }
首先匹配 =,其次匹配^~,其次是按文件中顺序的正则匹配,最后是交给 /通用匹配。
当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
- = 开头表示精确匹配
- ^~ 非正则匹配
- ~ 正则匹配,区分大小写。
- ~* 正则匹配,不区分大小写。
- !~ 正则不匹配,区分大小写
- !~* 正则不匹配,不区分大小写
精准匹配(=)
# 精确匹配,必须是127.0.0.1/
location = / {
#规则A
}
# 精确匹配,必须是127.0.0.1/login
location = /login {
#规则B
}
非正则匹配/非精准匹配(^~)
## 非精确匹配,并且不区分大小写,比如127.0.0.1/static/js.
location ^~ /static/ {
#规则C
}
区分大小写正则匹配(~)
## 区分大小写,以gif,jpg,js结尾
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
不区分大小写正则匹配(~*)
## 不区分大小写,匹配.png结尾的
location ~* \.png$ {
#规则E
}
区分大小写正则不匹配和不区分大小写正则不匹配(!,!*)
## 区分大小写,匹配不以.xhtml结尾的
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
通配匹配(/)
## 什么都可以
location / {
#规则H
}
代理 (proxy_pass)
相对路径和绝对路径的区分是由被代理的服务端口号后面是否有其他路径(/,/stat/,/stat)。
相对路径
location /proxy/ {
proxy_pass http://10.0.0.1:8080;
}
访问路径:http://127.0.0.1/proxy/cuffs/css/toosimple.txt
代理路径:http://127.0.0.1:8080/proxy/cuffs/css/toosimple.txt
绝对路径
1、情况一:
location /proxy/ {
proxy_pass http://10.0.0.1:8080/;
}
访问路径:http://127.0.0.1/proxy/cuffs/css/toosimple.txt
代理路径:http://127.0.0.1:8080/cuffs/css/toosimple.txt
2、情况二
location /proxy/ {
proxy_pass http://10.0.0.1:8080/static01/;
}
访问路径:http://127.0.0.1/proxy/cuffs/css/toosimple.txt
代理路径:http://127.0.0.1:8080/static01/cuffs/css/toosimple.txt
3、情况三
location /proxy/ {
proxy_pass http://10.0.0.1:8080/static01;
}
访问路径:http://127.0.0.1/proxy/cuffs/css/toosimple.txt
代理路径:http://10.0.0.1:8080/static01cuffs/css/toosimple.txt
header设置
普通请求的Header
反向代理请求的Header
修改响应头中的location (proxy_redirect)
参考
语法:proxy_redirect [ default|off|redirect replacement ];
默认:proxy_redirect default;
配置块:http、server、location
location / {
proxy_pass http://192.168.1.154:8080;
proxy_redirect http https;
}
访问地址: https://127.0.0.1/
302: http://127.0.0.1/login
proxy_redirect:将location修改后返回响应地址https://127.0.0.1/login
本机文件配置
全局参数
- KaTeX parse error: Expected 'EOF', got '&' at position 35: …3.com/1.php?a=1&̲b=2的args就是a=1&b=2
- $body_bytes_sent 服务器发送给客户端的响应body字节数
- $content_length HTTP请求信息里的"Content-Length"
- $conten_type HTTP请求信息里的"Content-Type"
- $document_root nginx虚拟主机配置文件中的root参数对应的值
- KaTeX parse error: Expected 'EOF', got '&' at position 51: …3.com/1.php?a=1&̲b=2的document_uri就是1.php,不包含后面的参数
- $http_referer 记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置
- $host 主机头,也就是域名
- $http_user_agent 客户端的详细信息,也就是浏览器的标识,用curl -A可以指定
- $http_cookie 客户端的cookie信息
- $http_x_forwarded_for 当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置
- $limit_rate 如果nginx服务器使用limit_rate配置了显示网络速率,则会显示,如果没有设置, 则显示0
- $remote_addr 客户端的公网ip
- $remote_port 客户端的port
- $remote_user 如果nginx有配置认证,该变量代表客户端认证的用户名
- $request 请求的URI和HTTP协议,如“GET /article-10000.html HTTP/1.1”
- $request_body_file 做反向代理时发给后端服务器的本地资源的名称
- $request_method 请求资源的方式,GET/PUT/DELETE等
- r e q u e s t f i l e n a m e 当 前 请 求 的 资 源 文 件 的 路 径 名 称 , 相 当 于 是 request_filename 当前请求的资源文件的路径名称,相当于是 requestfilename当前请求的资源文件的路径名称,相当于是document_root/$document_uri的组合
- r e q u e s t u r i 请 求 的 链 接 , 包 括 request_uri 请求的链接,包括 requesturi请求的链接,包括document_uri和$args
- $scheme 请求的协议,如ftp,http,https
- $server_protocol 客户端请求资源使用的协议的版本,如HTTP/1.0,HTTP/1.1,HTTP/2.0等
- $server_addr 服务器IP地址
- $server_name 服务器的主机名
- $server_port 服务器的端口号
- $status http状态码,记录请求返回的状态码,例如:200、301、404等
- u r i 和 uri 和 uri和document_uri相同
- $http_referer 客户端请求时的referer,通俗讲就是该请求是通过哪个链接跳过来的,用curl -e可以指定
- $time_local 记录访问时间与时区,如18/Jul/2014:17:00:01 +0800
h o s t 和 host和 host和http_host
$http_host始终等于HTTP_HOST请求标题。
h
o
s
t
等
于
host等于
host等于http_host,小写并且没有端口号(如果存在),除非HTTP_HOST不存在或是空值。在这种情况下,$host等于server_name处理请求的服务器的指令值。