
Estoy configurando nginx como proxy inverso. Solo he usado Apache antes y sin hosts virtuales.
Quiero que mis usuarios puedan acceder a varios servicios web de la intranet simplemente escribiendo el nombre del servicio en la barra de direcciones. Por ejemplo, escribir "hojas de horas" en lugar de "hojas de horas.intranet.local".
En una máquina cliente, si uso "wget" o un navegador para acceder al FQDN del sitio (timesheets.intranet.local), entonces todo está bien.
En una máquina cliente, si uso "wget" o un navegador para acceder al nombre de host simple del sitio (hojas de horas), falla.
Si uso "wget" localmente en la máquina del servidor nginx, ambos funcionan bien.
La configuración de mi sitio se ve así:
server {
server_name timesheets timesheets.intranet.local;
location / {
proxy_pass http://127.0.0.1:8080;
}
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
ssl_certificate /root/timesheet.crt;
ssl_certificate_key /root/timesheet.key;
}
La resolución de nombres no es el problema. "wget" en la máquina cliente resuelve correctamente la dirección IP pero aún no logra recuperar la página.
Respuesta1
Al configurar el proxy inverso, debe prestar atención no solo a la configuración del proxy, sino también a la configuración del servicio detrás de él.
El proxy no solo debe aceptar un nombre en su host virtual, sino que también debe emitir un encabezado de Host que se espera que llegue al backend. En este caso, la forma más sencilla es configurar tanto el proxy como el backend para aceptar un nombre de host corto y no calificado.
Una forma alternativa podría ser anular qué proxy de encabezado de host envía a un backend. Entonces solo necesita su backend para servir solo ese nombre de host. ver esta respuestahttps://stackoverflow.com/questions/14352690/change-host-header-in-nginx-reverse-proxy