nginx常用模組二及location配置說明
阿新 • • 發佈:2020-08-25
一、nginx常用模組
1.目錄索引模組 ngx_http_autoindex_module
1)配置
[root@web02 /etc/nginx/conf.d]# vim test.conf server { listen 80; server_name www.test.com; location / { root /code; index index.html; } location /download { root /code; index index.html; autoindex on; } }
2)優化引數
#顯示檔案大小,使用off
autoindex_exact_size off;
#顯示確切檔案修改時間
autoindex_localtime on;
2.訪問限制模組 ngx_http_access_module
[root@web02 /etc/nginx/conf.d]# vim test.conf server { listen 80; server_name www.test.com; location / { root /code; index index.html; } location /download { root /code; index index.html; autoindex on; autoindex_exact_size off; autoindex_localtime on; #allow 10.0.0.0/24; allow 10.0.0.1; deny all; } }
3.訪問控制模組
1)語法
#開啟認證控制,沒有任何作用就是為了開啟
Syntax: auth_basic string | off;
Default: auth_basic off;
Context: http, server, location, limit_except
#指定使用者認證的檔案
Syntax: auth_basic_user_file file;
Default: —
Context: http, server, location, limit_except
2)配置密碼檔案
#生成密碼檔案 [root@web02 /etc/nginx/conf.d]# htpasswd -c /etc/nginx/auth_basic lhd New password: Re-type new password: Adding password for user lhd #生成密碼,在命令列輸入密碼 [root@web02 /etc/nginx/conf.d]# htpasswd -b -c /etc/nginx/auth_basic lhd linux Adding password for user lhd #檢視 [root@web02 /etc/nginx/conf.d]# vim /etc/nginx/auth_basic lhd:$apr1$JmblF9to$jDnvQn1w7oETPYyvaL2OG.
3)配置nginx
[root@web02 /etc/nginx/conf.d]# cat test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 10.0.0.1;
deny all;
auth_basic "輸入使用者名稱和密碼";
auth_basic_user_file /etc/nginx/auth_basic;
}
}
4)新增多使用者
#不新增-c引數可以新增多個使用者
[root@web02 /etc/nginx/conf.d]# htpasswd /etc/nginx/auth_basic lhd
New password:
Re-type new password:
Adding password for user lhd
[root@web02 /etc/nginx/conf.d]# vim /etc/nginx/auth_basic
qiudao:$apr1$UL89inf6$.59e04v5ILGHpkMs2xZzF.
lhd:$apr1$9fOQ/hLl$DEugqKzv.0SNBziFMLdVZ1
4.nginx狀態模組
1)語法
Syntax: stub_status;
Default: —
Context: server, location
2)配置
[root@web02 /etc/nginx/conf.d]# cat test.conf
server {
listen 80;
server_name www.test.com;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 10.0.0.1;
deny all;
auth_basic "輸入使用者名稱和密碼";
auth_basic_user_file /etc/nginx/auth_basic;
}
location /status {
stub_status;
}
}
3)狀態頁
#訪問 http://www.test.com/status
#返回內容
Active connections: 2
server accepts handled requests
2 2 1
Reading: 0 Writing: 1 Waiting: 1
#nginx七種狀態
Active connections #活躍的連線數
accepts #接受的TCP連線數
handled #已處理的TCP連線數
requests #請求數
Reading #讀取的請求頭的數量
Writing #響應的請求頭的數量
Waiting #等待的請求數量
#可以用作監控日PV
[root@web02 /etc/nginx/conf.d]# curl -s http://www.test.com/status | awk 'NR==3 {print $3}'
5.連線限制模組 ngx_http_limit_conn_module
1)語法
#設定限制的空間
Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http
limit_conn_zone #呼叫限制模組
key #儲存的內容
zone= #空間
name: #空間的名字
size; #空間的大小
#呼叫空間
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
limit_conn #呼叫空間
zone #空間名字
number; #同一個資訊可以儲存的次數
2)配置
[root@web02 /etc/nginx/conf.d]# cat test.conf
limit_conn_zone $remote_addr zone=conn_zone:1m;
server {
listen 80;
server_name www.test.com;
limit_conn conn_zone 1;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 10.0.0.1;
deny all;
auth_basic "輸入使用者名稱和密碼";
auth_basic_user_file /etc/nginx/auth_basic;
}
location /status {
stub_status;
}
}
6.請求限制模組
1)語法
#設定請求限制的空間
Syntax: limit_req_zone key zone=name:size rate=rate [sync];
Default: —
Context: http
limit_req_zone #呼叫模組
key #空間儲存的內容
zone= #指定空間
name: #空間的名字
size #空間的大小
rate=rate; #讀寫速率
#呼叫空間
Syntax: limit_req zone=name [burst=number] [nodelay | delay=number];
Default: —
Context: http, server, location
limit_req #呼叫空間
zone=name #指定空間名字
[burst=number] #擴充套件
[nodelay | delay=number]; #延時
2)配置
[root@web02 /etc/nginx/conf.d]# cat test.conf
limit_conn_zone $remote_addr zone=conn_zone:1m;
limit_req_zone $remote_addr zone=req_zone:1m rate=1r/s;
server {
listen 80;
server_name www.test.com;
limit_conn conn_zone 1;
limit_req zone=req_zone;
location / {
root /code;
index index.html;
}
location /download {
root /code;
index index.html;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
allow 10.0.0.1;
deny all;
auth_basic "輸入使用者名稱和密碼";
auth_basic_user_file /etc/nginx/auth_basic;
}
location /status {
stub_status;
}
}
3)測試請求限制
[root@web02 /etc/nginx/conf.d]# ab -n 200 -c 2 http://www.test.com/
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.test.com (be patient)
Completed 100 requests
Completed 200 requests
Finished 200 requests
Server Software: nginx/1.18.0
Server Hostname: www.test.com
Server Port: 80
Document Path: /
Document Length: 13 bytes
Concurrency Level: 2
Time taken for tests: 0.036 seconds
Complete requests: 200
Failed requests: 199
(Connect: 0, Receive: 0, Length: 199, Exceptions: 0)
Write errors: 0
Non-2xx responses: 199
Total transferred: 73674 bytes
HTML transferred: 39216 bytes
Requests per second: 5492.24 [#/sec] (mean)
Time per request: 0.364 [ms] (mean)
Time per request: 0.182 [ms] (mean, across all concurrent requests)
Transfer rate: 1975.76 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.8 0 12
Processing: 0 0 0.6 0 4
Waiting: 0 0 0.5 0 4
Total: 0 0 1.0 0 12
Percentage of the requests served within a certain time (ms)
50% 0
66% 0
75% 0
80% 0
90% 0
95% 0
98% 4
99% 4
100% 12 (longest request)
[root@web02 /etc/nginx/conf.d]#
二、nginx的location配置
使用Nginx Location可以控制訪問網站的路徑,但一個server可以有多個location配置, 多個location的優先順序該如何區分
1.location語法
Syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
Default: —
Context: server, location
2.location匹配符
匹配符 | 匹配規則 | 優先順序 |
---|---|---|
= | 精確匹配 | 1 |
^~ | 以某個字串開頭 | 2 |
~ | 區分大小寫的正則匹配 | 3 |
~* | 不區分大小寫的正則匹配 | 3 |
/ | 通用匹配,任何請求都會匹配到 | 4 |
3.優先順序驗證
[root@web02 /etc/nginx/conf.d]# cat location.conf
server {
listen 80;
server_name www.location.com;
#location / {
# default_type text/html;
# return 200 "location /";
#}
location =/ {
default_type text/html;
return 200 "location =/";
}
location ~* / {
default_type text/html;
return 200 "location ~* /";
}
location ^~ / {
default_type text/html;
return 200 "location ^~";
}
}
4.location應用場景
#通用匹配,任何請求都會匹配到
location / {
...
}
#嚴格區分大小寫,匹配以.php結尾的都走這個location
location ~ \.php$ {
...
}
#嚴格區分大小寫,匹配以.jsp結尾的都走這個location
location ~ \.jsp$ {
...
}
#不區分大小寫匹配,只要使用者訪問.jpg,gif,png,js,css結尾的都走這條location
location ~* .*\.(jpg|gif|png|js|css)$ {
...
}
#不區分大小寫匹配
location ~* "\.(sql|bak|tgz|tar.gz|.git)$" {
...
}
三、LNMP架構
1.簡介
LNMP是一套技術的組合,L=Linux、N=Nginx、M~=MySQL、P~=PHP
不僅僅包含這些,還有redis/ELK/zabbix/git/jenkins/kafka
2.LNMP工作方式
首先Nginx服務是不能處理動態請求,那麼當用戶發起動態請求時, Nginx又是如何進行處理的。
1.靜態請求:請求靜態檔案的請求
靜態檔案:
1)上傳時什麼樣子,檢視時就是什麼樣子
2)html的頁面都是靜態的
2.動態請求:請求動態內容,帶引數的請求
1)伺服器上並不是真實存在的,需要都資料庫等服務上去獲取資料,組成的頁面
當用戶發起http請求,請求會被Nginx處理,如果是靜態資源請求Nginx則直接返回,如果是動態請求Nginx則通過fastcgi協議轉交給後端的PHP程式處理,具體如下圖所示
1.訪問流程
1.瀏覽器輸入域名,瀏覽器拿著域名取DNS伺服器解析
2.DNS伺服器解析域名為IP
3.瀏覽器去請求該IP對應的伺服器
4.瀏覽器請求nginx
5.nginx判斷請求是動態請求還是靜態請求
#靜態請求
location / {
root /code;
index index.html;
}
#動態請求
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
... ...
}
6.如果是靜態請求,nginx直接返回內容
7.如果是動態內容,nginx會通過fastcgi協議找php-fpm管理程序
8.php-fpm管理程序會去下發工作給wrapper工作程序
9.wrapper工作程序判斷是不是php檔案
10.如果只是php檔案,可以直接解析然後返回結果
11.如果還需要讀取資料庫,wrapper程序會去讀取資料庫資料,然後返回資料