nginx 反向代理后面的 VirtualHost 无法正确解析

nginx 反向代理后面的 VirtualHost 无法正确解析

我在 4 台 Web 服务器前面有一对负载均衡器,它们在端口 80 上运行 nginx,并在端口 8081 上代理到 apache,用于传输非静态内容(如 php 代码)。我在这个配置下运行了多个域。当我在 80 上访问域以获取静态内容时,它运行正常。Nginx 返回了它应该返回的内容。当我访问 PHP 页面时,它总是访问默认虚拟主机。

当我通过负载平衡器访问 php 页面上的端口 8081 时,它可以正确地提供 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;
  }

答案1

proxy_params 文件并未像我所想的那样通过某种默认包含方式包含在配置中。我已通过使用 proxy_pass 将 include /etc/nginx/proxy_params 添加到我的每个位置来更正此问题。“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;
}

相关内容