Nginx 作为 https 代理

Pav*_*rov 2 nginx proxy https privoxy

我需要将 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
Run Code Online (Sandbox Code Playgroud)

我的nginx.conf

server {
    listen          8081;
    location / {
            proxy_pass              http://some.proxy.com:3128;
            proxy_set_header        Host            $http_host;
    }
}
Run Code Online (Sandbox Code Playgroud)

kub*_*zyk 5

这里有一个误解。http 代理有两种类型,它们是两种完全不同的动物:反向代理和正向代理。不要混合它们。

转发代理对于客户端操作系统(例如export https_proxy)或浏览器是可见的。客户端知道它需要稍微不同地进行通信,并且转发代理服务器的行为与常规网络服务器不同。

反向代理几乎是一个普通的网络服务器,其行为对客户端来说是不可见的。一个 nginx 的例子是proxy_pass. 有一些肮脏的技巧可以以有限的方式使用反向代理作为正向http代理,但由于 CONNECT 动词,它根本不能作为正向https代理工作。

因此,转发代理最好称为“客户端代理”。反向代理是“服务器端代理”。(在我看来,正向/反向代理是一个可怕的术语。)

不要使用 nginx 作为转发代理。它旨在用作常规网络服务器或反向代理。