我有一些网站共享一个IP地址的情况。 我有nginx接受请求并将它们传递给实际为这些站点提供服务的Apache。 我知道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 [email protected] </VirtualHost>
一切都工作得很好,但我已经添加了一个PHP脚本(不是我自己的)到网站,它不能得到正确的主机名。 $ _SERVER [“HTTP_HOST”]和/或$ _SERVER ['SERVER_NAME']返回localhost:8100而不是example.com。
是否有可能设置这样的PHP将获得正确的主机名?
默认情况下,它从proxy_pass
行发送主机规格。 你可以通过抛出这个configuration来覆盖它,强制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(内部)。 但是谢恩的答案当然更好。