2025年6月7日 星期六 乙巳(蛇)年 三月十一 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 服务器 > Nginx

Nginx:proxy_pass和try_files 301跳转带了端口

时间:05-24来源:作者:点击数:39

场景描述:

公司有一台腾讯云服务器和一台阿里云服务器,域名在阿里云备案,腾讯云打不开,直接拦截了

考虑到迁移成本有点高,不想迁移代码,所以,需要将域名指向阿里云服务器,通过反向代理到腾讯云服务器

  • 域名 => 阿里云服务器(服务器A) => 腾讯云服务器(服务器B)
  • www.example.com => 192.168.0.1 => 192.168.0.2

原来的配置

服务器A 192.168.0.1

  • server {
  • listen 80;
  • server_name www.example.com;
  • # 转发到服务器B
  • location / {
  • proxy_pass http://192.168.0.2:8000/;
  • proxy_redirect off;
  • proxy_set_header X-NginX-Proxy true;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • proxy_set_header X-Forwarded-Proto $scheme;
  • }
  • }

服务器B 192.168.0.2

  • server {
  • listen 8000;
  • server_name localhost;
  • index index.html index.htm index.php;
  • # 管理后台
  • location ^~ /admin {
  • alias "/data/wwwroot/www.example.com";
  • try_files $uri $uri/ /admin/index.html;
  • }
  • }

遇到的状况1:

刚开始发现访问域名: https://www.example.com/admin,自动跳转到了: http://192.168.0.1:8000/admin

如果访问域名:https://www.example.com/admin/,没有跳转

此时能正常打开

解决方式:

添加参数

  • proxy_set_header Host $host;

遇到的状况2:

刚开始发现访问域名: https://www.example.com/admin,自动跳转到了: http://www.example.com:8000/admin

如果访问域名:https://www.example.com/admin/,没有跳转

发现响应头是这样的

  • GET https://www.example.com/admin
  • location: https://www.example.com:8000/admin/

解决方式

  • proxy_redirect http://$host:8000/ /;

proxy_redirect的作用

proxy_redirect 该指令用来修改被代理服务器返回的响应头中的Location头域和Refresh头域。

最终版本

服务器A

  • server {
  • listen 80;
  • server_name www.example.com;
  • # 转发到服务器B
  • location / {
  • proxy_pass http://192.168.0.1:8000/;
  • proxy_redirect http://$host:8000/ /;
  • proxy_set_header X-NginX-Proxy true;
  • proxy_set_header Host $host;
  • proxy_set_header X-Real-IP $remote_addr;
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  • proxy_set_header X-Forwarded-Proto $scheme;
  • }
  • }
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