У меня есть ситуация, когда несколько веб-сайтов используют один IP-адрес. У меня nginx принимает запросы и передает их Apache, который фактически обслуживает сайты. Я знаю, что Apache здесь на самом деле не нужен, но он настроен таким образом по историческим причинам, и я бы предпочел не менять его, если мне не нужно.
Таким образом, nginx принимает запрос для example.com и передает его Apache следующим образом:
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;
}
}
В httpd.conf у нас есть
<VirtualHost localhost:8100>
ServerName www.example.com
ServerAlias example.com
Options Indexes
DocumentRoot /export/sites/example/live
ServerAdmin info@example.net
</VirtualHost>
До сих пор все работало нормально, но я добавил на сайт скрипт PHP (не свой собственный), и он не может получить правильное имя хоста. Либо $ _SERVER ["HTTP_HOST"], и / или $ _SERVER ['SERVER_NAME']] возвращают localhost: 8100 вместо example.com.
Можно ли настроить это так, чтобы PHP получал правильное имя хоста?
По умолчанию он отправляет спецификацию хоста из proxy_pass
линия. Вы можете переопределить это, добавив туда эту конфигурацию, заставив Host:
заголовок должен содержать то же, что и отправленный клиентом:
proxy_set_header Host $host;
Обходной путь - изменить nginx следующим образом:
location / {
proxy_read_timeout 120;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://www.example.com:8100;
}
Затем измените / etc / hosts так, чтобы www.example.com и example.com указывали на 127.0.0.1 (внутренне). Но ответ Шейна, конечно, лучше.