字體:  

在 CentOS 7 建置 Nginx 正向代理 HTTP、HTTPS (Forward Proxy)

99770 發表於: 2021-3-23 17:15 來源: ADJ網路控股集團


近期由於專案需要使用到 HTTPS 正向代理,由於反向代理已經使用nginx來建置,要做正向代理當然先想到用nginx 來做,而不是選擇Squid.

Nginx 代理分為“反向代理”和“正向代理”。這個“正反”的概念簡單理解如下:
反向代理就是代理服務器會把客戶端請求轉發到服務內部,具體處理的主機對客戶端是隱藏的。
正向代理是代理服務器把客戶請求轉發給要訪問的網址,這時對要訪問的網站來說,客戶端來源是隱藏的。

所以這次我要用到的就是 Nginx 的正向代理功能。

Nginx 雖然默認雖然支持正向代理,但僅支持 HTTP 協議的網址,所以需要一個開源的補丁模組: chobits/ngx_http_proxy_connect_module。因為這個補丁模組,所以需要通過編譯的方式來安裝 Nginx。以下是安裝過程,系統為 CentOS 7。


安裝步驟:

1.首先確保安裝了patch,gcc、gcc++、pcre、zlib,這些編譯時需要用到的依賴軟件或靜態庫。
# yum install -y patch pcre-devel pcre zlib-devel zlib gcc make

2.下載ngx_http_proxy_connect_module第三方模塊
# git clone https://github.com/chobits/ngx_http_proxy_connect_module.git

3.重新編譯安裝nginx
# cd /tmp/
# wget http://nginx.org/download/nginx-1.16.1.tar.gz
# tar zxvf nginx-1.16.1.tar.gz
# cd nginx-1.16.1
# patch -p1 < /tmp/ngx_http_proxy_connect_module/patch/proxy_connect_rewrite_101504.patch
# ./configure --prefix=/usr/local/nginx --add-module=/tmp/ngx_http_proxy_connect_module
# make & make install


將編譯過的 nginx 執行檔替換原本Path 路徑
# mv /usr/local/bin/nginx /usr/local/bin/nginx.bak
# cp ./objs/nginx /usr/local/bin/nginx

這樣就可以直接在系統上打nginx , 而不用打完整路徑 /usr/local/bin/nginx

4.正向代理示例配置如下:
# vi /usr/local/nginx/conf/proxy.conf

QUOTE:

#----------------------------------------------------
# Proxy Use
#----------------------------------------------------
server {
        resolver 8.8.8.8;
        listen 8080;
        location / {
            proxy_pass http://$http_host$request_uri;
        }
    }

server {
        resolver 8.8.8.8;
        listen 8084;
        proxy_connect;
        proxy_connect_allow all;
        location / {
            proxy_pass https://$host$request_uri;
            proxy_set_header Host $host;
        }
    }
Nginx命令参考:
檢查配置文件是否正確
# nginx -t

Start Nginx
# nginx

Reload Nginx configuration
# nginx -s reload

Stop Nginx
# nginx -s stop

啟動nginx 後, 可以用 netstat -nap|more 看看 8080及8084 有沒有Listen

5.在Command底下的測試方式:
HTTP Mode =>
# curl --proxy proxy_ip:8080 http://www.baidu.com

HTTPS Mode =>
# curl --proxy proxy_ip:8084 https://www.baidu.com

終於搞定 HTTPS 正向代理囉!

參考資料:
https://www.itread01.com/content/1545815714.html
https://www.itread01.com/content/1554026652.html