Nginx
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; } }
這裡有一個誤解。有兩種類型的 http 代理是兩種完全不同的動物:反向代理和正向代理。不要混合它們。
正向代理對客戶端作業系統(例如
export https_proxy
)或瀏覽器是可見的。客戶端知道它需要稍微不同的對話,並且轉發代理伺服器的行為不像普通的網路伺服器。反向代理幾乎是一個普通的網路伺服器,其行為對客戶端是不可見的。一個 nginx 範例是
proxy_pass
. 以有限的方式將反向代理用作正向http代理有一些骯髒的技巧,但由於 CONNECT 動詞,它根本不能用作正向https代理。因此,將轉發代理命名為“客戶端代理”會更好。反向代理將是“伺服器端代理”。(在我看來,正向/反向代理是一個可怕的命名法。)
不要使用 nginx 作為轉發代理。它旨在用作正常網路伺服器或反向代理。