Назад | Перейти на главную страницу

VirtualHost за обратным прокси-сервером nginx не разрешается должным образом

У меня есть пара балансировщиков нагрузки перед 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;
}