国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

nginx線上運(yùn)營tips總結(jié)

ZoomQuiet / 2768人閱讀

摘要:前言業(yè)務(wù)野蠻生長時(shí)期,作為一枚,有運(yùn)營過比較長的一段時(shí)間。根據(jù)該是否和匹配絕對是否對前端返回。開發(fā)人力不足以重構(gòu)這個(gè)接口,為了不影響調(diào)用成功率,想都設(shè)置為返回成功之類的狀態(tài)碼記錄慢日志為提高接口的運(yùn)營質(zhì)量,同時(shí)也方便定位一些奇怪的問題。

前言

業(yè)務(wù)野蠻生長時(shí)期,作為一枚op,有運(yùn)營過nginx比較長的一段時(shí)間。期間遇到些小問題,這里簡單做個(gè)總結(jié)記錄,會不定時(shí)更新:

開始扯淡 proxy_set_header的作用域限制

還記得是個(gè)后臺鑒權(quán)server需要調(diào)用方提供一個(gè)QC_REAL_IP的http頭做校驗(yàn),我在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里,終于生效了。

https業(yè)務(wù)proxy_pass的HOST頭設(shè)置

剛開始拿nginx做proxy,一般proxy_pass和upstream的名字一致,有多個(gè)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接口第一個(gè)https訪問是正常的,但由后端server返回的302跳轉(zhuǎn)全部變成了http請求。在nginx和后端機(jī)器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。

透傳客戶端ip

一般情況我在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值本事是非法、錯(cuò)誤的。那么后端應(yīng)用如果截取左起第一個(gè)字段獲取到的ip值也是錯(cuò)誤。
這個(gè)一般有2個(gè)辦法,首先,可以在nginx接入對很明顯非法的ip摘掉,強(qiáng)制把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頻率限制、校驗(yàn)的話,還不如直接取X-Forwarded-For值的最后一段。因?yàn)閭卧靫-forword-for值成本太低了。

404返回碼轉(zhuǎn)換

有個(gè)很老的接口拉取資料返回給客戶端,不時(shí)的出現(xiàn)404,但對業(yè)務(wù)沒影響。開發(fā)人力不足以重構(gòu)這個(gè)接口,為了不影響調(diào)用成功率,想都設(shè)置為返回成功:200,302之類的狀態(tài)碼

location / {   
    error_page 404 =302 /404.html;   
}  
記錄慢日志

為提高api接口的運(yùn)營質(zhì)量,同時(shí)也方便定位一些奇怪的問題。需要記錄nginx的慢日志,有個(gè)簡單粗暴的辦法,利用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

這個(gè)沒啥技巧,為方便前端開發(fā),在接入層打開跨域資源共享。但從安全角度考慮,不能完全打開限制,所以對業(yè)務(wù)的幾個(gè)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://m.specialneedsforspecialkids.com/yun/39127.html

相關(guān)文章

  • nginx海量業(yè)務(wù)運(yùn)營總結(jié)

    摘要:線上運(yùn)營的問題配置更新首先,配置修改問題。腳本每隔分鐘執(zhí)行一次,檢查配置,生效。那怎么監(jiān)控這一環(huán)呢自己弄了個(gè)模塊,抽取內(nèi)置的變量等等通過抽樣上報(bào)給集群,利用根據(jù)業(yè)務(wù),域名,路徑等分類實(shí)時(shí)分組計(jì)算,按分鐘緯度統(tǒng)計(jì)匯總。 背景 標(biāo)題黨了,現(xiàn)在不寫個(gè)海量、高并發(fā)、大數(shù)據(jù)都不好意思發(fā)出來。 前面發(fā)了一個(gè)nginx的tips文章,一些基本的用法。這里主要說下nginx在多業(yè)務(wù)、大規(guī)模場景下的一...

    yvonne 評論0 收藏0
  • 老項(xiàng)目改造記

    摘要:前言老項(xiàng)目,項(xiàng)目情況端配置運(yùn)行環(huán)境方面有些人開發(fā)環(huán)境是,有些是。以我的開發(fā)環(huán)境為例老項(xiàng)目的運(yùn)行,開發(fā)時(shí)需要先執(zhí)行一個(gè)腳本經(jīng)歷過一次風(fēng)波之后做的人走光啦,但是老項(xiàng)目要繼續(xù)維護(hù)。老項(xiàng)目改造其實(shí)還有不少坑,等我想起來再慢慢更新。 前言 老項(xiàng)目,React + PHP + nginx 項(xiàng)目情況 PHP端配置 PHP運(yùn)行環(huán)境方面:有些人開發(fā)環(huán)境是wamp(apache + PHP),有些是np...

    SimonMa 評論0 收藏0
  • php多人開發(fā)環(huán)境原理解析

    摘要:由于是并行開發(fā),肯定存在好幾個(gè)功能同時(shí)驗(yàn)收或者測試的情況,這個(gè)時(shí)候預(yù)發(fā)環(huán)境到底部署誰的代碼呢切換到的分支,就不能驗(yàn)收了。所以希望存在一個(gè)多人開發(fā)環(huán)境,每個(gè)人的開發(fā)流程互不影響。運(yùn)行原理首先我們來分析下的運(yùn)行原理,看看的語言特點(diǎn)。 PHP 作為世界上最好的語言,在web里占據(jù)著大概80%的份額,中小公司基本都說 lnmp 架構(gòu)。當(dāng)一個(gè)倉庫開發(fā)人員大于1,20人的時(shí)候,每個(gè)人可能開發(fā)不同的...

    young.li 評論0 收藏0
  • php多人開發(fā)環(huán)境原理解析

    摘要:由于是并行開發(fā),肯定存在好幾個(gè)功能同時(shí)驗(yàn)收或者測試的情況,這個(gè)時(shí)候預(yù)發(fā)環(huán)境到底部署誰的代碼呢切換到的分支,就不能驗(yàn)收了。所以希望存在一個(gè)多人開發(fā)環(huán)境,每個(gè)人的開發(fā)流程互不影響。運(yùn)行原理首先我們來分析下的運(yùn)行原理,看看的語言特點(diǎn)。 PHP 作為世界上最好的語言,在web里占據(jù)著大概80%的份額,中小公司基本都說 lnmp 架構(gòu)。當(dāng)一個(gè)倉庫開發(fā)人員大于1,20人的時(shí)候,每個(gè)人可能開發(fā)不同的...

    Jinkey 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<