反向代理後 req.headers.host 的問題
一個用 express 寫的網站,本地運行,監聽 4000 端口。在本地的 Apache 服務器上配置了反向代理:
<VirtualHost *:80>
ServerName mysite.com
ProxyRequests off
ProxyPass / http://localhost:4000/
ProxyPassReverse / http://localhost:4000/
</VirtualHost>
這樣訪問 mysite.com 就可以定向到 express 的網站了。
我遇到了一個這樣的問題,express寫的網站中訪問了 req.headers.host 獲取用戶訪問的域名,我期望獲取到的值是 mysite.com ,但獲得的值卻是 localhost:4000 。這個問題如何解決呢?本機的80端口被apache佔用了,因爲還有 PHP 寫的網站也要運行。
我的目的是獲得用戶訪問本站的地址,有沒有別的什麼方法知道?
6 回复
Apache (以及 nginx) 在转发请求的时候会在 header 中加上一个 X-Forwarded-Host
字段用于表明原始请求的地址。
于是,在你的 node 应用中,可以使用 req.headers['X-Forwarded-Host']
或者 req.header('X-Forwarded-Host')
来获取它。
X-Forwarded-Host 是標準的嗎?如果我這麼做了豈不是要與apache或nginx耦合?
@xqunix 既然這樣我就先測試X-Forwarded-Host是否存在,如果沒有再讀取 host
赞 & 挖坟…
mk