nginx 旧URL到新URL 改变路径的反向代理配置

  • Post author:
  • Post category:其他


需求 :把

/api/**

映射为

/project/**


注意点: 如果 cookie path 设置的是

/project

那么发送至

/api/**

的请求不会携带

/project/**

的cookie 导致cookie丢失,请求被安全策略拦截


Nginx rewrite官方文档

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 版权协议,转载请附上原文出处链接和本声明。