Com o proxy Nginx para o Apache, o nome do host real é perdido

3

Eu tenho uma situação com vários sites compartilhando um único endereço IP. Eu tenho nginx aceitando pedidos e passando-os para o Apache, que realmente serve os sites. Eu sei que o Apache não é realmente necessário aqui, mas é configurado desta forma por razões históricas e eu prefiro não mudá-lo se eu não precisar.

A forma como as coisas estão configuradas, o nginx aceita um pedido para example.com e passa-o para o Apache da seguinte forma:

server {
    listen       80;
    server_name example.com www.example.com;

    access_log  /var/log/nginx/example.log;
    error_log  /var/log/nginx/example.log;

    location / {
        proxy_read_timeout 120;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_pass http://localhost:8100;
    }
}

No httpd.conf, temos

<VirtualHost localhost:8100>
    ServerName www.example.com
    ServerAlias example.com
    Options Indexes
    DocumentRoot /export/sites/example/live
    ServerAdmin [email protected]
</VirtualHost>

Tudo funcionou bem até agora, mas adicionei um script PHP (não o meu próprio) ao site e ele não consegue o nome do host correto. Tanto $ _SERVER ["HTTP_HOST"] e / ou $ _SERVER ['SERVER_NAME'] estão retornando localhost: 8100 ao invés de example.com.

É possível configurar isso para que o PHP obtenha o hostname correto?

    
por Janine Ohmer 14.04.2011 / 19:26

2 respostas

7

Por padrão, ele envia a especificação do host da linha proxy_pass . Você pode sobrescrever isso configurando essa configuração, forçando o cabeçalho Host: a conter o mesmo que o enviado pelo cliente:

proxy_set_header Host $host;
    
por 14.04.2011 / 19:43
0

Uma solução alternativa seria alterar o nginx assim:

   location / {
        proxy_read_timeout 120;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_pass http://www.example.com:8100;
    }

Em seguida, modifique o / etc / hosts para que www.example.com e example.com apontem para 127.0.0.1 (internamente). Mas a resposta de Shane é melhor, claro.

    
por 14.04.2011 / 19:47