NGINX: erro 404 ao fazer proxy de vários locais

1

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:

  • remova as opções proxy_set_
  • configure-o de forma idêntica ao site A
  • definir o host do cabeçalho do conjunto de proxy para siteB.company.com
  • remova o / after location / siteB
  • remova o / após o URL de destino
  • insira o URL de destino completo
  • add ^ ~ na frente do local
  • experimente a reescrita do URL em que "/ siteB" é removido
  • vários trechos que eu, honestamente, já esqueci e não entendi

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

    
por Karl Auer 26.03.2016 / 16:44

0 respostas

Tags