需求:
为一个 web 站点绑定了多个域名,但不想将其直接以 80 端口暴露出去,而是通过 nginx 的方式暴露出去(因为服务器上还装有其他的 web 应用)。
希望通过www.aa.com
,www.bb.com
都能直接访问到此站点。
也许在这里,对于大多数的网站来说,只需要简单的配置一个反向代理,用一个proxy_pass
就好。
不过在这个时候,如果反向代理地址配置的是http://localhost:8080
,取到的主机地址就是localhost
,而不是我实际访问的地址,比如我用www.aa.com
访问这个站点,在 web 程序里取到的Request.Url.Host
就是localhost
;
但是这个 web 站点,还又想取出Request.Url.Host
这个信息(因为我要根据它来识别关键信息),也就是要知道访问者访问的是哪个域名。这个时候就可以用 nginx 的proxy_set_header Host $host
来处理。
不过,不是 nginx 这一块配置好就万事大吉了,还要在那个 web 站点上,将对应的域名也绑定好才可以正常访问,否则会 nginx 就返回一个错误页面了。也就是说,那个 web 站点不光要绑定http://localhost:8080
这一个,还要绑定http://www.aa.com
和http://www.bb.com
。
配置操作:
IIS:
站点 A 绑定地址如下:
http://localhost:8080
http://www.aa.com:8080
http://www.bb.com:8080
IP 绑定最好就用*
就好了。
nginx:
server{
listen 80;
server_name www.aa.com www.bb.com;
location / {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
网友评论