企业没有专业人员怎么建设网站,怎么开发一个网站项目,网页设计计划怎么写,建设网站是普通办公吗文章目录 一、nginx常用的转发规则location 指令说明location转发使用 二、upstream负载均衡使用三、server_name使用四、其他常用配置限制请求类型处理静态资源目录遍历问题限制客户端使用的ip或者域名 五、需要注意的地方location /api1 探讨location ~ /api1 探讨#xff0… 文章目录 一、nginx常用的转发规则location 指令说明location转发使用 二、upstream负载均衡使用三、server_name使用四、其他常用配置限制请求类型处理静态资源目录遍历问题限制客户端使用的ip或者域名 五、需要注意的地方location /api1 探讨location ~ /api1 探讨正则表达式$host 和 $remote_addr 的区别 其他Rewrite命令语法springboot 打印请求路径springboot打印controller被调用的方法Controller获取请求头的内容 参考文档 一、nginx常用的转发规则
location 指令说明
该指令用于匹配 URL语法如下
指令说明用于不含正则表达式的 uri 前要求请求字符串与 uri 严格匹配如果匹配 成功就停止继续向下搜索并立即处理该请求。~用于表示 uri 包含正则表达式并且区分大小写。~*用于表示 uri 包含正则表达式并且不区分大小写。^~用于不含正则表达式的uri前要求Nginx服务器找到标识uri和请求字 符串匹配度最高的 location 后立即使用此 location 处理请求而不再使用 location 块中的正则 uri 和请求字符串做匹配。!~区分大小写不匹配。!~*不区分大小写不匹配/a普通前缀匹配优先级低于带参数前缀匹配。/任何请求都会匹配
首先匹配 其次匹配^~,其次是按文件中顺序的正则匹配最后是交给 / 通用匹配当有匹配成功时候停止匹配按当前匹配规则处理请求。
location转发使用
location /api1/
# 如果请求的是http://localhost:80/api1
# 转发形成的就会是http://localhost:8001/location /api1/ {proxy_pass http://localhost:8001/;} location /api1/ 精确匹配
# 如果请求的是http://localhost:80/api1会被匹配到
# 转发形成的就会是http://localhost:8001/
# 如果请求的是http://localhost:80/api1/test不会被匹配到因为是精确匹配location /api1/ {proxy_pass http://localhost:8001/;}location ~ /api1 正则表达式匹配
# rewrite重写了请求路径break不可省略$1为正则匹配的内容
# ^/api1/(.*)$在这个正则表达式中$1为(.*)中的内容
# proxy_set_header的使用并不会失效
# 如果请求的是http://localhost:80/api1
# 转发形成的就会是http://localhost:8001/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负载均衡使用
#server只能是ip端口不然启动报错upstream api{server localhost:9001;server localhost:9002;server localhost:9003;}#proxy_pass里面的api对应的是upstream后面的apilocation /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
#本机host配置
127.0.0.1 www.test001.com
127.0.0.1 www.test002.com
127.0.0.1 www.test003.comserver { #监听端口listen 80; #服务名server_name www.test001.com; location / {root html;index index.html index.htm;}location /api/ { proxy_pass http://localhost:9001/;}#500类型错误处理error_page 500 502 503 504 /50x.html;#映射文件50x.htmllocation /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/;}#500类型错误处理error_page 500 502 503 504 /50x.html;#映射文件50x.htmllocation /50x.html { #相对路径root html;}}四、其他常用配置
限制请求类型
只允许GET和POST请求写在server块
if($request_method !~ ^(GET|POST)$ ){return 403;
}处理静态资源目录遍历问题
过滤…/ |…\写在server块
if( $request_uri ~* \.\.[\\\\/] ){return 404;
}限制客户端使用的ip或者域名
写在server块
#当写127.0.0.1的时候使用localhost会报500只能使用127.0.0.1
if ( $host !~ ^127.0.0.1 ){return 500;
}五、需要注意的地方
当使用 location ~ 的时候 proxy_pass结尾不能为 / 不然会报错access_log需要写在log_format后面不然启动会报错。access_log只能打印出请求的路径无法打印出代理之后的路径。
location /api1 探讨
# 如果请求的是http://localhost:80/api1
# 转发形成的就会是http://localhost:8001/api1location /api1 {proxy_pass http://localhost:8001;} # 如果请求的是http://localhost:80/api1
# 转发形成的就会是http://localhost:8001/location /api1/ {proxy_pass http://localhost:8001/;} # 如果请求的是http://localhost:80/api1
# 转发形成的就会是http://localhost:8001//location /api1 {proxy_pass http://localhost:8001/;} location ~ /api1 探讨正则表达式
#proxy_pass最多只能写到端口
#比如http://localhost:9001/多个/报错
#比如http://localhost:9001/test多个/test报错
#所以正则表达式的转发经常配合rewrite使用location ~ /api1 { proxy_pass http://localhost:9001;}$host 和 $remote_addr 的区别
$host 是客户端使用的ip或者域名$remote_addr是客户端真正的ip
# $host为127.0.0.1
# $remote_addr为127.0.0.1
http://127.0.0.1/api/test# $host为www.test001.com
# $remote_addr为127.0.0.1
http://www.test001.com/api/test# $host为localhost
# $remote_addr为127.0.0.1
http://localhost/api/test# 假设我本机ip为192.168.1.27
# $host为www.baidu.com
# $remote_addr为192.168.1.27
https://www.baidu.com/s?wd北京其他
Rewrite命令语法
rewrite regex replacement [flag]
regex正则表达式
replacement 跳转后的内容
flagrewrite支持的flag标记flag标记说明标记说明last相当于Apache的【L】标记表示完成rewritebreak本条规则匹配完成即终止不在匹配后面的任何规则redirect返回302临时重定向浏览器地址栏会显示跳转后的URL地址爬虫不会更新urlpermanent返回301永久重定向浏览器地址栏会显示跳转后的URL地址爬虫更新url
ast和break比较lastbreak使用场景一般写在server和if中一般使用在location中URL匹配不重质重写后的url匹配终止重写后的url匹配
#$1为(.*)
rewrite ^/api1/(.*)$ /$1 break;#$1为前面的(.*)$2为后面的(.*)
rewrite ^/(.*)/(.*)$ /$1 break;#当正则表达式和请求不匹配的时候后面的/$1将不被执行请求不会被rewrite替换
rewrite ^/apitest/(.*)$ /$1 break;springboot 打印请求路径
logging:level:org.springframework: debugspringboot打印controller被调用的方法
logging:level:org:springframework:web:servlet:mvc:method:annotation:RequestMappingHandlerMapping: traceController获取请求头的内容
HttpServletRequest request;
EnumerationString enumeration request.getHeaderNames();参考文档
springboot 打印请求的uri和请求参数Servlet–HttpServletRequest获取请求信息请求头、请求行、参数详解Nginx配置文件Nginx之正则表达式、location匹配简介以及rewrite重写nginx 正则路径匹配Nginx的基本使用