配置nginx轉發(fā)內網(wǎng)請求到外網(wǎng)的實現(xiàn)示例
一、要干什么事情
因工作需要對接,需要在內網(wǎng)獲取外網(wǎng)的接口的數(shù)據(jù)。但是因為網(wǎng)絡管理的需要,內網(wǎng)不能直接暴露到公網(wǎng)環(huán)境中,因此采取的方案是:
step1:內網(wǎng)的服務器N上發(fā)起了一個請求
step2:請求的地址是服務器Z的內網(wǎng)地址(服務器是一個中轉服務器,能連接內網(wǎng)和外網(wǎng))
step3:服務器Z將請求通過nginx轉發(fā)到外網(wǎng)
step4:請求外網(wǎng)服務器W上的接口
step5:接口請求成功,獲取json數(shù)據(jù)
二、怎么干
干這個事情,有三方面的人。
一方面:以我為首的,需要調用接口取數(shù),下文簡稱為“我方”。
二方面:是提供網(wǎng)絡安全服務以及中間服務器,下文簡稱為“中間方”。
三方面:是提供接口服務的廠商,下文簡稱為“對方”。
任務拆解:
我方:通過xxljob寫好定時任務,根據(jù)對方提供的接口文檔的信息,編寫請求接口。
中間方:安裝好nginx,并打通和兩方的網(wǎng)絡環(huán)境,對我方開放端口。
對方:暴露接口,供我方調用,并將中間放的服務器ip設置到白名單中。
三、開始干
3.1安裝nginx
因為中間方比較懶,nginx是我方請運維同事上去安裝的。
nginx能夠正常使用,然后就開始修改配置文件,準備重啟nginx測試一把了,nginx.conf的配置如下
server { listen 80; server_name _; access_log logs/www_access.log main; error_log logs/error.log error; location /api { root html; index index.html index.htm; location /api { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://對方的ip地址; } }
3.2更新nginx配置,設置https請求
nginx很順利的重啟了,但是請求接口是出現(xiàn)了報錯,經(jīng)過排查,發(fā)現(xiàn)nginx.conf配置的有問題,對方的接口是在外網(wǎng),應該用https請求,于是更新了一下nginx.conf的配置
server { listen 80; server_name _; access_log logs/www_access.log main; error_log logs/error.log debug; location / { root html; index index.html index.htm; location /api { proxy_set_header X-Real-IP $remote_addr; proxy_pass https://完整域名/api; proxy_ssl_server_name on; } } }
重啟nginx報錯
報錯的信息簡單來說就是我安裝的nginx沒有ssl功能,經(jīng)過一頓百度得到了答案:
然后發(fā)現(xiàn)nginx根本不是通過軟件包安裝的方式裝上來的,是運維同事從其他項目上把安裝后的文件夾打包過來的。(給這位頭腦靈活的同事點個贊????)
于是我將現(xiàn)有的nginx備份了一下,開始準備重新安裝nginx
3.3重裝nginx
安裝nginx參照的博客是http://www.dbjr.com.cn/article/189359.htm
因為版本的問題,有一部分的包無法正常下載了,因此我將博客中的操作步驟進行了簡化以代碼包的升級,操作步驟見下圖:
安裝的過程中很順利,但是在安裝nginx的時候頻繁的報錯誤,安裝失敗,于是將nginx的版本升級到1.20.0后解決了nginx安裝的問題。
ok,現(xiàn)在開始解決nginx不支持ssl的問題,在nginx的解壓后的目錄下執(zhí)行下面指令:
./configure --with-http_ssl_module
然后又報錯了,報錯信息如下:
./configure: error: SSL modules require the OpenSSL library.
You can either do not enable the modules, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using --with-openssl=<path> option.
然后我就直接升級了openssl的版本,然后重試,終于裝好了。
3.4后續(xù)的問題
nginx配置了代理https也能夠正常的啟動了。
然后再次重試發(fā)起請求,從access_log logs/www_access.log請求日志中可以看到,nginx相應了內網(wǎng)的請求,但是返回值都是403。
現(xiàn)在還無法判斷是內網(wǎng)到nginx出現(xiàn)了問題,還是nginx到外網(wǎng)出現(xiàn)了問題。
于是兩路走:
1.nginx上再配置另一個內網(wǎng)的接口,然后發(fā)起請求,此時發(fā)現(xiàn)請求日志中返回值是200,成功,發(fā)起請求的內網(wǎng)服務器的日志中也得到了相應的信息。
2.在nginx的服務器上,直接模擬接口請求,請求外網(wǎng),結果:403
結論:nginx到外網(wǎng)出現(xiàn)了問題,經(jīng)過和對方的排查,發(fā)現(xiàn)對方?jīng)]有將nginx的服務器設置到白名單中。
3.5最終結果
在配置白名單后,就能夠正常請求到接口的數(shù)據(jù)了。
四、學到的東西
4.1 nginx怎么開啟日志
中間的地址給的是相對路徑,也可以設置成絕對路徑。
main是nginx配置文件中最上方配置的規(guī)則,需要打開注釋
error_log后面的error是日志的級別
日志級別:可以指定日志記錄的級別,如 debug
、info
、notice
、warn
、error
、crit
、alert
、emerg
等,控制不同嚴重程度的錯誤信息是否記錄到該日志中。
4.2 怎樣模擬接口請求
通過咨詢ai助手得到了該信息,驗證了nginx到外網(wǎng)的通道是否正確。
4.3代碼格式
這篇博客中代碼都變成一行了,使用markdown語法寫博客可以完整展示,于是我又發(fā)了一篇一樣的,但是代碼格式是完整的。
到此這篇關于配置nginx轉發(fā)內網(wǎng)請求到外網(wǎng)的實現(xiàn)示例的文章就介紹到這了,更多相關nginx轉發(fā)內網(wǎng)請求到外網(wǎng)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
騰訊云CentOS 6.6快速安裝 Nginx服務器圖文教程
本文通過圖文并茂的形式給大家介紹了騰訊云CentOS 6.6快速安裝 Nginx服務器的方法,介紹的非常詳細,具有參考借鑒價值,感興趣的朋友一起看看吧2016-09-09利用Nginx_geo模塊實現(xiàn)CDN調度的配置方法
今天小編就為大家分享一篇利用Nginx_geo模塊實現(xiàn)CDN調度的配置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08