Web進階Nginx常用模組
阿新 • • 發佈:2021-08-07
Web進階Nginx常用模組
Web進階Nginx常用模組
Nginx 目錄索引模組:ngx_http_autoindex_module
目錄索引模組簡述
ngx_http_autoindex_module 模組處理以斜槓字元('/')結尾的請求,並生成目錄列表。
當ngx_http_index_module 模組找不到索引檔案時,通常會將請求傳遞給 ngx_http_autoindex_module 模組。
autoindex語法
Syntax: autoindex on | off; Default: autoindex off; Context: http, server, location 例: server{ # 監聽80埠 listen 80; # 指定訪問的域名 server_name game.drz.com; # 配置URL location / { # 站點目錄 root /code/h5_games; # 指定主頁面 autoindex on; } }
autoindex的優化
server{ # 監聽80埠 listen 80; # 指定訪問的域名 server_name game.drz.com; # 配置URL location / { # 站點目錄 root /code/h5_games; # 指定主頁面 autoindex on; ## 修改時間為當前系統時間(不使用格林威治時間) autoindex_localtime on; ## 顯示檔案大小(顯示單位) autoindex_exact_size off; } }
Nginx的狀態模組:ngx_http_stub_status_module
ngx_http_stub_status_module
模組提供對基本狀態資訊的訪問。
預設情況下不構建此模組,應使用--with-http_stub_status_module
配置引數啟用它
配置
Syntax: stub_status;
Default: —
Context: server, location
配置Nginx status示例
狀態模組,需要配置URL server{ # 監聽80埠 listen 80; # 指定訪問的域名 server_name game.drz.com; # 配置URL location / { # 站點目錄 root /code/h5_games; # 指定主頁面 autoindex on; ## 修改時間為當前系統時間(不使用格林威治時間) autoindex_localtime on; ## 顯示檔案大小(顯示單位) autoindex_exact_size off; } location /nginx_status { ## 開啟 stub_status; } }
Active connections # 當前活動的連線數
accepts # 當前的總連線數TCP
handled # 成功的連線數TCP
requests # 總的http請求數
Reading # 請求
Writing # 響應
Waiting # 等待的請求數,開啟了keepalive
# 注意, 一次TCP的連線,可以發起多次http的請求, 如下引數可配置進行驗證
keepalive_timeout 0; # 類似於關閉長連線
keepalive_timeout 65; # 65s沒有活動則斷開連線
Nginx訪問控制模組
- 基於IP的訪問控制
http_access_module
## 配置方法(通常allow和deny一起使用)
location / {
#允許訪問
allow IP或者網段;
# 拒絕訪問
deny IP或者網段,all;
}
例:
location / {
## 允許單個IP訪問
allow 10.0.0.1;
## 允許一個網段訪問
allow 10.0.0.0/24;
## 拒絕所有
deny all;
}
- 基於使用者登陸認證
http_auth_basic_module
## 頁面需要使用者認證,使用htpasswd命令
# 1.安裝httpd-tools工具
[root@web02 auth]# yum install -y httpd-tools
# 2.建立認證使用者目錄
[root@web02 auth]# mkdir /etc/nginx/auth
# 3.建立一個使用者名稱和密碼
[root@web02 auth]# htpasswd -b -c /etc/nginx/auth/zls_auth zls 123
Adding password for user zls
location /cc {
root /code/auth;
index index.html;
auth_basic "ruozhi ni cai bu dao";
auth_basic_user_file /etc/nginx/auth/zls_auth;
}
htpasswd -b -c 密碼檔案路徑 使用者名稱 密碼
-c建立新檔案
-b允許命令列輸入密碼
Nginx的訪問限制模組
在企業中經常會遇到這種情況,伺服器流量異常,負載過大等等。對於大流量惡意的攻擊訪問, 會帶來頻寬的浪費,伺服器壓力,影響業務,往往考慮對同一個ip的連線數,請求數、進行限制。
ngx_http_limit_conn_module 模組可以根據定義的key來限制每個鍵值的連線數,如同一個IP來源的連線數。
limit_conn_module 連線頻率限制
limit_req_module 請求頻率限制
- ngx_http_limit_conn_module (限制連線數)
http{
...
## http層設定,針對遠端的IP開闢一塊記憶體空間,空間名稱=zls_zone:空間大小1m
limit_conn_zone $remote_addr zone=zls_zone:1m;
...
server{
...
## server層呼叫,允許同時最高2個IP訪問
limit_conn zls_zone 2;
...
}
}
- ngx_http_limit_req_module (限制請求頻率)
http{
...
## 請求頻率限制
limit_req_zone $binary_remote_addr zone=suibian:1m rate=1r/s;
...
server{
...
location / {
limit_req zone=suibian burst=2 nodelay;
}
}
}
## http層設定
[root@web02 conf.d]# cat /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
## 連線數限制
limit_conn_zone $remote_addr zone=zls_zone:1m;
## 請求頻率限制
limit_req_zone $binary_remote_addr zone=suibian:1m rate=1r/s;
include /etc/nginx/conf.d/*.conf;
}
## server層或者location層呼叫
[root@web02 conf.d]# cat /etc/nginx/conf.d/game.drz.com.conf
server{
# 監聽80埠
listen 80;
# 指定訪問的域名
server_name game.drz.com;
limit_req zone=suibian burst=2 nodelay;
# 配置URL
location / {
# 站點目錄
root /code/h5_games;
# 指定主頁面
autoindex on;
autoindex_localtime on;
autoindex_exact_size off
}
location /aa {
stub_status;
allow 10.0.0.1;
deny all;
}
location /bb {
default_type text/html;
return 200 "tz";
}
location /cc {
root /code/auth;
index index.html;
auth_basic "ruozhi ni cai bu dao";
auth_basic_user_file /etc/nginx/auth/zls_auth;
}
}
Nginx Location
使用Nginx Location
可以控制訪問網站的路徑,但一個server
可以有多個location
配置, 多個location
的優先順序該如何區分。
Location語法優先順序排列
匹配符 | 匹配規則 | 優先順序 |
---|---|---|
= | 精確匹配 | 1 |
^~ | 以某個字串開頭 | 2 |
~ | 區分大小寫的正則匹配 | 3 |
~* | 不區分大小寫的正則匹配 | 4 |
!~ | 區分大小寫不匹配的正則 | 5 |
!~* | 不區分大小寫不匹配的正則 | 6 |
/ | 通用匹配,任何請求都會匹配到 | 7 |