1. 程式人生 > 其它 >Web進階Nginx常用模組

Web進階Nginx常用模組

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