文章目录
一、nginx 常用的转发规则 location 指令说明 location转发使用
二、upstream负载均衡 使用 三、server_name使用 四、其他常用配置 限制请求类型 处理静态资源目录遍历问题 限制客户端使用的ip或者域名
五、需要注意的地方 location /api1 探讨 location ~ /api1 探讨(正则表达式) $host 和 $remote_addr 的区别
其他 Rewrite命令语法 springboot 打印请求路径 springboot打印controller被调用的方法 Controller获取请求头的内容
参考文档
location 指令说明
指令 说明 = 用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配 成功,就停止继续向下搜索并立即处理该请求。 ~ 用于表示 uri 包含正则表达式,并且区分大小写。 ~* 用于表示 uri 包含正则表达式,并且不区分大小写。 ^~ 用于不含正则表达式的uri前,要求Nginx服务器找到标识uri和请求字 符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配。 !~ 区分大小写不匹配。 !~* 不区分大小写不匹配 /a 普通前缀匹配,优先级低于带参数前缀匹配。 / 任何请求都会匹配
首先匹配 = 其次匹配^~, 其次是按文件中顺序的正则匹配 最后是交给 / 通用匹配 当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
location转发使用
location /api1/ {
proxy_pass http://localhost:8001/;
}
location = /api1/ {
proxy_pass http://localhost:8001/;
}
location ~ /api1 (正则表达式匹配)
location ~ /api1 {
rewrite ^/api1/( .*) $ /$1 break ;
proxy_set_header test001 $host : $server_port ;
proxy_set_header test002 $remote_addr ;
proxy_pass http://localhost:8001;
}
二、upstream负载均衡 使用
upstream api{
server localhost:9001;
server localhost:9002;
server localhost:9003;
}
location /api/ {
proxy_pass http://api/;
}
三、server_name使用
看下列代码,端口一样,server_name不一样 访问http://www.test001.com/api/test,进入第一个server,转发的实际为http://localhost:9001/test 访问http://www.test002.com/api/test,进入第二个server,转发的实际为http://localhost:9002/test 对于没有配置的server_name,默认进入第一个server处理 访问http://127.0.0.1/api/test,进入第一个server,转发的实际为http://localhost:9001/test 访问http://www.test003.com/api/test,进入第一个server,转发的实际为http://localhost:9001/test
127.0 .0.1 www.test001.com
127.0 .0.1 www.test002.com
127.0 .0.1 www.test003.com
server {
listen 80 ;
server_name www.test001.com;
location / {
root html;
index index.html index.htm;
}
location /api/ {
proxy_pass http://localhost:9001/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80 ;
server_name www.test002.com;
location / {
root html;
index index.html index.htm;
}
location /api/ {
proxy_pass http://localhost:9002/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
四、其他常用配置
限制请求类型
if( $request_method ! ~ ^( GET| POST) $ ) {
return 403 ;
}
处理静态资源目录遍历问题
if( $request_uri ~* \ .\ .[ \ \ \ \ /] ) {
return 404 ;
}
限制客户端使用的ip或者域名
if ( $host ! ~ ^127.0.0.1 ) {
return 500 ;
}
五、需要注意的地方
当使用 location ~ 的时候, proxy_pass结尾不能为 / ,不然会报错 access_log需要写在log_format后面,不然启动会报错。 access_log只能打印出请求的路径,无法打印出代理之后的路径。
location /api1 探讨
location /api1 {
proxy_pass http://localhost:8001;
}
location /api1/ {
proxy_pass http://localhost:8001/;
}
location /api1 {
proxy_pass http://localhost:8001/;
}
location ~ /api1 探讨(正则表达式)
location ~ /api1 {
proxy_pass http://localhost:9001;
}
$host 和 $remote_addr 的区别
$host 是客户端使用的ip或者域名,$remote_addr是客户端真正的ip
http://127.0.0.1/api/test
http://www.test001.com/api/test
http://localhost/api/test
https://www.baidu.com/s?wd= 北京
其他
Rewrite命令语法
rewrite < regex > < replacement > [flag]
regex:正则表达式
replacement :跳转后的内容
flag:rewrite支持的flag标记
flag标记说明 标记 说明 last 相当于Apache的【L】标记,表示完成rewrite break 本条规则匹配完成即终止,不在匹配后面的任何规则 redirect 返回302临时重定向,浏览器地址栏会显示跳转后的URL地址,爬虫不会更新url permanent 返回301永久重定向,浏览器地址栏会显示跳转后的URL地址,爬虫更新url
ast和break比较 last break 使用场景 一般写在server和if中 一般使用在location中 URL匹配 不重质重写后的url匹配 终止重写后的url匹配
rewrite ^/api1/( .*) $ /$1 break ;
rewrite ^/( .*) /( .*) $ /$1 break ;
rewrite ^/apitest/( .*) $ /$1 break ;
springboot 打印请求路径
logging :
level :
org.springframework : debug
springboot打印controller被调用的方法
logging :
level :
org :
springframework :
web :
servlet :
mvc :
method :
annotation :
RequestMappingHandlerMapping : trace
Controller获取请求头的内容
HttpServletRequest request;
Enumeration < String > enumeration= request. getHeaderNames ( ) ;
参考文档
springboot 打印请求的uri和请求参数 Servlet–HttpServletRequest获取请求信息(请求头、请求行、参数)详解 Nginx配置文件 Nginx之正则表达式、location匹配简介以及rewrite重写 nginx 正则路径匹配Nginx的基本使用