nginx 配置代理服务器

2 阅读1分钟
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信息以便于后端服务器识别和日志记录。