Nginx 作为 https 代理

Nginx 作为 https 代理

我需要将 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 服务器或反向代理。

相关内容