這裡介紹如何設定 NGINX 網頁伺服器,加上密碼認證與限制可存取的 IP 位址,並控制頻寬與連線數。

在 NGINX 伺服器中若要限制只有特定的使用者可以瀏覽網頁的話,可以使用帳號與密碼認證的方式,或是設定可存取網頁的來源 IP 位址,以下是設定的步驟教學。

NGINX 帳號與密碼認證

auth_basic 可以啟用 HTTP Basic Authentication,讓使用者透過帳號與密碼進行認證,而儲存帳號與密碼的檔案則是使用 auth_basic_user_file 來指定:

location / {
  auth_basic           "closed site";
  auth_basic_user_file conf/htpasswd;
}

auth_basic_user_file 所指定的帳號與密碼檔案格式如下:

# 這是註解
name1:password1
name2:password2:這是註解
name3:password3

而密碼的部分要先經過編碼,可以使用 Apache 所提供的 htpasswd 指令來產生,或是使用 openssl

openssl passwd

執行這行指令之後,再輸入兩次要設定的密碼,就會產生經過編碼的密碼,例如 12345 經過編碼後會像這樣:

A5F0pZqTMG1ks

再把這個經過編碼的密碼放進帳號與密碼的檔案中,

gtwang:A5F0pZqTMG1ks

這樣就新增了一個 gtwang 帳號,而密碼為 12345

如果要整個網站都受到帳號與密碼的保護,但開放一些特定目錄可以不需要帳號與密碼,則可以在不需要帳號與密碼的路徑中把 auth_basic 設定為 off

server {
  auth_basic "closed website";
  auth_basic_user_file conf/htpasswd;

  location /public/ {
      auth_basic off;
  }
}

這樣使用者在瀏覽所有 /public/ 之下的網頁都不需要輸入帳號與密碼。

NGINX 限制可存取的 IP 位址

allowdeny 可以設定允許與禁止存取網頁的來源 IP 位址,設定的方式跟 Apache 一樣,列在上方的規則會優先執行:

location / {
  deny  192.168.1.2;
  allow 192.168.1.1/24;
  allow 127.0.0.1;
  deny  all;
}

這樣的設定會禁止 192.168.1.2 這個來源 IP 位址存取網頁,並允許其它所有 192.168.1.1/24 網段的 IP 位址的存取,另外也允許本機(127.0.0.1)存取,除了上述的來源之外,一律禁止存取。

除了 IPv4 之外,也可以使用 IPv6,用法皆相同:

location / {
  deny  192.168.1.1;
  allow 192.168.1.0/24;
  allow 10.1.1.0/16;
  allow 2001:0db8::/32;
  deny  all;
}

接下來要介紹 NGINX 的頻寬與連線數控制,請繼續閱讀下一頁。