近期由於專案需要使用到 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
引用:
#----------------------------------------------------
# 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