使用?nginx?搭建代理服務(wù)器(正向代理?https?網(wǎng)站)的詳細(xì)步驟
簡介
正向代理 簡介
在企業(yè)開發(fā)環(huán)境中,局域網(wǎng)內(nèi)的設(shè)備通常需要通過正向代理服務(wù)器訪問互聯(lián)網(wǎng)。正向代理服務(wù)器充當(dāng)中介,幫助客戶端請求外部資源并返回結(jié)果。局域網(wǎng)內(nèi)也就是俗稱的內(nèi)網(wǎng),局域網(wǎng)外的互聯(lián)網(wǎng)就是外網(wǎng),在一些特殊場景內(nèi),例如:醫(yī)院。而局域網(wǎng)中的客戶端要訪問這些資源時,就需要通過代理服務(wù)器。這種通過代理服務(wù)器訪問外部網(wǎng)絡(luò)資源的方式,就是正向代理。正向代理不僅用于提升訪問速度,還能提高網(wǎng)絡(luò)安全性、管理訪問權(quán)限和優(yōu)化網(wǎng)絡(luò)流量。
原生 nginx 可以作為 http 的正向代理服務(wù)器,但是不能用做 https 的正向代理服務(wù)器。因為 http 正向代理使用的是 get 請求,但是 https 使用的確實 connect 請求,而原生 nginx 不支持 connect 請求。所以需要第三方模塊 ngx_http_proxy_connect_module 來支持 https 的正向代理,使用這個插件,意味著需要重新編譯 nginx,在編譯的過程中,將插件添加進(jìn)去。本次編譯以目前穩(wěn)定版 1.24.0 為例。
ngx_http_proxy_connect_module 介紹
- ngx_http_proxy_connect_module 項目地址:傳送門(注:目標(biāo)地址為 github,打不開則請科學(xué)上網(wǎng))
- ngx_http_proxy_connect_module 是 Nginx 的一個擴(kuò)展模塊,主要功能是允許 Nginx 作為代理服務(wù)器處理 CONNECT 方法。通過該模塊,可以將 Nginx 作為 HTTP/HTTPS 代理服務(wù)器,甚至可以直接用作 WebSocket 服務(wù)器。
注:在 HTTP 協(xié)議中,CONNECT 方法主要用于建立隧道(即建立到遠(yuǎn)程服務(wù)器的端到端的加密連接),通常在代理服務(wù)器后面的客戶端需要通過代理服務(wù)器與目標(biāo)服務(wù)器建立安全連接,比如 WebSocket 連接和 HTTPS 的中間人代理。
詳細(xì)步驟
包準(zhǔn)備
從 nginx 官網(wǎng)下載 nginx 源碼包
注:也可以直接在 Linux 主機(jī)上下載:
wget http://nginx.org/download/nginx-1.24.0.tar.gz
從 github 下載 ngx_http_proxy_connect_module 源碼

從 github 下載 ngx_http_proxy_connect_module 模塊的 nginx 內(nèi)核補(bǔ)丁
注:
- 請嚴(yán)格按照下圖安裝和 nginx 版本匹配的 nginx 內(nèi)核補(bǔ)丁,否則會導(dǎo)致 https 代理不生效。
- ngx_http_proxy_connect_module 源碼壓縮包內(nèi)(ngx_http_proxy_connect_module-master/patch/)可能已包含 nginx 內(nèi)核補(bǔ)丁,這種情況確認(rèn)即可,無需再下載補(bǔ)丁。

