我有一个工作的 apache vhost,例如
<VirtualHost localhost:10006>
DocumentRoot "/home/pate/***/git/kohana_site/public/site/"
</VirtualHost>
<VirtualHost *:10006>
ServerName api.*
DocumentRoot "/home/pate/***/git/kohana_site/public/api/"
LogLevel debug
</VirtualHost>
如果我指向 localhost:10006,我就会得到我的网站和 api.localhost:10006,我就会得到我的 api。
然后我在其上设置了 haproxy,它在端口 10010 上运行,并且 localhost:10010 和 api.localhost:10010 都具有预期的行为。
现在我已使用此配置在端口 80 上设置了 nginx。
server {
listen 10000;
server_name api.*;
location / {
proxy_pass http://legacy_server;
}
}
server {
listen 10000 default;
server_name _;
location /nginx_status {
stub_status on;
access_log off;
}
# images are accessed via the CDN over HTTP (not https)
location /n/image {
proxy_pass http://image_caching_server;
}
location / {
return 301 https://$host:10014$request_uri;
}
}
upstream legacy_server {
server localhost:10010 fail_timeout=0;
}
问题是 apache 无法正确识别 vhost,并将 api.localhost 重定向到网站而不是 api。
我尝试使用 set_proxy_header Host $host 但似乎没有任何反应。
答案1
您可以尝试将这些标签添加到位置块吗:
proxy_set_header 主机 $host;
proxy_set_header X-真实IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
重启 nginx 并尝试是否有效