摘要:傳給微信的參數(shù)進(jìn)行轉(zhuǎn)義其中參數(shù)是可以被微信原樣返回,這樣就可以按你自己的需求完成反向代理了。可以去掉搭建測試環(huán)境另一條運維的原則是不要在生產(chǎn)環(huán)境上直接改,在測試環(huán)境修改并經(jīng)過測試,測試通過后,再上傳到生產(chǎn)環(huán)境。
前言
在與第三方系統(tǒng)進(jìn)行接口開發(fā)時,需要不斷的改進(jìn)和測試,以常見的微信登錄支付和 Alipay 支付和登錄為例. 相對來講 Alipay 做起來容易一些, 一是接口 SDK 封裝的簡單一些,對老接口也相對友好, 文檔的岐義少. 微信就不那么容易了. 出于安全的考慮,微信的商戶 ID 授權(quán)回調(diào)和支付回調(diào)只允許后臺配置的一個地址, 看上去可以加, 但在我有限的經(jīng)驗里,加了也不管用. 有時間吐槽,不如花時間想其他辦法搞定. 借助于萬能的 nginx 反向代理功能, 我們就把測試的和正式環(huán)境的配置通一個域名地址,但不同參數(shù)的方式搞定了.
使用場景 - 微信的測試假設(shè)你和一個正式服務(wù)器,如 bixuebihui.com, 還有一個測試用的,dev.bixuebihui.com, 正式的微信回調(diào)路徑是 https://bixuebihui.com/pay, 測試的路徑是 https://dev.bixuebihui.com/other/pay 微信后臺綁定的是前一個路徑,但你想對自己的代碼按后一個路徑做測試,該怎么做 nginx 的配置呢?
閑話少說,上代碼,啊不,配置:
servername bixuebihui.com; location /pay { proxy_connect_timeout 3; proxy_read_timeout 30; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect / /; add_header X-Upstream $upstream_addr; proxy_set_header Host $arg_domain; if ($arg_domain ~ "dev.bixuebihui.com" ){ proxy_pass https://your.private.dev.ip; rewrite /pay/(.*) /other/pay/$1 break; break; } proxy_pass http://your_super_cluster; }
說明:
proxy_pass https://your.private.dev.ip; 這里要用 ip 比較好,因為 Host 是用 domain 控制的,如果也用 domain 會有安全問題?!?/p>
"https://xxxx.weixin.qq.com/xxxapi?redirect_uri=https%3A%2F%2Fbixuebihui.com%2Fpay%3Fdomain%3Dhttps%253A%252F%252Fdev.bixuebihui.com%252Fother%252Fpay&other_params=xxxxxx " 傳給微信的參數(shù)進(jìn)行 url 轉(zhuǎn)義, 其中 domain 參數(shù)是可以被微信原樣返回,這樣就可以按你自己的需求完成反向代理了。
路徑改寫與域名的處理上面的例子中,實際向服務(wù)器發(fā)起的請求,根據(jù)參數(shù)不同,可能被改寫,也可能不會
如訪問 bixuebihui.com/pay/abc.do 最終實際請求發(fā)送給http://your_super_cluster/pay/abc.do, 且 Host 參數(shù)為bixuebihui.com, 如果 your_super_cluster上 有多個虛擬主機, 將會訪問到主機頭為 bixuebihui.com 的一個或默認(rèn)的.
如訪問的是 bixuebihui.com/pay/abc.do?domain=dev.bixuebihui.com
則最終請求會發(fā)給https://your.private.dev.ip/other/pay/abc.do?domain=dev.bixuebihui.com,且 Host 參數(shù)為 $arg_domain 的值,即 dev.bixuebihui.com.
nginx 支持對 https 的代理, 如果你的應(yīng)用服務(wù)器與 nginx 在一個子網(wǎng)內(nèi),建議直接在 nginx 上配置 https, 后端采用 http 協(xié)議, 這樣應(yīng)用服務(wù)器的壓力會小很多.
配置 https 協(xié)議現(xiàn)在有很多免費證書可用. 最方便的要數(shù) certbot, 在這個網(wǎng)站上連注冊都不需要, 就可以為你的域名獲得證書, 自動支持對 nginx 和 apache 等常見 web 服務(wù)器進(jìn)行自動配置, 完全傻瓜化使用. 一分鐘搞定真不是吹的. 2018 年 4 月左右將推出對通配二級域名的支持.到時候會更加方便. 真是良心網(wǎng)站.
參數(shù)與 redirect如果你的網(wǎng)站有 302 這類的跳轉(zhuǎn),這時反向代理要設(shè)置成
proxy_redirect / /;
否則后端服務(wù)器有可能返回內(nèi)網(wǎng)跳轉(zhuǎn)路徑給瀏覽器, 造成無法訪問.
nginx配置正確性測試 對生產(chǎn)環(huán)境的修改前先要備份最好對現(xiàn)有的可能運行的配置文件做備份,有兩種辦法,一是用版本管理系統(tǒng),如git ,參考這里,另一種方式是自己寫腳本來管理備份。
下面是我的備份腳本,供參考, 路徑要改成你自己的,這個腳本是以日期為擴展名,如果你同一天需要多個備份請修改腳本,別掉坑里。
nginx_config_backup.sh
################################################################### #######nginx_config_backup################################################### #!/bin/sh # ----------------------------- # the directory for story your backup file. backup_dir="/home/yourname/backup" # date format for backup file (dd-mm-yyyy) time="$(date +"%Y%m%d")" MKDIR="$(which mkdir)" RM="$(which rm)" MV="$(which mv)" TAR="$(which tar)" GZIP="$(which gzip)" #針對不同系統(tǒng),如果環(huán)境變量都有??梢匀サ?# check the directory for store backup is writable test ! -w $backup_dir && echo "Error: $backup_dir is un-writeable." && exit 0 # the directory for story the newest backup test ! -d "$backup_dir" && $MKDIR "$backup_dir" $TAR -zcPf $backup_dir/$HOSTNAME.nginx.$time.tar.gz /etc/nginx #delete the oldest backup 30 days ago find $backup_dir -name "*.gz" -mtime +30 |xargs rm -rf exit 0;搭建測試環(huán)境
另一條運維的原則是:不要在生產(chǎn)環(huán)境上直接改,在測試環(huán)境修改并經(jīng)過測試,測試通過后,再上傳到生產(chǎn)環(huán)境。
安裝擴展包
$ sudo apt-get install nginx-extras
這樣你就可以使用 Lua, echo 這些方便調(diào)試的工具了。
echo使用很簡單
在location 配置塊內(nèi):
echo hello world; echo_flush;
詳細(xì)說明看這里echo.
如果你是一個網(wǎng)管,代碼是別人寫的,且寫得很爛,怎么辦?為了能睡個安穩(wěn)覺,你可安裝 nginx-naxsi 版本, "Nginx Anti Xss & Sql Injection". 損失一點效率,帶來的是更安全。不過這個版本在新的(15.04以后的)ubuntu里已經(jīng)不再提供更新了。需要話可能需要自已多帶帶設(shè)置安裝源。
修改了 nginx 的配置文件, 一定要先測試再重啟nginx -t && service nginx reload
或
sudo service nginx configtest && sudo service nginx reload
debug 可以輸出更多信息
server { #other config error_log /var/logs/nginx/example.com.error.log; location /admin/ { error_log /var/logs/nginx/admin-error.log debug; } #other config }
如果你的站長訪問量很大,這么做你的磁盤很快會被耗光, 也可以設(shè)置成只針對特定 IP 寫 debug 信息
events { debug_connection 1.2.3.4; }
這里 1.2.3.4 是你要調(diào)試的 ip 地址,
想要獲得自己的外網(wǎng) ip,有一個網(wǎng)站很好用
curl http://httpbin.org/ip
這個網(wǎng)站上還有很多其他用來調(diào)試http協(xié)議應(yīng)用的api接口. 簡單易用.
總結(jié)nginx很強大, 詳細(xì)掌握nginx的用法能幫你少寫很多代碼, 維護一個更健康的網(wǎng)站.
如果有人感興趣, 下次可以討論一下nginx安全方面的應(yīng)用, 防抓取, 防攻擊等等.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/39798.html
摘要:在現(xiàn)如今的游戲市場寒冬中,擁有微信龐大的用戶量以及更好兼容性的小程序游戲,優(yōu)勢就顯得格外明顯。掃描二維碼即可報名您在現(xiàn)場將有這些體驗來自騰訊云云開發(fā)團隊與微信團隊聯(lián)合打造干貨分享,內(nèi)容包括微信小游戲首發(fā)經(jīng)驗分享。 有人說微信小程序游戲的百花齊放 活像十幾年前的4399小游戲稱霸互聯(lián)網(wǎng)的景象 歪,斗地主嗎,三缺二, 不用下app,小程序就能玩,我保證不搶地主讓你搶! ...... ‘...
摘要:微信年月日發(fā)公告稱,個人主體注冊公眾號數(shù)量上限由個調(diào)整為個。大家都知道每個微信公眾號在進(jìn)行開發(fā)時,授權(quán)回調(diào)的域名只能設(shè)置一個,正常的開發(fā)一般一套環(huán)境就對應(yīng)一個域名。 微信2018年11月16日發(fā)公告稱,個人主體注冊公眾號數(shù)量上限由2個調(diào)整為1個。企業(yè)類主體注冊公眾號數(shù)量上限由5個調(diào)整為2個。這個對馬上要注冊公眾號的企業(yè)來說頓時心情不好了。 大家都知道每個微信公眾號在進(jìn)行開發(fā)時,授權(quán)回調(diào)...
摘要:一下載鏡像我這里用的是輕量級的鏡像下載完成后,通過命令檢查一下鏡像是否下載成功二先以簡單的方式運行鏡像以后臺方式運行鏡像指定容器的名稱為命令執(zhí)行完成后,通過命令確認(rèn)一下容器是否啟動成功。 歡迎關(guān)注個人微信公眾號: 小哈學(xué)Java, 文末分享阿里 P8 高級架構(gòu)師吐血總結(jié)的 《Java 核心知識整理&面試.pdf》資源鏈接??!個人網(wǎng)站: https://www.exception.sit...
閱讀 2019·2023-04-26 02:15
閱讀 2302·2021-11-19 09:40
閱讀 1038·2021-10-27 14:13
閱讀 3307·2021-08-23 09:44
閱讀 3609·2019-12-27 12:24
閱讀 652·2019-08-30 15:53
閱讀 1164·2019-08-30 10:53
閱讀 2153·2019-08-26 12:14