需求 :把
/api/**
映射为
/project/**
注意点: 如果 cookie path 设置的是
/project
那么发送至
/api/**
的请求不会携带
/project/**
的cookie 导致cookie丢失,请求被安全策略拦截
rewrite <正则表达式> <替换文本> [flag];
如果正则表达式包含“ }”或“ ;”字符,则整个表达式应该用单引号或双引号括起来。
替换文本中
$1
$2
…代表被正则匹配的第N个内容
替换文本如果以
http://
https://
等HTTP Schema开头,则直接执行重定向
如
location ^~ /abc/ {
rewrite ^(.*)$ project$1; #用户访问 http://xxx.com/abc ——> http://xxx.com/project/abc
rewrite ^(.*)$ http://www.$1.com; #用户访问 http://xxx.com/abc ——> http://www.abc.com
}
location ^~ /api/ {
# 开启日志rewrite日志,日志文件在error_log中 注意调试完毕请注释掉此配置
rewrite_log on;
# error_log 开启notice 模式,否则不会记录rewrite日志 注意调试完毕请注释掉此配置
error_log logs/error.log notice;
rewrite ^(.*)$ /project$1;
proxy_pass http://127.0.0.1:8080;
#转发Cookie
proxy_set_header Cookie $http_cookie;
#转发host 否则服务器获取serverName会有问题
proxy_set_header Host $http_host;
#转发真实ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;
}
location ^~ /project/ {
proxy_pass http://127.0.0.1:8080;
#将cookie的path 从 /project 转为 / 否则访问 /api 不会携带/project的cookie
proxy_cookie_path /project /;
proxy_set_header Cookie $http_cookie;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 60;
}
版权声明:本文为muyuanjin67原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。