使用?nginx?搭建代理服務(wù)器(正向代理?https?網(wǎng)站)的詳細(xì)步驟
簡(jiǎn)介
正向代理 簡(jiǎn)介
在企業(yè)開發(fā)環(huán)境中,局域網(wǎng)內(nèi)的設(shè)備通常需要通過(guò)正向代理服務(wù)器訪問(wèn)互聯(lián)網(wǎng)。正向代理服務(wù)器充當(dāng)中介,幫助客戶端請(qǐng)求外部資源并返回結(jié)果。局域網(wǎng)內(nèi)也就是俗稱的內(nèi)網(wǎng),局域網(wǎng)外的互聯(lián)網(wǎng)就是外網(wǎng),在一些特殊場(chǎng)景內(nèi),例如:醫(yī)院。而局域網(wǎng)中的客戶端要訪問(wèn)這些資源時(shí),就需要通過(guò)代理服務(wù)器。這種通過(guò)代理服務(wù)器訪問(wèn)外部網(wǎng)絡(luò)資源的方式,就是正向代理。正向代理不僅用于提升訪問(wèn)速度,還能提高網(wǎng)絡(luò)安全性、管理訪問(wèn)權(quán)限和優(yōu)化網(wǎng)絡(luò)流量。
原生 nginx 可以作為 http 的正向代理服務(wù)器,但是不能用做 https 的正向代理服務(wù)器。因?yàn)?http 正向代理使用的是 get 請(qǐng)求,但是 https 使用的確實(shí) connect 請(qǐng)求,而原生 nginx 不支持 connect 請(qǐng)求。所以需要第三方模塊 ngx_http_proxy_connect_module 來(lái)支持 https 的正向代理,使用這個(gè)插件,意味著需要重新編譯 nginx,在編譯的過(guò)程中,將插件添加進(jìn)去。本次編譯以目前穩(wěn)定版 1.24.0 為例。
ngx_http_proxy_connect_module 介紹
- ngx_http_proxy_connect_module 項(xiàng)目地址:傳送門(注:目標(biāo)地址為 github,打不開則請(qǐng)科學(xué)上網(wǎng))
- ngx_http_proxy_connect_module 是 Nginx 的一個(gè)擴(kuò)展模塊,主要功能是允許 Nginx 作為代理服務(wù)器處理 CONNECT 方法。通過(guò)該模塊,可以將 Nginx 作為 HTTP/HTTPS 代理服務(wù)器,甚至可以直接用作 WebSocket 服務(wù)器。
注:在 HTTP 協(xié)議中,CONNECT 方法主要用于建立隧道(即建立到遠(yuǎn)程服務(wù)器的端到端的加密連接),通常在代理服務(wù)器后面的客戶端需要通過(guò)代理服務(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ǔ)丁
注:
- 請(qǐng)嚴(yán)格按照下圖安裝和 nginx 版本匹配的 nginx 內(nèi)核補(bǔ)丁,否則會(huì)導(dǎo)致 https 代理不生效。
- ngx_http_proxy_connect_module 源碼壓縮包內(nèi)(ngx_http_proxy_connect_module-master/patch/)可能已包含 nginx 內(nèi)核補(bǔ)丁,這種情況確認(rèn)即可,無(wú)需再下載補(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 # 對(duì)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的庫(kù)是否已經(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ù)實(shí)際路徑修改 # 編譯并安裝nginx make && make install
修改 nginx 配置文件
編輯配置文件
vi /usr/local/nginx/conf/nginx.conf
增加如下配置:
server { # 對(duì)外服務(wù)端口 listen 80; server_name localhost; # 域名解析服務(wù)器并禁用ipv6 # 注:若不禁用ipv6,會(huì)由于當(dāng)前互聯(lián)網(wǎng)對(duì)IPv6支持不完整,導(dǎo)致在DNS解析時(shí)偶發(fā)超時(shí)問(wèn)題(502) resolver 114.114.114.114 valid=60s ipv6=off; # 解析超時(shí)時(shí)間 resolver_timeout 30s; # 開啟porxy connect功能(代理) proxy_connect; # 設(shè)置允許代理的目標(biāo)端口和范圍的列表 proxy_connect_allow 80 443 563; # 定義客戶端與代理服務(wù)器建立連接的超時(shí)時(shí)間 proxy_connect_connect_timeout 20s; # 定義客戶端從代理服務(wù)器讀取響應(yīng)的超時(shí)時(shí)間 proxy_connect_read_timeout 20s; # 設(shè)置客戶端將請(qǐng)求傳輸?shù)酱矸?wù)器的超時(shí)時(shí)間 proxy_connect_send_timeout 20s; location / { # 正向代理配置,根據(jù)請(qǐng)求地址自動(dòng)解析出目標(biāo)網(wǎng)站地址并進(jìn)行代理 proxy_pass $scheme://$host$request_uri; # 發(fā)送到被代理網(wǎng)站的請(qǐng)求需要添加Host請(qǐng)求頭 proxy_set_header Host $host; } }
nginx 啟動(dòng)與測(cè)試
啟動(dòng)
# 啟動(dòng)nginx /usr/local/nginx/sbin/nginx # 重新加載nginx配置 /usr/local/nginx/sbin/nginx -s reload # 停止nginx /usr/local/nginx/sbin/nginx -s stop
測(cè)試 nginx 代理功能了
curl https://www.baidu.com -v -x 127.0.0.1:80
拓展
設(shè)置 nginx 開機(jī)自啟動(dòng)
創(chuàng)建開機(jī)自啟腳本
vim /etc/systemd/system/nginx.service
腳本內(nèi)容:
# 僅修改 /usr/local/nginx/sbin/nginx 這個(gè)路徑即可(修改為實(shí)際的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ī)自啟動(dòng)
systemctl daemon-reload systemctl enable nginx
驗(yàn)證
# nginx啟動(dòng) systemctl start nginx # nginx停止 systemctl stop nginx # 直接重啟服務(wù)器即可(nginx就自動(dòng)重啟了) reboot
常用命令
# 啟動(dòng)nginx服務(wù) systemctl start nginx # 重新啟動(dòng)nginx服務(wù) systemctl restart nginx # 查看nginx服務(wù)當(dāng)前狀態(tài) systemctl status nginx # 停止開機(jī)自啟動(dòng) systemctl disable nginx
到此這篇關(guān)于使用 nginx 搭建代理服務(wù)器(正向代理 https 網(wǎng)站)指南的文章就介紹到這了,更多相關(guān)nginx 搭建代理服務(wù)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx+CI框架出現(xiàn)404錯(cuò)誤怎么解決
這篇文章主要介紹了Nginx+CI出現(xiàn)404錯(cuò)誤怎么解決的相關(guān)資料,需要的朋友可以參考下2016-03-03Nginx配置請(qǐng)求頭攜帶原始請(qǐng)求信息的實(shí)現(xiàn)
本文主要介紹了Nginx配置請(qǐng)求頭攜帶原始請(qǐng)求信息的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12使用Nginx代理解決跨域問(wèn)題并傳遞請(qǐng)求頭的完整指南
在現(xiàn)代 Web 開發(fā)中,跨域資源共享(CORS)是一個(gè)常見(jiàn)的問(wèn)題,當(dāng)你的前端應(yīng)用嘗試從一個(gè)域名請(qǐng)求另一個(gè)域名的資源時(shí),瀏覽器會(huì)阻止這種請(qǐng)求,除非目標(biāo)服務(wù)器明確允許跨域訪問(wèn),本文將詳細(xì)介紹如何使用 Nginx 作為代理服務(wù)器來(lái)解決跨域問(wèn)題,需要的朋友可以參考下2025-01-01Nginx 服務(wù)器開啟status頁(yè)面檢測(cè)服務(wù)狀態(tài)的方法
這篇文章主要介紹了Nginx 服務(wù)器開啟status頁(yè)面檢測(cè)服務(wù)狀態(tài)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01Nginx?ingress?controller高可用的實(shí)現(xiàn)
本文主要介紹了Nginx?ingress?controller高可用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06配置Nginx實(shí)現(xiàn)訪問(wèn)本地靜態(tài)資源的完整指南
Nginx 是一個(gè)高性能的 HTTP 服務(wù)器和反向代理服務(wù)器,廣泛用于靜態(tài)資源的托管和負(fù)載均衡,在開發(fā)和生產(chǎn)環(huán)境中,我們常常需要使用 Nginx 來(lái)提供本地靜態(tài)資源的訪問(wèn),本文將詳細(xì)介紹如何配置 Nginx 以便訪問(wèn)本地靜態(tài)資源,需要的朋友可以參考下2024-08-08SpringBoot前端后端分離之Nginx服務(wù)器下載安裝過(guò)程
Nginx是一款輕量級(jí)的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,這篇文章主要介紹了SpringBoot前端后端分離之Nginx服務(wù)器,需要的朋友可以參考下2022-08-08