参考文档:nginx 配置 rewrite$1nginx path路径地址重写Nginx实现路径重写rewrite指令
Nginx提供了rewrite指令,用于对地址进行重写,语法规则:
rewrite | "用来匹配路径的正则" | 重写后的路径 | [指令]; |
---|---|---|---|
rewrite | ^/job/(.*)$ | $1 | break |
问题场景再现:
说明:页面连接直接请求js是正常的,页面刷新请求的js路径就变了,两次请求js区别在于页面刷新请求的js路径多了一个当前目录:job 、platform
(这个问题是前端路由问题,不过nginx可以进行地址重写)
连接请求网址: http://172.20.162.29/job/static/js/SM.js
刷新请求网址: http://172.20.162.29/job/static/js/static/js/SM.js
连接请求网址: http://172.20.162.29/platform/static/js/SM.js
刷新请求网址: http://172.20.162.29/platform/static/js/static/js/SM.js
nginx进行路径重写 rewrite$1
说明:存在多个路径时需要添加多条重写记录,临时解决可以,后期优化由前端处理
server {
listen 80;
server_name localhost;
location /platform {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/platform/(.*)$ $1 break;
proxy_pass http://172.20.162.29:80/$1;
}
location /job {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/job/(.*)$ $1 break;
proxy_pass http://172.20.162.29:80/$1;
}
location / {
root /html/;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}