У меня есть пара балансировщиков нагрузки перед 4 веб-серверами, которые запускают nginx на порту 80 и прокси для apache на порту 8081 для нестатического контента, такого как код php. В этой конфигурации я использую несколько доменов. Когда я попадаю в домен на 80 для статического контента, он работает нормально. Nginx возвращает то, что должен. Когда я перехожу на страницу PHP, она всегда попадает на виртуальный хост по умолчанию.
Когда я вместо этого посещаю порт 8081 на странице php через балансировщики нагрузки, он правильно обслуживает как страницы php, так и статический контент.
Похоже, что nginx неправильно передает домены apache, чтобы он определил, что обслуживать. Где в моей конфигурации я должен искать эту ошибку, или я неправильно понимаю, что происходит?
Вот мое содержимое nginx proxy_params:
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
Мои серверные блоки включают этот код:
location ~ /\. {
deny all;
}
location ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|ico)$ {
expires 7d;
try_files $uri @apache;
}
location / {
proxy_pass http://127.0.0.1:8081;
}
location @apache {
proxy_pass http://127.0.0.1:8081;
}
Файл proxy_params не включен в конфигурацию каким-то включением по умолчанию, как я предполагал. Я исправил проблему, добавив include / etc / nginx / proxy_params в каждое из моих местоположений с помощью proxy_pass. Этот "proxy_set_header Host $ http_host;" вещь критическая.
Я бы приветствовал более чистое решение, если у кого-то есть такое, которое позволяет мне устанавливать их в конфигурации один раз, а не каждый раз. Если вы можете дать мне это, я отдаю вам должное.
Вот мои результирующие блоки местоположения в каждом блоке сервера:
location ~ /\. { deny all; }
# Serve up the static files through nginx
# This provides speed improvements
location ~.*\.(3gp|gif|jpg|jpeg|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|ico)$ {
expires 7d;
try_files $uri @apache;
}
# Try it in the local Apache on port 8081
location / {
proxy_pass http://127.0.0.1:8081;
include /etc/nginx/proxy_params;
}
location @apache {
proxy_pass http://127.0.0.1:8081;
include /etc/nginx/proxy_params;
}