server {
listen 8222; # 设置监听的本地端口,内网电脑将通过这个端口进行代理上网
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
resolver 8.8.8.8; # 设置DNS解析器,用于解决外部域名
proxy_pass http://$http_host$request_uri; # 将请求代理至互联网
}
}
实现一个简单的反向代理功能,让内网中的设备通过Nginx服务器代理访问互联网。下面是对各部分的详细解释:
-
server { ... }: 定义了Nginx服务器的一个配置区块,包含了一组针对进入该服务器的请求处理规则。 -
listen 8222;: 指令设定了Nginx监听的端口为8222。这意味着内网中的电脑需要配置其网络设置,将HTTP(S)流量指向本机的8222端口,以便通过此代理服务器访问外部网络。 -
proxy_set_header指令用于设置传递给后端服务器的HTTP头部信息:proxy_set_header Host $host;: 保留请求头中的Host字段不变,确保请求被正确路由到目标服务器。proxy_set_header X-Real-IP $remote_addr;: 向后端服务器传递发起请求的真实客户端IP地址。proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;: 添加X-Forwarded-For头,该头部包含客户端的IP以及可能经过的所有代理服务器的IP,用于追踪客户端的原始IP地址。
-
location / { ... }: 定义了请求的URL匹配规则,这里的/表示匹配所有请求。 -
resolver 8.8.8.8;: 设置DNS解析器为Google的公共DNS服务器(8.8.8.8),Nginx将使用这个DNS服务器解析外部域名,这对于将请求正确代理到互联网上的目标服务器至关重要。 -
proxy_pass http://$http_host$request_uri;: 当请求匹配到此location块时,Nginx会将请求代理到http://$http_host$request_uri指定的地址。这里使用变量$http_host来获取请求头中的Host信息,以及$request_uri来获取请求的完整URI路径,组合起来构造出完整的后端请求URL,从而实现了将内网请求透明地代理到互联网上的对应地址。
综上所述,这段配置使得Nginx充当了一个代理服务器角色,允许内网中的设备通过端口8222,经由Nginx访问外部网络资源,同时保持了源IP信息以便于后端服务器识别和日志记录。