使用Nginx做内网域名转发

下面这个例子是通过具有公网IP的网关上的反向代理,将域名demo.wenotng.me的请求转发到内网机器192.168.1.100上,这样就可以在公网上通过域名demo.wentong.me访问内网的机器了.

1) 第一步,添加一条A记录(Adress), demo.wentong.me 指向网关的公网IP.

2) 添加Nginx配置:

网关服务器nginx配置:

# /etc/nginx/sites-enable/demo
server {
listen 80;
server_name demo.wentong.me;

access_log /var/log/nginx/demo.access.log;

location / {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header User-Agent $http_user_agent;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.1.100;
}
}

上面这些配置无非是将一些发给网关的请求的Request Headers中信息,
转发给192.168.1.100这台机器,实现反向代理. 注意
这里要对Host字段进行转发,以便下级服务器据此域名判断应用哪个配置.

内网机器作常规设置即可

# /etc/nginx/sites-enable/demo
server {
listen 80;
server_name demo.wentong.me;

root /local/path/here;
index index.html index.htm;

access_log /var/log/nginx/demo.access.log;
}

根据反向代理服务器发来的Host字段来判断应用这个配置

3) 重启两台机器的Nginx服务, 即可完成设置.

设置完成后,尝试在内网访问 http://demo.wentong.me , 能够打开内网机器中的页面.

遗憾的是,学校网络中心似乎对访问此类IP作了限制,只允许特定IP段的用户访问(类似于教务处服务器仅限于校内IP访问)。当我尝试使用校外IP访问 http://demo.wentong.me 时,失败了, 甚至一些校内IP也无法访问. :-(