可以使用 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 被编写为充当反向代理和负载平衡器,而不是正向代理。