如何使用 Nginx 作为 HTTP/HTTPS 代理服务器?

如何使用 Nginx 作为 HTTP/HTTPS 代理服务器?

可以使用 Nginx 作为 HTTP/HTTPS 代理吗?

答案1

经过一些测试,我发现为我工作以下配置。

server {
  server_name ~^(www\.)?(?<domain>.+)$;
  access_log /var/log/nginx/proxy.access.log main;
  error_log /var/log/nginx/proxy.error.log crit;
  listen 10.255.1.13:8080;
  resolver 8.8.8.8;
  location / {
    proxy_pass http://$domain;
    proxy_redirect off;
    proxy_set_header Host $host;
    # Optional headers 
    # proxy_set_header X-Real-IP $remote_addr;
    # proxy_set_header X-Forwarded-For
    # $proxy_add_x_forwarded_for;
  }
}

此配置仅适用于 HTTP,不适用于 HTTPS。

答案2

我认为简短的回答是否定的,它不是为正向代理编写的

更新

澄清我上面的陈述:

NGINX 在编写时从来没有考虑过正向代理 —— 虽然有可能以某种方式临时修改配置来做你想让它做的事情,但你必须了解以下限制:

  • 几乎不存在缓存支持(使用代理的主要原因之一)
  • 不能用于除端口 80 流量之外的任何用途(即无法通过它登录 cpanel 盒)
  • 不支持基于 SSL 的流量
  • 不支持标准代理标头和 http 缓存标头(我的理解是这些只是通过
  • 不支持其他支持代理服务器的协议 - 例如 VPN 等

目前可能还未知的其他考虑因素:

  • 由于没有真正细粒度的访问控制/身份验证能力,可能会对你的代理发起 DoS 攻击(nginx 支持不同的访问控制方法,但不清楚这在正向代理上下文中会如何表现)
  • 安装 nginx 的机器可能存在安全风险,因为可能存在未考虑到的安全漏洞,这是由于以非设计的方式运行造成的

答案3

如果您想使用 HTTP/HTTPS 代理,则应使用 Squid。它就是为此而编写的。Nginx 被编写为充当反向代理和负载平衡器,而不是正向代理。

相关内容