CNode

反向代理後 req.headers.host 的問題

Bbyvoid发布于14 年前最后回复11 年前6 回复9358 浏览0 收藏

一個用 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)

M
magicdawn#1·11 年前

赞 & 挖坟...

I
im-here#2·11 年前

mk

X
xqunix#3·14 年前

Apache (以及 nginx) 在转发请求的时候会在 header 中加上一个 X-Forwarded-Host 字段用于表明原始请求的地址。

于是,在你的 node 应用中,可以使用 req.headers['X-Forwarded-Host'] 或者 req.header('X-Forwarded-Host')来获取它。

X
xqunix#5·14 年前
引用 xqunixApache (以及 nginx) 在转发请求的时候会在 header 中加上一个 X Forwarded Host 字段用于表明原始请求的地址。 于是,在你的 node 应用中,可以使用 r...

@byvoid X-Forwarded 系列现在仍然处于起草阶段(可以参见 IETF 上的草案 ),但是它其实已经是事实上的标准了,几乎所有主流的web服务器都支持它。

参与回复
登录后即可参与回复。登录