Пытаюсь сконфигурировать nginx так, чтобы при изменении настроек apache, nginx всё подхватывал (чтобы новые хосты требовалось прописывать только в одном месте - у apache). Для этого написал скрипт, который парсит настройки apache и создает аналог для nginx. В результате получилась конструкция типа:
~~~~~~~~~~~~~~~~~~~~~~~~~
nginx.conf:
upstream backend { server 127.0.0.1:8080; } # для потенциальных дополнительных серверов
include vhosts/*.conf;
vhosts/apache2nginx_vhosts.conf:
# перечисляются все хосты apache по типу:
server
{
listen [my_ip]:80;
server_name foo.com www.foo.com;
location / { include vhosts/apache_proxy.subconf; }
}
vhosts/apache_proxy.subconf:
# стандартные настройки proxy на apache
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
~~~~~~~~~~~~~~~~~
Проблема в том, что Apache как будто не получает должным образом Host. Все запросы обрабатываются как будто обращение идет по IP, а не по имени сайта... Хотя если обратиться к несуществующей директории выдает:
~~~~~
Not Found
The requested URL /foo/ was not found on this server.
Apache Server at my_host.com Port 80
~~~~~
При этом если писать "proxy_pass http://my_host:8080", Apache обрабатывает корректно, по имени хоста.
Выходит что "proxy_set_header Host $host;" не помогает. Есть идеи почему?
спасибо.