我需要将 nginx 设置为 https 代理,但是这不起作用:
$ export https_proxy="http://127.0.0.1:8081"
$ curl https://example.com
curl: (56) Received HTTP code 400 from proxy after CONNECT
我的nginx.conf:
server {
listen 8081;
location / {
proxy_pass http://some.proxy.com:3128;
proxy_set_header Host $http_host;
}
}
答案1
这里有一个误解。有两种类型的 http 代理,它们是完全不同的两种:反向代理和正向代理。不要混淆它们。
正向代理对客户端操作系统(例如)或浏览器可见export https_proxy
。客户端知道它需要以略微不同的方式进行通信,并且正向代理服务器的行为方式与常规 Web 服务器不同。
反向代理几乎是一个普通的 Web 服务器,其行为对客户端是不可见的。nginx 的一个示例是proxy_pass
。有一些肮脏的技巧可以将反向代理用作正向代理http代理功能有一定局限性,但作为转发功能根本不起作用https代理人因为 CONNECT 动词。
因此,正向代理最好称为“客户端代理”。反向代理则称为“服务器端代理”。(我认为正向/反向代理是一个糟糕的命名法。)
不要将 nginx 用作正向代理。它旨在用作常规 Web 服务器或反向代理。