Nginx: proxy_pass y try_files 301 saltan con puerto

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

Supongo que te gusta

Origin blog.csdn.net/mouday/article/details/130623309
Recomendado
Clasificación