通用

1. 修改配置

在全域性配置頁面,可以設定閘道器節點的預設配置。

點選通用,在通用頁面右側是主要分類,可以點選具體分類,快速進入相應的設定選項區。 目前主要有:Worker、SSL、Proxy、Client Request、File Buffer、Log、DNS、Gzip、Brotli 以及 Others。

Worker connections

比如 Worker connections,可以用它控制每個工作程序的最大預設連線數。 這裡修改為 10777,並點選右側的 Save 按鈕。

儲存成功會自動同步到對應分割槽的所有閘道器節點。

SSL

對於 SSL ciphers 和 SSL protocols ,這裡提供了四個預設選項。

  • Modern:適用於對客戶端比較新的情況。
  • Intermdiate:均衡版本,預設推薦選項。
  • Old:適用於對客戶端比較老的情況。
  • Custom:當上面三個預設選項都不能滿足需求是,可以進行自定義。

額外信任的 CA 證書

在 附加可信 CA 證書 中,可以新增一個或多個 PEM 格式的 CA 證書。儲存配置後,閘道器伺服器會在系統預設信任的 CA 之外,同時信任這些額外的 CA。每個證書都應包含完整的 BEGIN CERTIFICATE 和 END CERTIFICATE 標記。

請只新增您確認可信的 CA 證書,因為這些證書會擴充套件閘道器伺服器的 TLS 信任範圍。

Proxy

在 Proxy 類,可以設定 代理快取區、代理緩衝區、代理臨時目錄等代理相關的配置項。

  • 使用舊代理快取(Use stale proxy cache):如果沒有被代理的伺服器能處理請求,則允許使用陳舊的快取進行響應。

  • 代理快取區(Proxy Cache Zone):如果我們有多塊磁碟,可以設定多個 Proxy Cache Zone 這樣可以把快取分配到不同物理磁碟上提高效能。

    啟用多個快取區時,Edge 以配置的最大容量作為權重使用一致性雜湊選擇快取區。 啟用 從負載均衡中排除 可以排除某個快取路徑:讓它不再參與預設的一致性雜湊選擇緩衝區, 容量也不再參與分配,但已有快取檔案不會被刪除。刪除或解除安裝路徑前,請確認流量已經遷移。

  • 代理臨時目錄(Proxy temporary path):自定義路徑用來儲存從被代理伺服器返回的臨時檔案。

  • 攔截源站錯誤頁(Intercept the origin site’s error pages):決定是否在狀態碼 >= 300 時,由 OpenResty Edge 攔截並處理。預設不開啟此選項。

  • 代理緩衝區大小(Proxy buffer size):設定用於讀取從被代理伺服器接收第一部分響應的緩衝區大小。

  • 代理緩衝區(Proxy buffers):為單個連線設定用於從被代理伺服器讀取響應的緩衝區的數量和大小。如果無法快取完整的響應,則響應可能會被寫入到臨時檔案中。

  • 代理忙緩衝區大小(Proxy busy buffers size):限制在響應尚未完全讀取時可能忙於向客戶端傳送響應的緩衝區的總大小。

  • 代理臨時檔案寫入大小(Proxy temporary file write size):限制一次寫入臨時檔案的大小。

  • 代理連線超時時間(Proxy connect timeout):設定與被代理伺服器建立連線的超時時間,此超時通常不能超過 75 秒。

  • 代理讀取超時時間(Proxy reading timeout):設定從被代理伺服器讀取響應的超時時間。超時僅設定在兩個連續的讀取操作之間,而不是針對整個響應的傳輸。

  • 代理傳送超時時間(Proxy sending timeout):設定將請求傳輸到被代理伺服器的超時時間。超時僅設定在兩個連續的寫操作之間,而不是針對整個請求的傳輸。

  • 代理忽略客戶端中止(Proxy ignore client abort):當客戶端在收到響應之前關閉連線時是否應關閉與被代理伺服器的連線。

    • 在未啟用該配置的情況下,如果客戶端提前關閉連線,那麼就會導致 Edge Node 跟被代理伺服器的連線也被關閉。這樣就無法複用 Edge Node 和被代理伺服器之間的長連線。
  • 代理快取重新生效(Proxy cache revalidate):對帶有 “If-Modified-Since” 和 “If-None-Match” 頭的條件請求啟用過期快取內容的重新驗證。

