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;
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?
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.
Tags hostname nginx apache-2.2