Tabla de contenido
Descripción del escenario:
La empresa tiene un servidor Tencent Cloud y un servidor Alibaba Cloud. El nombre de dominio está registrado en Alibaba Cloud. Tencent Cloud no puede abrirlo, por lo que está directamente bloqueado.
Teniendo en cuenta que el costo de la migración es un poco alto, no quiero migrar el código, por lo que debo apuntar el nombre de dominio al servidor de Alibaba Cloud y usar el proxy inverso al servidor de Tencent Cloud.
域名 => 阿里云服务器(服务器A) => 腾讯云服务器(服务器B)
www.example.com => 192.168.0.1 => 192.168.0.2
configuración original
Servidor 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;
}
}
Servidor 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;
}
}
Situación 1 encontrada:
Al principio, encontré que el nombre de dominio de acceso: https://www.example.com/admin, redirigía automáticamente a: http://192.168.0.1:8000/admin
Si accede al nombre de dominio: https://www.example.com/admin/, no hay salto
Se puede abrir normalmente en este momento
Solución:
añadir parámetros
proxy_set_header Host $host;
Situación 2 encontrada:
Al principio, encontré el nombre de dominio: https://www.example.com/admin y redirigido automáticamente a: http://www.example.com:8000/admin
Si accede al nombre de dominio: https://www.example.com/admin/, no hay salto
Encontré que el encabezado de respuesta es así
GET https://www.example.com/admin
location: https://www.example.com:8000/admin/
solución
proxy_redirect http://$host:8000/ /;
El papel de proxy_redirect
proxy_redirect Este comando se usa para modificar el campo de encabezado de ubicación y el campo de encabezado de actualización en el encabezado de respuesta devuelto por el servidor proxy.
versión definitiva
Servidor 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;
}
}
referencia