Sou novo no NGINX e estou tentando configurar um proxy reverso, onde disponibilizo vários sites internos de fora. Meu objetivo é usar https: // nginx.company.com/sitea para acessar o servidor interno A, https: // nginx.company.com/siteb para acessar o servidor da Web interno B, etc. Portanto, um nome de host externo e uma porta para o proxy vários serviços internos baseados em URL / localização.
Agora eu posso acessar o servidor web A via https sem problemas (Apache), que funciona perfeitamente (localização / localização). No entanto, todos os outros servidores Web internos (a maioria deles IIS, muitos PHP e ASP) que tentei disponibilizar são problemáticos, a maioria deles me dá um erro 404, enquanto alguns apresentam uma página vazia, mas você pode ver o código fonte do site no navegador, mais uma vez outras aparecem apenas parcialmente. Já passei por vários tópicos com problemas semelhantes e experimentei muitas das soluções oferecidas, mas nenhuma ajudou no meu caso.
Vamos nos concentrar primeiro no 404. Meu arquivo de configuração é assim:
server {
server_name nginx.company.com;
listen 443;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/key.pem;
ssl on;
ssl_session_cache builtin:1000 shared:SSL:10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
ssl_prefer_server_ciphers on;
location /siteA {
proxy_set_header Host $host;
proxy_pass http://siteA.company.com;
}
location /siteB/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://siteB.company.com/;
}
}
o site A funciona bem, o site B vai me dar um erro 404. O motivo pode ser visto no log de erros: Ele está sempre tentando acessar / usr / share / nginx / html / para esse conteúdo, mas é claro que não está nessa pasta local da máquina nginx. Então, o erro parece ser que ele é tratado como conteúdo da web local em vez de algo a ser intermediado por proxy.
Quando você acessar a URL do site B, o servidor da Web o encaminhará imediatamente para um caminho específico, como http: // siteB.company.com/webapp/something/login.php. O log de erros mostra que o nginx acha que deve acessar /usr/share/nginx/html/webapp/something/login.php/, o que obviamente não existe.
Coisas que tentei corrigir:
Nada disso funcionou, eu ainda não consegui proxy desse site e recebi um erro 404 (do nginx, não do servidor web). Como devo alterar as configurações do site B para acessá-lo também?
A propósito, quando eu configuro um "servidor" adicional na configuração que escuta em uma porta diferente e usa localização / ele funcionará, então o problema vem com a constelação de dividir o tráfego por URL em vez de pelo nome do host ou porta.
Obrigado antecipadamente
Tags nginx