Nginx

Nginx 作為 https 代理

  • April 14, 2018

我需要將 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 作為轉發代理。它旨在用作正常網路伺服器或反向代理。

引用自:https://serverfault.com/questions/907657