【Nginx】 配置學(xué)習(xí)筆記

雖然之前搭建自己的服務(wù)時(shí),有配置過 Nginx,但沒有很深入去了解。
這次因?yàn)楣ぷ餍枰?,要整理?Nginx 的配置。就仔細(xì)去看了下相關(guān)介紹。
這回算是補(bǔ)上知識的盲區(qū)了。


關(guān)于 server_name

當(dāng)各個(gè) server 的 listen 端口各不一樣時(shí),可以不用寫 server_name。
但當(dāng)多個(gè) server 共用一個(gè) listen 端口時(shí),server_name 就需要寫了。

關(guān)于 head

Nginx 在做轉(zhuǎn)發(fā)時(shí),會丟棄部分 head,所以在處理部分業(yè)務(wù)的時(shí)候,需要補(bǔ)上。

如果是一個(gè) Web API 應(yīng)用,那么下面幾個(gè)需要補(bǔ)上

proxy_set_header Host $host; # 如果需要用域名在一些處理時(shí),會有幫助
proxy_set_header X-Real-IP $remote_addr; #不補(bǔ)的話,后端服務(wù)看到的是nginx 的 ip,比如127.0.0.1
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #看到的是完整的 ip 鏈路
proxy_set_header X-Forwarded-Proto $scheme; # 用的是 http 還是 https 還是其他

具體講下兩個(gè)和 ip 相關(guān)的:
$remote_addr 獲得的是訪問 Nginx 的 IP,也就是“直連”IP(可能是代理)
$proxy_add_x_forwarded_for 比如 我(比如1.1.1.1) 通過某個(gè)代理訪問(比如2.2.2.2) Nginx,那么這里獲得的 IP 就是 1.1.1.1, 2.2.2.2

當(dāng)需要使用 WebSocket 的時(shí)候,需要添加以下配置

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

只有 http1.1 才支持 WebSocket,另外兩個(gè) head 也是配置 ws 需要的。
不寫proxy_http_version時(shí),默認(rèn)是1.0。寫 1.1 不會有問題,性能更好。

關(guān)于速度

配置http2,可以讓客戶端訪問 Nginx 更好更快。如果客戶端不支持http2,會自動降級,不用操心。(配置位置見下面的代碼)
配置 proxy_http_version 可以讓 Nginx 訪問后端服務(wù)更好更快。

如果想看這些$參數(shù)的值,可以放到 head 里,比如

# debug.conf
server {
    listen 8080 ssl; # 1.25以下,要開啟 http2 的話:listen 8080 ssl http2
    http2 on; # nginx 1.25以上配置在這里
    location /debug { # 注意,下面這些X-Debug-*都是自定義的,不寫 X-Debug 也OK
      add_header X-Debug-Upgrade       $http_upgrade;
      add_header X-Debug-Connection    $http_connection;
      add_header X-Debug-Real-IP       $remote_addr;
      add_header X-Debug-Host          $host;
      add_header X-Debug-Proto         $scheme;
      add_header X-Debug-request_uri   $request_uri;
      add_header X-Debug-Forwarded-For $proxy_add_x_forwarded_for;
      return 200 "OK\n";
    }
}

然后可以通過 curl -v http://...../debug 來查看上面添加的 header,也可以通過其他工具如 chrome。

配置里參數(shù)位置的介紹

  • server 里 location 之外的配置 —— 作用于“客戶端到 Nginx”這段(協(xié)議、監(jiān)聽、SSL、路由)
  • location 里的配置 —— 作用于“Nginx 到后端”這段(代理、header、upgrade、timeout)

一個(gè) Web API 的基礎(chǔ)代理配置

server {
    listen 8080;
    http2 on;
    location / {
        proxy_pass http://192.168.101.1:18080;

        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_http_version 1.1;
        proxy_connect_timeout 5s;
        proxy_read_timeout 60s;
        proxy_send_timeout 60s;
    }
}

一個(gè) WebSocket 游戲服的基礎(chǔ)代理配置

server {
    listen 8081;
    http2 on;
    location / {
        proxy_pass http://192.168.1.1:18081;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        proxy_read_timeout 120s;
        proxy_send_timeout 120s;
        proxy_connect_timeout 4s;
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容