Nginx - 最小配置

白菜1031發表於2022-02-14

安全伺服器是隻允許所需數量的伺服器。理想情況下,我們將通過單獨啟用其他功能來基於最小系統構建伺服器。進行最少的配置也有助於除錯。如果該錯誤在最小系統中不可用,則分別新增功能,然後繼續搜尋錯誤。

這是執行nginx所需的最低配置:

# /etc/nginx/nginx.confevents {}         # event context have to be defined to consider config validhttp {
server {
  listen 80;
  server_name  javatpoint.co  www.javatpoint.co  *.javatpoint.co;

  return 200 "Hello";
}

Root,Location和try_files指令

Root 指令

root指令用於設定請求的根目錄,從而允許nginx將傳入的請求對映到檔案系統上。

server {
  listen 80;
  server_name javatpoint.co;
  root /var/www/javatpoint.co;
}

它允許nginx根據請求返回伺服器內容:

javatpoint.co:80/index.html     # returns /var/www/learnfk.com/index.html
javatpoint.co:80/foo/index.html # returns /var/www/learnfk.com/foo/index.html

Location指令

location指令用於根據請求的URI(統一資源識別符號)來設定配置。

語法為:

location [modifier] path

示例:

location /foo {
  # ...
}

如果未指定修飾符,則將路徑視為字首,之後可以跟隨任何內容。上面的示例將匹配:

/foo
/fooo
/foo123
/foo/bar/index.html
...

我們還可以在給定的上下文中使用多個location指令:

server {
  listen 80;
  server_name javatpoint.co;
  root /var/www/javatpoint.co;

  location/{
    return 200 "root";
  }

  location /foo {
    return 200 "foo";
  }
}
javatpoint.co:80  /      # => "root"
javatpoint.co:80   /foo    # => "foo"
javatpoint.co:80   /foo123 # => "foo"
javatpoint.co:80   /bar    # => "root"

Nginx還提供了一些可以與 location 指令結合使用的修飾符。

修飾符已分配優先順序:

=           - Exact match
^~          - Preferential match
~ && ~*     - Regex match
no modifier - Prefix match

首先,nginx將檢查所有精確匹配項。如果不存在,它將尋找優先選項。如果此匹配也失敗,則將按其出現順序測試正規表示式匹配。如果其他所有操作均失敗,則將使用最後一個字首匹配。

location /match {
  return 200 'Prefix match: will match everything that starting with /match';
}

location ~* /match[0-9] {
  return 200 'Case insensitive regex match';
}

location ~ /MATCH[0-9] {
  return 200 'Case sensitive regex match';
}

location ^~ /match0 {
  return 200 'Preferential match';
}

location = /match {
  return 200 'Exact match';
}
/match     # => 'Exact match'
/match0    # => 'Preferential match'
/match1    # => 'Case insensitive regex match'
/MATCH1    # => 'Case sensitive regex match'
/match-abc # => 'Prefix match: matches everything that starting with /match'

try_files指令
該指令嘗試不同的路徑,並返回找到的任何路徑。

try_files $uri index.html =404;

因此,/foo.html將嘗試按以下順序返回檔案:

$uri(/foo.html);

index.html

如果未找到:404

如果我們在伺服器上下文中定義try_files,然後定義查詢所有請求的位置,則不會執行try_files。發生這種情況是因為伺服器上下文中的try_files定義了其偽位置,該偽位置是可能的最低特定位置。因此,定義location/ 會比我們的偽位置更具體。

server {
  try_files $uri /index.html =404;

  location/{
  }
}

因此,我們應該避免在伺服器上下文中使用try_files:

server {
  location/{
    try_files $uri /index.html =404;
  }
}
來源:https://www.imooc.com/article...