HTTP 請求引數配置

HTTP 請求包含如下配置項:

  1. 客戶端請求體臨時目錄

    用來存放客戶端請求體的臨時目錄定義了一個目錄,用於儲存儲存客戶請求體的臨時檔案。如果預設路徑無法滿足實際需要,你希望將客戶的請求體放置在更高速率或者更大容量的磁碟,可以修改此配置。

    預設值:/usr/local/oredge-node/client_body_temp/

  2. 讀取客戶端請求體超時時間

    該配置項定義了讀取客戶端請求體的超時。超時只針對兩個連續的讀取操作之間的時間段,而不是針對整個請求體的傳輸時間。如果客戶端在這段時間內沒有傳輸任何東西,請求將以 408(請求超時)錯誤終止。

    一般情況下,預設 60 秒的超時時間是足夠的。如果您希望縮短超時時間來抵禦攻擊,可以修改此配置項。如果在一些情況下需要使用更長的超時時間,也可以擴大該超時時間。

    預設值:60 秒

  3. 讀取客戶端請求頭超時時間

    定義了讀取客戶端請求頭的超時。如果客戶端沒有在這個時間內傳輸整個頭,請求將以 408(請求超時)錯誤終止。

    預設值:60 秒

  4. 最大請求體大小

    設定客戶端請求體的最大允許值。如果請求中的大小超過了配置的值,413(請求體過大)的錯誤會返回給客戶端。請注意,瀏覽器不能正確顯示這個錯誤。將大小設定為 0 將禁止檢查客戶端請求體的大小。

    預設值:3 MByte

  5. 請求頭快取大小

    設定用於讀取客戶端請求頭的緩衝區大小。對於大多數請求,1K 位元組的緩衝區就足夠了。然而,如果一個請求包括長的 cookies, 或者來自 WAP 客戶端,它可能不適合在 1K 位元組內。

    預設值:1 KByte

  6. 最大請求體緩衝大小

    設定用於讀取客戶端請求正文的緩衝區大小。如果請求正文大於緩衝區,整個正文或其部分將被寫入一個臨時檔案中。預設情況下,緩衝區的大小等於兩個記憶體頁。

    預設值:8 KByte

  7. Keep-alive 超時時間

    限制了透過一個保持連線處理請求的最大時間。在達到這個時間後,連線會在後續的請求處理後關閉。

    預設值:75 秒

  8. 傳送超時時間

    設定向客戶端傳輸響應的超時。該超時只在兩個連續的寫操作之間設定,而不是為整個響應的傳輸設定。如果客戶端在這個時間內沒有收到任何東西,連線就會關閉。

    預設值:60 秒

  9. 真實來源 IP 信任地址

    TCP 連線的客戶端 IP 在此信任地址列表中時,才使用真實 IP 頭修改來源 IP。

    預設值:-

  10. 客戶端 IP 來源

    1. X-Forwarded-For

      從 X-Forwarded-For HTTP 頭獲取真實的客戶端 IP 和埠。

    2. Proxy Protocol

      從 Proxy Protocol 協議頭獲取真實的客戶端 IP 和埠。 請確保 閘道器叢集 > 閘道器分割槽 中的埠已經開啟了 proxy protocol。 詳情請參考 Proxy Protocol。

    3. X-Real-IP

      從 X-Real-IP HTTP 頭獲取真實的客戶端 IP 和埠。

    4. Custom Header

      從自定義的 HTTP 頭欄位獲取真實的客戶端 IP 和埠。

  11. 遞迴搜尋 IP

    當真實 IP 頭欄位存在多個 IP 地址的時候,則從後往前查詢第一個非信任地址作為客戶的真實的客戶端 IP。

    預設值:False

