摘要:前言業(yè)務(wù)野蠻生長時期,作為一枚,有運營過比較長的一段時間。根據(jù)該是否和匹配絕對是否對前端返回。開發(fā)人力不足以重構(gòu)這個接口,為了不影響調(diào)用成功率,想都設(shè)置為返回成功之類的狀態(tài)碼記錄慢日志為提高接口的運營質(zhì)量,同時也方便定位一些奇怪的問題。
前言
業(yè)務(wù)野蠻生長時期,作為一枚op,有運營過nginx比較長的一段時間。期間遇到些小問題,這里簡單做個總結(jié)記錄,會不定時更新:
開始扯淡 proxy_set_header的作用域限制還記得是個后臺鑒權(quán)server需要調(diào)用方提供一個QC_REAL_IP的http頭做校驗,我在nginx里配置如下:
proxy_set_header QC_REAL_IP $http_host; location ^~/authorize/ { proxy_set_header Host $http_host; proxy_pass http://authorize_server; proxy_redirect off; }
但是,卻發(fā)現(xiàn)鑒權(quán)不成功,一直是返回503。掏出tcpdump抓包
tcpdump -i eth1 -nn -Als0p "tcp and host author_server_ip and port author_server_port"
發(fā)現(xiàn)nginx發(fā)出的包頭里沒有QC_REAL_IP字段,遂翻閱nginx wiki,找到這行
proxy_set_header directives issued at higher levels are only inherited when no proxy_set_header directives have been issued at a given level.
原來proxy_set_header不完全是繼承關(guān)系!把QC_REAL_IP的配置copy一份到location里,終于生效了。
剛開始拿nginx做proxy,一般proxy_pass和upstream的名字一致,有多個proxy_pass就加數(shù)字.例如:
upstream xxoo.com { server 10.8.8.8:8080; } upstream xxoo.com_2 { server 10.8.8.8:8088; } server { listen 443; server_name xxoo.com ... ... location /api/user/ { proxy_pass http://xxoo.com; proxy_redirect off; } location /api/pay/ { proxy_pass http://xxoo.com_2; proxy_redirect off; } }
重啟nginx后,訪問測試pay接口第一個https訪問是正常的,但由后端server返回的302跳轉(zhuǎn)全部變成了http請求。在nginx和后端機器tcpdump抓包分析,發(fā)現(xiàn)pay接口從nginx過去的請求頭Host是xxoo.com_2,而user接口是xxoo.com則302跳轉(zhuǎn)https正常!
所以nginx的proxy模塊請求backend的http header中Host字段指就是proxy_pass 指令的值。nginx根據(jù)該Host是否和server_name匹配絕對是否對前端返回https。
一般情況我在nginx接入側(cè)配置這條足以:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_add_x_forwarded_for的值為: 客戶端穿過來的x_forwarded_for值+ remote_addr。如果客戶端傳來的x-forwarded-for值本事是非法、錯誤的。那么后端應(yīng)用如果截取左起第一個字段獲取到的ip值也是錯誤。
這個一般有2個辦法,首先,可以在nginx接入對很明顯非法的ip摘掉,強制把remote_addr值添到X-Forwarded-For字段:
set $my_proxy_add_x_forwarded_for $proxy_add_x_forwarded_for; if ($proxy_add_x_forwarded_for ~* "127.0.0.1"){ set $my_proxy_add_x_forwarded_for $remote_addr; } proxy_set_header X-Forwarded-For $my_proxy_add_x_forwarded_for;
另外,如果是做ip頻率限制、校驗的話,還不如直接取X-Forwarded-For值的最后一段。因為偽造x-forword-for值成本太低了。
404返回碼轉(zhuǎn)換有個很老的接口拉取資料返回給客戶端,不時的出現(xiàn)404,但對業(yè)務(wù)沒影響。開發(fā)人力不足以重構(gòu)這個接口,為了不影響調(diào)用成功率,想都設(shè)置為返回成功:200,302之類的狀態(tài)碼
location / { error_page 404 =302 /404.html; }記錄慢日志
為提高api接口的運營質(zhì)量,同時也方便定位一些奇怪的問題。需要記錄nginx的慢日志,有個簡單粗暴的辦法,利用nginx+lua直接打日志。
log_by_lua " if tonumber(ngx.var.upstream_response_time) > 3 then local status_code = ngx.var.upstream_status local time_ts= ngx.localtime() local upstream_res_time= ngx.var.upstream_response_time ngx.log(ngx.ERR, "[SLOW] upstream_responce_time:" .. upstream_res_time .. ", upstream_http_code:" .. status_code ..","); end ";跨域設(shè)置CORS
這個沒啥技巧,為方便前端開發(fā),在接入層打開跨域資源共享。但從安全角度考慮,不能完全打開限制,所以對業(yè)務(wù)的幾個referer域名做了正則匹配。
if ($http_referer ~ http://(.*).(xx1|xx2|xx3).(com|cn)(/*.*)){ add_header Access-Control-Allow-Credentials true; add_header Timing-Allow-Origin http://$1.$2.$3; add_header Access-Control-Allow-Origin http://$1.$2.$3; }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/39127.html
摘要:線上運營的問題配置更新首先,配置修改問題。腳本每隔分鐘執(zhí)行一次,檢查配置,生效。那怎么監(jiān)控這一環(huán)呢自己弄了個模塊,抽取內(nèi)置的變量等等通過抽樣上報給集群,利用根據(jù)業(yè)務(wù),域名,路徑等分類實時分組計算,按分鐘緯度統(tǒng)計匯總。 背景 標題黨了,現(xiàn)在不寫個海量、高并發(fā)、大數(shù)據(jù)都不好意思發(fā)出來。 前面發(fā)了一個nginx的tips文章,一些基本的用法。這里主要說下nginx在多業(yè)務(wù)、大規(guī)模場景下的一...
摘要:由于是并行開發(fā),肯定存在好幾個功能同時驗收或者測試的情況,這個時候預發(fā)環(huán)境到底部署誰的代碼呢切換到的分支,就不能驗收了。所以希望存在一個多人開發(fā)環(huán)境,每個人的開發(fā)流程互不影響。運行原理首先我們來分析下的運行原理,看看的語言特點。 PHP 作為世界上最好的語言,在web里占據(jù)著大概80%的份額,中小公司基本都說 lnmp 架構(gòu)。當一個倉庫開發(fā)人員大于1,20人的時候,每個人可能開發(fā)不同的...
摘要:由于是并行開發(fā),肯定存在好幾個功能同時驗收或者測試的情況,這個時候預發(fā)環(huán)境到底部署誰的代碼呢切換到的分支,就不能驗收了。所以希望存在一個多人開發(fā)環(huán)境,每個人的開發(fā)流程互不影響。運行原理首先我們來分析下的運行原理,看看的語言特點。 PHP 作為世界上最好的語言,在web里占據(jù)著大概80%的份額,中小公司基本都說 lnmp 架構(gòu)。當一個倉庫開發(fā)人員大于1,20人的時候,每個人可能開發(fā)不同的...
閱讀 1324·2021-11-24 10:24
閱讀 4167·2021-11-22 15:29
閱讀 1099·2019-08-30 15:53
閱讀 2801·2019-08-30 10:54
閱讀 1987·2019-08-29 17:26
閱讀 1292·2019-08-29 17:08
閱讀 613·2019-08-28 17:55
閱讀 1591·2019-08-26 14:01