场景描述:
公司有一台腾讯云服务器和一台阿里云服务器,域名在阿里云备案,腾讯云打不开,直接拦截了
考虑到迁移成本有点高,不想迁移代码,所以,需要将域名指向阿里云服务器,通过反向代理到腾讯云服务器
- 域名 => 阿里云服务器(服务器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;
- }
- }
-
刚开始发现访问域名: https://www.example.com/admin,自动跳转到了: http://192.168.0.1:8000/admin
如果访问域名:https://www.example.com/admin/,没有跳转
此时能正常打开
解决方式:
添加参数
- proxy_set_header Host $host;
-
刚开始发现访问域名: 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;
- }
- }
-