Linux 編譯并安裝 nginx
# 使用yum包管理工具安裝相關(guān)編譯環(huán)境及相關(guān)依賴 yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel openssl-libs pcre2 # 或使用dnf包管理工具安裝 #dnf -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel # 將安裝包放于/root目錄,可自定義 cd /root # 上傳nginx安裝包并解壓 tar -zxvf nginx-1.24.0.tar.gz # 進(jìn)入nginx安裝包解壓目錄并創(chuàng)建modules源碼包存放目錄 cd nginx-1.24.0 mkdir ./modules && cd ./modules # 上傳 ngx_http_proxy_connect_module 源碼包并解壓 unzip ngx_http_proxy_connect_module-master.zip # 進(jìn)入nginx安裝包解壓目錄根路徑 cd /root/nginx-1.24.0 # 對nginx內(nèi)核打補(bǔ)丁 patch -p1 < modules/ngx_http_proxy_connect_module-master/patch/proxy_connect_rewrite_102101.patch # 配置編譯參數(shù)編譯前確認(rèn)pcre、zlib、openssl的庫是否已經(jīng)正常安裝 ./configure \ --prefix=/usr/local/nginx \ --with-http_ssl_module \ --with-http_realip_module \ --with-stream \ --with-stream_ssl_module \ --add-module=/root/nginx-1.24.0/modules/ngx_http_proxy_connect_module-master # --prefix :指定需要安裝的目錄,可自定義 # --add-module :ngx_http_proxy_connect_module-master模塊源碼路徑,根據(jù)實際路徑修改 # 編譯并安裝nginx make && make install
修改 nginx 配置文件
編輯配置文件
vi /usr/local/nginx/conf/nginx.conf
增加如下配置:
server {
# 對外服務(wù)端口
listen 80;
server_name localhost;
# 域名解析服務(wù)器并禁用ipv6
# 注:若不禁用ipv6,會由于當(dāng)前互聯(lián)網(wǎng)對IPv6支持不完整,導(dǎo)致在DNS解析時偶發(fā)超時問題(502)
resolver 114.114.114.114 valid=60s ipv6=off;
# 解析超時時間
resolver_timeout 30s;
# 開啟porxy connect功能(代理)
proxy_connect;
# 設(shè)置允許代理的目標(biāo)端口和范圍的列表
proxy_connect_allow 80 443 563;
# 定義客戶端與代理服務(wù)器建立連接的超時時間
proxy_connect_connect_timeout 20s;
# 定義客戶端從代理服務(wù)器讀取響應(yīng)的超時時間
proxy_connect_read_timeout 20s;
# 設(shè)置客戶端將請求傳輸?shù)酱矸?wù)器的超時時間
proxy_connect_send_timeout 20s;
location / {
# 正向代理配置,根據(jù)請求地址自動解析出目標(biāo)網(wǎng)站地址并進(jìn)行代理
proxy_pass $scheme://$host$request_uri;
# 發(fā)送到被代理網(wǎng)站的請求需要添加Host請求頭
proxy_set_header Host $host;
}
}nginx 啟動與測試
啟動
# 啟動nginx /usr/local/nginx/sbin/nginx # 重新加載nginx配置 /usr/local/nginx/sbin/nginx -s reload # 停止nginx /usr/local/nginx/sbin/nginx -s stop
測試 nginx 代理功能了
curl https://www.baidu.com -v -x 127.0.0.1:80
拓展
設(shè)置 nginx 開機(jī)自啟動
創(chuàng)建開機(jī)自啟腳本
vim /etc/systemd/system/nginx.service
腳本內(nèi)容:
# 僅修改 /usr/local/nginx/sbin/nginx 這個路徑即可(修改為實際的nginx路徑) [Unit] Description=nginx service After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target
設(shè)置文件權(quán)限
chmod 755 /etc/systemd/system/nginx.service
設(shè)置開機(jī)自啟動
systemctl daemon-reload systemctl enable nginx
驗證
# nginx啟動 systemctl start nginx # nginx停止 systemctl stop nginx # 直接重啟服務(wù)器即可(nginx就自動重啟了) reboot
常用命令
# 啟動nginx服務(wù) systemctl start nginx # 重新啟動nginx服務(wù) systemctl restart nginx # 查看nginx服務(wù)當(dāng)前狀態(tài) systemctl status nginx # 停止開機(jī)自啟動 systemctl disable nginx
到此這篇關(guān)于使用 nginx 搭建代理服務(wù)器(正向代理 https 網(wǎng)站)指南的文章就介紹到這了,更多相關(guān)nginx 搭建代理服務(wù)器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx 服務(wù)器開啟status頁面檢測服務(wù)狀態(tài)的方法
這篇文章主要介紹了Nginx 服務(wù)器開啟status頁面檢測服務(wù)狀態(tài)的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01
Nginx?ingress?controller高可用的實現(xiàn)
本文主要介紹了Nginx?ingress?controller高可用的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06
配置Nginx實現(xiàn)訪問本地靜態(tài)資源的完整指南
Nginx 是一個高性能的 HTTP 服務(wù)器和反向代理服務(wù)器,廣泛用于靜態(tài)資源的托管和負(fù)載均衡,在開發(fā)和生產(chǎn)環(huán)境中,我們常常需要使用 Nginx 來提供本地靜態(tài)資源的訪問,本文將詳細(xì)介紹如何配置 Nginx 以便訪問本地靜態(tài)資源,需要的朋友可以參考下2024-08-08
SpringBoot前端后端分離之Nginx服務(wù)器下載安裝過程
Nginx是一款輕量級的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,這篇文章主要介紹了SpringBoot前端后端分離之Nginx服務(wù)器,需要的朋友可以參考下2022-08-08

