2021年12月9日 星期四

Nginx學習筆記 (6) - Proxy設定


Proxy 主要分成兩種

1. 正向代理 (Forward proxy):代理對象是client

  client <--> proxy <-- | --> server

  (server不會知道client的IP)


2. 反向代理 (Reverse proxy):代理對象是server

  client <-- | --> proxy <---> server

  (client不會知道server的IP)


作為服務端,我們一般是拿Nginx做為 reverse proxy,前面講到的負載平衡的分流其實就是 reverse proxy 的一種常見功能,以下介紹更多 proxy 相關的功能


設定Header

可以設定 header 傳給後端的 server

如果後端 server 想要知道用戶端的IP,需要在 proxy 將用戶IP記在 header 上,不然從 server 端來看 request 來源的 IP 都是 proxy

upstream app {
    server my-app:5000;
    server my-app-2:5001;
}

server {
    listen  80;
    server_name localhost;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://app;
    }
}

- \$remote_addr:用戶端IP

- \$proxy_add_x_forwarded_for:若原 request header 自帶 X-Forward-For,會將原 X-Forward-For 值加上 \$remote_addr 在傳給後端 server,若原 request 就沒有 X-Forward-For header 則傳到 server 的值等同 \$remote_addr

- Nginx 預設會將經過的 requset 加上 Host: \$proxy_host 和 Connection: close 這兩個 header


Proxy Buffer

設定 proxy buffer 能讓將 server response 緩存在 proxy buffer,server 的連線就不用一直維持到用戶端接完 response

就在沒有proxy buffer的狀況下後端server回傳response要等client端接收完才會斷線,但有了proxy buffer,後端server的response能緩存在nginx的proxy buffer,client端從proxy buffer取得server response,這樣後端server就能早點切斷連線

upstream app {
    server my-app:5000;
    server my-app-2:5001;
}

server {
    listen  80;
    server_name localhost;

    location / {
        proxy_buffering on;
        proxy_buffers 16 4k;
        proxy_buffer_size 2k;
        proxy_pass http://app;
    }
}


- proxy_buffering:預設是打開的

- proxy_buffers number size:設定 buffer 數量與大小,預設數量是 8 個,大小是 1 個內存頁 (4k 或 8k)

- proxy_buffer_size:response 的一部份是另外存在一個 buffer,proxy_buffer_size 是用來設定此 buffer 大小用




沒有留言:

張貼留言