日誌

在 Log 類,在這裡可以對 error log 和 access log 的輸出進行自定義控制。

錯誤日誌

  • Avoid generating error logs:預設是 DISABLE 狀態,當啟動時代表不輸出任何 錯誤日誌。
  • Logs Path:錯誤日誌的輸出路徑。
  • Error log level:錯誤日誌輸出級別。
  • Maximum number of log files to keep:最多保持日誌數目, error log 和 access log 將會每小時輪轉,只保持最後更新的日誌檔案以節約磁碟空間。

當前預設值為 168。Edge Admin 表單允許 4–2048。使用 EdgeLang set-access-log(max-kept:) 會覆蓋這個全域性預設值。

訪問日誌

為了提高訪問日誌的寫入速度,這裡預設開啟了緩衝區,適當調整緩衝區大小,可以在效能與資源損耗之間找到比較合適的中間值。 如果不想啟用緩衝區,可以直接把緩衝區大小設定為 0。

Stream 應用訪問日誌的 Escape 支援 none、default 和 json。日誌行將作為 JSON 字串值消費時,可以選擇 json;default 使用 Stream 日誌模組的預設轉義。

啟用 Gzip compression 後,OpenResty Edge 會在寫入日誌檔案前,對緩衝區中的訪問日誌資料進行 gzip 壓縮,從而減少日誌佔用的磁碟空間。壓縮後的訪問日誌可以使用 zcat 命令讀取。

將日誌傳送到 Syslog 伺服器

透過 Access log syslog 和 Error log syslog,可以將訪問日誌和錯誤日誌傳送到 Syslog 伺服器。這兩個配置項相互獨立,因此可以為訪問日誌和錯誤日誌指定不同的伺服器。配置示例如下:

server=127.0.0.1:514,severity=info

配置 Syslog 時無需手動指定 tag。OpenResty Edge 會根據應用協議和日誌型別自動新增對應的 tag:

應用協議訪問日誌 tag錯誤日誌 tag
HTTPoredge_http_accessoredge_http_error
Streamoredge_stream_accessoredge_stream_error

啟用 Access log syslog 後,訪問日誌將不再寫入本地日誌檔案。啟用 Error log syslog 後,錯誤日誌在傳送到 Syslog 伺服器的同時仍會寫入本地日誌檔案,以便排查問題。

注意: 目前,應用內單獨配置的訪問日誌不支援傳送到 Syslog 伺服器。Access log syslog 僅適用於由全域性配置控制的訪問日誌。

DNS

啟用 Resolve hostnames from /etc/hosts 後,Edge Node 會先使用節點上 /etc/hosts 檔案中的對映解析主機名;沒有匹配記錄時,再查詢配置的 DNS 伺服器。

OpenResty Edge 會定時重新讀取 /etc/hosts 檔案。檔案內容發生變化後,用於主機名解析的資料會自動更新,無需重新儲存全域性配置。

Gzip 壓縮

詳見 《Gzip 壓縮》

Brotli 壓縮

詳見 《Brotli 壓縮》

zstd 壓縮

詳見 《Zstandard(zstd)壓縮》

OpenTelemetry

如果要在頁面規則中啟用 OpenTelemetry,需要先在全域性配置中啟用 OpenTelemetry 的功能。

在 OpenTelemetry 這個分類中存在如下配置項:

  • Enable OpenTelemetry:啟用開關,預設是關閉。
  • OpenTelemetry Service Name:用於設定 OTel 資源的“service.name”屬性。它用來標識和區分不同的服務或應用程式。為每個服務提供一個唯一的名稱,可以幫助在分散式系統中識別特定的服務。
  • OpenTelemetry Trace Context:指定如何傳播 traceparent/tracestate 頭部。
  • OpenTelemetry Exporter Endpoint:接收 OpenTelemetry 遙測資料的 OTLP 端點的地址。
  • OpenTelemetry Exporter interval: 兩次匯出資料之間的最大間隔,預設是是 5s。
  • OpenTelemetry Exporter Batch Size: 每個工作程序 (nginx worker) 在一個批次中傳送的跨度(spans)最大數量,預設值為 512。
  • OpenTelemetry Exporter Batch Count: 每個工作程序的待處理批次數量,超過限制的跨度將被丟棄,預設值為 4。

