使用nginx做一个最外层的前端服务器(A服务器),然后将所有请求转发给docker内的后端nginx处理(B服务器),
A服务器配置:
listen 80; server_name www.test.com location / { proxy_pass http://127.0.0.1:8008; }
当浏览器请求www.test.com时,
PHP程序处理的时候采用类似$_SERVER['HTTP_HOST']方式获取服务器的域名和端口。此时获取到的是127.0.0.1:8008,并不能获取到www.test.com
只需要在上述配置的location中加入一行代码即可解决:
listen 80;
server_name www.test.com
location /
{
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $host;
}
需要获取客户端真实IP加入以下参数即可
listen 80;
server_name www.test.com
location /
{
proxy_pass http://127.0.0.1:8008;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
}
转载请注明:MitNick » nginx前端服务器做反向代理后,让后端机器能获取到客户端IP和服务器HTTP_HOST