使用 otelcol-contrib 採集資料

  1. 安裝 otelcol-contrib

    安裝 otelcol-contrib 請參考 collector installation。

  2. 配置 otelcol-contrib

    下面是一個示例檔案,該檔案中採集了 訪問日誌,錯誤日誌,連線指標,以及 trace 資訊。

    採集的資料會輸出到終端,請根據需要調整 exporters 部分。exporters 的配置可以參考 collector exporters。

receivers:
  filelog/access:
    include:
      - /usr/local/oredge-node/logs/access.log
    operators:
      - type: json_parser
        include_file_name: false

  filelog/error:
    include:
      - /usr/local/oredge-node/logs/error.log
    multiline:
      line_start_pattern: ^\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}
    operators:
      - type: regex_parser
        regex: '(?s)(?P<time>\d{4}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}) \[(?P<level>\w+)\] (?P<pid>\d+)#(?P<tid>\d+): \*(?P<connection_id>\d+) (?P<message>.*?), (?:client: (?P<client>[0-9a-f.]+), server: (?P<server>[^ ]+), request: "(?P<request>.*?)", host: "(?P<host>[0-9a-f:.]+)"|context: (?P<context>[\w.*]+))'
        timestamp:
          parse_from: attributes.time
          layout: '%Y/%m/%d %H:%M:%S'
        severity:
          parse_from: attributes.level
          preset: none
          mapping:
            debug: debug
            info: info
            info1: notice
            warn: warn
            error: error
            fatal: crit
            fatal2: alert
            fatal3: emerg

  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317

  nginx:
    endpoint: "http://127.0.0.1:8091/basic_status"
    collection_interval: 5s

processors:
  batch:

exporters:
  debug:
    verbosity: detailed

service:
  pipelines:
    logs/access:
      receivers: [filelog/access]
      processors: [batch]
      exporters: [debug]

    logs/error:
      receivers: [filelog/error]
      processors: [batch]
      exporters: [debug]

    metrics:
      receivers: [nginx]
      processors: [batch]
      exporters: [debug]

    traces:
      receivers: [otlp]
      processors: [batch]
      exporters: [debug]
  1. 啟動 otelcol-contrib 採集

    以安裝了 rpm 軟體包為例,安裝後配置檔案在 /etc/otelcol-contrib/conrig.yaml。 更新該檔案的配置,然後使用下面的命令啟動資料採集。

    注意,上面的示例檔案是輸出到終端,因此在作為後臺服務時需要修改 exporters 配置為期望的後臺服務。

    sudo systemctl enable otelcol-contrib
    sudo systemctl start otelcol-contrib
    

    如果修改了配置,需要重啟 otelcol-contrib,使用下面的命令

    sudo systemctl restart otelcol-contrib
    

Others

在 Others 類,可以設定操作日誌和應用釋出歷史的清理策略。

2. 同步選項

在通用頁面上方展示的是 同步選項,預設展示 default 分割槽,選項 Automatic Synchronization 表示當前分割槽的所有配置會自動覆蓋其他所有分割槽的配置。

當選中 Automatic Synchronization 時,只有 default 分割槽允許被修改。

取消選中 Automatic Synchronization 後,每個分割槽的修改就不會自動同步到其他分割槽,此時如果想要把當前分割槽的配置同步到其他指定分割槽,點選右上角的選項Copy to other Partitions

然後選擇要同步的分割槽,點選 copy,當前分割槽的配置就會覆蓋指定分割槽的配置。