一、Nginx部署-yum
1、官網鏈接
http://www.nginx.org
2、Nginx版本型別
Mainline version: 主線版,即開發版
Stable version: 最新穩定版,生產環境上建議使用的版本
Legacy versions: 遺留的老版本的穩定版
3、配置yum源

4、安裝

測驗:

二、nginx組態檔
這個在前面的文章里面已經介紹過,這里不再重復介紹,
三、nginx編譯引數
同上,
四、nginx基本引數
1、觀察主組態檔
① 分類
CoreModule 核心模塊(行程數等)
EventsModule 事件驅動模塊(作業模式等)
HttpCoreModule http內核模塊 (檔案程式型別,組態檔等)
② 模塊功能
1、全域/核心塊:配置影響nginx全域的指令,一般有運行nginx服務器的用戶組,nginx行程pid存放路徑,日志存放路徑,組態檔引入,允許生成worker process數等,
2、events塊:配置影響nginx服務器或與用戶的網路連接,有每個行程的最大連接數,選取哪種事件驅動模型處理連接請求,是否允許同時接受多個網路連接,開啟多個網路連接序列化等,
3、http塊:可以嵌套多個server,配置代理,快取,日志定義等絕大多數功能和第三方模塊的配置,如檔案引入,mime-type定義,日志自定義,是否使用sendfile傳輸檔案,連接超時時間,單連接請求數等,
4、server塊:配置虛擬主機的相關引數,一個http中可以有多個server,
5、location塊:配置請求的路由,以及各種頁面的處理情況,
2、vim /etc/nginx/nginx.conf
user nginx;
運行nginx程式的獨立賬號
worker_processes 1;
啟動的worker行程數量(CPU數量一致或auto)
error_log /var/log/nginx/error.log warn;
錯誤日志存放位置
pid /var/run/nginx.pid;
events {
事件
use epoll;
事件驅動模型epoll【默認】
事件驅動模型分類,select|poll|kqueue|epoll|resig|/dev/poll|eventport
worker_connections 10240;
//每個worker行程允許處理的最大連接數,例如10240,65535
}
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;
優化引數
高效傳輸檔案的模式
Nginx高級篇sendfile配置
sendfile: 設定為on表示啟動高效傳輸檔案的模式,sendfile可以讓Nginx在傳輸檔案時直接在磁盤和tcp socket之間傳輸資料,如果這個引數不開啟,會先在用戶空間(Nginx行程空間)申請一個buffer,用read函式把資料從磁盤讀到cache,再從cache讀取到用戶空間的buffer,再用write函式把資料從用戶空間的buffer寫入到內核的buffer,最后到tcp socket,開啟這個引數后可以讓資料不用經過用戶buffer,
#tcp_nopush on;
優化引數
也就是說tcp_nopush = on 會設定呼叫tcp_cork方法,這個也是默認的,結果就是資料包不會馬上傳送出去,等到資料包最大時,一次性的傳輸出去,這樣有助于解決網路堵塞,
keepalive_timeout 65;
優化引數
長連接
#gzip on;
壓縮引數
include /etc/nginx/conf.d/*.conf;
包含子組態檔夾
3、觀察默認虛擬主機組態檔
vim /etc/nginx/conf.d/default.conf
vim /etc/nginx/conf.d/default.conf
server {
默認網站組態檔
listen 80;
監聽埠
server_name localhost;
FQDN
#charset koi8-r;
網頁字符型別
#access_log /var/log/nginx/host.access.log main;
日志
location / {
root /usr/share/nginx/html;
主目錄
index index.html index.htm;
默認主頁名
}
#error_page 404 /404.html;
錯誤頁面
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
錯誤頁面
location = /50x.html {
錯誤頁面
root /usr/share/nginx/html;
錯誤頁面主目錄
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
代理設定
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
動態網站設定
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
訪問控制部分
# concurs with nginx's one
#location ~ /\.ht {
# deny all;
#}
}
4、啟動一個新的虛擬主機
① 啟動一個新的虛擬主機
vim /etc/nginx/conf.d/xuleilinux.conf
server {
listen 80;
server_name xuleilinux.com;
location / {
root /xuleilinux;
index index.html ;
}
}
server 虛擬主機
listen 監聽埠
server_name 服務器名稱
location 網站目錄設定
root 網站主目錄在本地的路徑
index 主頁檔案名
http{} 是整個服務器,所有虛擬主機的設定,
server{}是某一個虛擬主機的設定
location{} 是某一個頁面的設定,
mkdir /xuleilinux
echo 美男子 > /xuleilinux/index.html
② 重啟服務
③ 域名決議和訪問
五、nginx日志log
1、日志配置
日志模塊
日志模塊的名稱:
ngx_http_log_module
相關的指令
log_format:日志格式
access_log:訪問日志
error_log:錯誤日志
open_log_file_cache:日志快取
ps:日志快取
open_log_file_cache max=N [inactive=time] [mim_uses=N] [valid=time] | off
該指令默認是禁止的,等同于:
open_log_file_cache off;
open_log_file_cache 指令的各項引數說明如下:
max: 設定快取中的最大檔案描述符數量,如果超過設定的最大檔案描述符數量,則采用 LRU (Least Recently Used) 演算法清除"較不常使用的檔案描述符", LRU (Least Recently Used) 算 法的基本概念是:當記憶體緩沖區剩余的可用空間不夠時,緩沖區盡可能地先保留使用者最常使用 的資料,將最近未使用的資料移出記憶體,騰出空間來加載另外的資料,
inactive: 設定一個時間,如果在設定的時間內沒有使用此檔案描述符,則自動洗掉此描述符, 此引數為可選引數,默認的時間為 10 秒鐘,
min_uses: 在引數 inactive 指定的時間范圍內,如果日志檔案超過被使用的次數,則將該日 志檔案的描述符記入快取,默認次數為 1,
valid: 設定多長時間檢查一次,看一看變數指定的日志檔案路徑與檔案名是否仍然存在,默 認時間為 60秒,
off: 禁止使用快取,
open_log_file_cache 指令的設定示例如下:
open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m,
日志的格式和命令
log_format
Nginx有非常靈活的日志記錄模式,每個級別的配置可以有各自獨立的訪問日志,日志格式通過log_format命令定義,
語法
Syntax: log_format name [escape=default|json] string ...;
name 表示格式名稱
string 表示定義的格式
默認值
Default: log_format combined "...";
log_format 有默認的無需設定的combined日志格式,相當于apache的combined日志格式
環境
Context: http context
1、網站代理
LB:
例如代理服務器的日志格式就不同
如果Nginx位于負載均衡器,squid,nginx反向代理之后,web服務器無法直接獲取到客戶端真實的IP地址,
$remote_addr獲取的是反向代理的IP地址,反向代理服務器在轉發請求的http頭資訊中,可以增加X-Forwarded-For資訊,
用來記錄客戶端IP地址和客戶端請求的服務器地址,
nginx代理日志格式如下
log_format porxy '$http_x_forwarded_for - $remote_user [$time_local] '
' "$request" $status $body_bytes_sent '
' "$http_referer" "$http_user_agent" ';
2、全域和區域
定義設定位置
vim /etc/nginx/nginx.conf

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
日志格式允許包含的變數
$remote_addr 遠程地址,記錄客戶端ip地址
$remote_user 遠程用戶,記錄客戶端用戶名稱
[$time_local] 本地時間,服務器自身的時間
$request 請求,記錄請求的url和http協議 get/post
$ststus 狀態,記錄請求狀態 200/404/503/100/301
$body_bytes_sent 發送給客戶端的位元組數,不包括回應頭的大小
$http_referer 記錄從哪個頁面鏈接訪問過來的(超鏈接)
$http_user_agent 記錄客戶端瀏覽器相關資訊 火狐/ie
$http_x_forwarded_for 代理ip
old
$request_length
請求的長度(包括請求行,請求頭和請求正文),
$request_time
請求處理時間,單位為秒,精度毫秒; 從讀入客戶端的第一個位元組開始,直到把最后一個字符發送給客戶端后進行日志寫入為止,
$time_iso8601
ISO8601標準格式下的本地時間,
$bytes_sent
發送給客戶端的總位元組數 (可在主組態檔中,增加此項觀c)
$msec
日志寫入時間,單位為秒,精度是毫秒,
訪問日志和錯誤日志
access_log (日志)
某條日志記錄
192.168.100.254 - - [17/Dec/2017:14:45:59 +0800] "GET /nginx-logo.png HTTP/1.1" 200 368 "http://192.168.100.10/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
某條日志記錄含義
192.遠程主機IP
- - 用戶
【2017】時間
get獲得,下載,還有post提交,
/nginx-logo.png 下載圖片
http版本
狀態碼 什么結果,對,還是錯
368 大小
參考自哪個連接,主頁http://192.168.100.10/
Mozilla 5.0瀏覽器的版本
Windows NT 客戶端系統型別
-遠程客戶端主機地址 (請看注釋)
error_log (錯誤日志)
個性化404
1、修改主組態檔
server{
error_page 404 /404.html;
location = /404.html {
root /xuleilinux;
}
}
systemctl restart nginx
2、創建錯誤反饋頁面
vim /nihaolinux/404.html
3 、訪問
訪問不存在的頁面
4、查看404日志
觀察404頁面的現象,
日志快取
大量訪問到來時,對于每一條日志記錄,都將是先打開檔案,再寫入日志,然后關閉.占用了系統的IO,與業務無關,可以使用open_log_file_cache來設,
Syntax:
open_log_file_cache max=1000 inactive=20s min_uses=3 valid=1m ;
max 1000 指的是日志檔案的FD,最大的快取數量為1000,超了怎么辦,看下面
min_users 3 20秒內小于3次訪問的FD,就給你清掉,結合inactive 20s 的時間,
valid 1m 檢查周期為1分鐘,
總結:快取最多1000個,到了極限,每分鐘開始清除掉 20秒內小于3次的檔案FD.
Default:
open_log_file_cache off;
Context:
http, server, locatition
http{} 將整個服務器所有網站,所有頁面的日志進行快取
server{} 將某一個網站的所有頁面日志,進行快取
location{}某一個頁面的日志,進行快取,
2、日志輪轉 切割
前言
Nginx安裝,會默認啟動日志輪轉,
rpm -ql nginx| grep log
/etc/logrotate.d/nginx
/var/log/nginx

輪轉陳述句
指令 /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
八、Nginx Web模塊
1、隨機主頁
random_index_module
目的:將主頁設定成隨機頁面,是一種微調更新機制,
啟動隨機主頁:
① 創建主頁目錄
mkdir /app
② 創建多個主頁
touch /app/{blue.html,green.html,red.html,.yellow.html}
//在不同的頁面書寫不同的內容,例子如下:
<html>
<head>
<title>green color</title>
</head>
<body style="background-color:green">
<h1>green color!</h1>
</body>
</html>
//想要改變不同的顏色,只需要把顏色的英文改成其他顏色的英文就可以,
③ 啟動隨機主頁
vim /etc/nginx/conf.d/default.conf
server{
location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
root /app;
random_index on;
}
}
//在子組態檔里的默認檔案的server模塊的location里改成以上的配置,
記得重啟服務,重繪網站主頁,觀察變化,
完成該試驗后,請注釋掉該功能,避免影響其他實驗,隱藏檔案不會被隨機選取,
2、替換模塊
sub_mudule
目的:頁面內容替換,如果我們用模板生成網站的時候,因為疏漏或者別的原因造成代碼不如意,但是此時因為檔案數量巨大,不方便全部重新生成,那么這個時候我們就可以用此模塊來暫時實作糾錯,另一方面,我們也可以利用這個實作服務器端文字過濾的效果,
啟動替換
vim /etc/nginx/conf.d/deffault.conf //啟動nginx默認頁面
server{ //在server下插入
sub_filter nginx 'my homepage';
sub_filter_once on;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
ps:替換模塊,將nginx替換成my homepage單次替換開啟,

將單次替換關閉,再次重繪頁面,即可看見全文替換,
sub_filter_once off;

3、檔案讀取
ngx_http_croe_module
語法:
Syntax: sendfile on | off;
Default: sendfile on;
Context: http,server,location,if in location
Syntax: tcp_nopush on | off;
Default: tcp_nopush off;
Context: http,server,location
Syntax: tcp_nodelay on | off;
Default: tcp_nodelay on;
Context:http,server,location
三個部分的原理介紹
① senfile (發送檔案)
未使用senfile()的傳統網路傳輸的程序:
硬碟 >> kernel buffer >> user buffer>> kernel socket buffer >>協議堆疊
使用sendfile()來進行網路傳輸的程序:
硬碟 >> kernel buffer (快速拷貝到kernelsocket buffer) >>協議堆疊
ps:減少了一次copy的程序,sendfile()不但能減少切換次數而且還能減少拷貝次數,
② tcp_nopush
未使用tcp_nopush網路資源浪費:
應用程式每產生一次操作就會發送一個包,而典型情況下一個包會擁有一個位元組的資料以及40個位元組長的包頭,于是產生4000%的過載,很輕易地就能令網路發生擁塞,同時也浪費資源,
使用tcp_nopush網路傳輸速率提升:
當包累計到一定大小后再發送,
③ tcp_nodelay
開啟或關閉nginx使用TCP_NODELAY選項的功能, 這個選項僅在將連接轉變為長連接的時候才被啟用,
TCP_NODELAY是禁用Nagle演算法,即資料包立即發送出去,
由于Nagle和DelayedACK的原因,資料包的確認資訊需要積攢到兩個時才發送,長連接情況下,奇數包會造成延時40ms,所以tcp_nodelay會將ack立刻發出去, 如果不在長連接時,可以關閉此模塊,因為ack會被立刻發出去,
啟用模塊
location /video/ {
sendfile on;
tcp_nopush on;
}
默認啟動,無需驗證,
4、檔案壓縮
啟動該模塊,使檔案傳輸前進行壓縮,提升傳輸效率,
模塊
ngx_http_gzip_module
語法
Syntax: gzip on | off;
Default: gzip off;
Context: http, server, location, if in location
Syntax: gzip_comp_level level;
Default: gzip_comp_level 1;(1~9)
Context: http, server, location
Syntax: gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location
啟用模塊
① 觀察未壓縮傳輸
拷貝圖片至網站主目錄

拷貝tar包至檔案主目錄

拷貝文本至檔案主目錄

通過瀏覽器下載檔案并觀察下載后大小,
② 啟用壓縮功能
http { //在http標簽中啟動該功能
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_static on;
gzip_static on;# nginx對于靜態檔案的處理模塊
systemctl restart nginx
③ 觀察壓縮傳輸
注意快取
壓縮包和圖片類物件本身已經自帶壓縮功能,所以壓縮比例較小低,
文本類物件在壓縮試驗中,壓縮比例體現優越,
再通過瀏覽器下載檔案并觀察下載后大小,
5、頁面快取
模塊
ngx_http_headers_module
expires起到控制頁面快取的作用,合理的配置expires可以減少很多服務器的請求要配置expires,可以在http段中或者server段中或者location段中加入,
Nginx(expires快取減輕服務端壓力)
語法
Syntax: expires [modified] time;
expires epoch | max | off;
Default: expires off;
Context: http, server, location, if in location
epoch:指定“expires”的值為1 January,1970,00:00:01 GMT
max:指定“expires”的值為10年
-1:指定“expires”的值為當前服務器時間-1s,即永遠過期,
off:不修改“expires”和“Cache-control”的值
原理介紹
無快取,每次訪問服務器,均是全文傳輸,開啟快取可以加速瀏覽網站,
啟用快取
① 觀察瀏覽器快取
開啟瀏覽器快取,瀏覽頁面,(默認)
第一次回傳狀態碼200,頁面物件全文傳輸
第二次回傳狀態304,頁面物件部分傳輸
禁用快取,瀏覽頁面
回傳碼200,全文傳輸
理解瀏覽器快取作用
決議快取原理

② 理解nginx服務器快取
開啟服務器快取模塊
vim /etc/nginx/nginx.conf
location / {
root /usr/share/nginx/html
index index.html index.htm;
expires 24h;
}
再次瀏覽頁面,觀察回應頭中出現服務器回復的快取時間

理解nginx服務器啟動快取時間,加速瀏覽,
缺點是時效性降低,
6、防盜鏈
模塊
ngx_http_referer_module
語法
Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
日志原理介紹
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';日志格式中的http_referer是記錄,訪問點參考的URL,也就是超鏈接的上一級地址,
通過這段地址,可以發現一種網路行為——盜鏈,非法盜鏈會影響站點的正常訪問,
通過http_referer模塊可以控制這一點,防止非法盜鏈現象,
啟用防盜鏈
① 搭建一個a.com網站
mkdir /a.com //準備一個檔案夾
vim /etc/nginx/conf.d/a.com.conf //準備一個組態檔來指向這個檔案
server {
listen 80;
server_name a.com;
location / {
root /a.com
index index.html;
}
} //保存退出
vim /a.com/index.html
<img src='1.jpg' />
注意要將1.jpg圖片拷貝至網站主目錄,
在個人主機上做好域名決議,
② 搭建一個b.com網站
在主頁中盜鏈A網站的圖片
vim index.html
<img src='http://A網站的域名或者地址/1.jpg' />
盜用鏈接
注意網站主目錄中,根本沒有圖片,
③ 訪問兩個網站頁面,均能正常顯示圖片,
④ 注意b網站的日志
日志正常
192.168.100.254 - - [20/Sep/2017:15:10:27 +0800] "GET / HTTP/1.1" 200 42 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "-"
⑤ 注意a網站的日志
日志不正常,日志莫名其妙的產生了,觀察referer欄位,發現被盜鏈了,
192.168.100.254 - - [20/Sep/2017:15:10:27 +0800] "GET /1.jpg HTTP/1.1" 200 1635350 "http://192.168.100.20/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0"
⑥ 啟動a.com防盜鏈功能
location / {
root /a.com;
index index.html index.htm;
valid_referers none blocked *.a.com;
if ($invalid_referer) {
return 403;
}
}
重啟服務
⑦ 再次訪問b.com網站,盜鏈失敗,
⑧ 如果希望某些網站能夠使用(盜鏈)資源:
location ~* \.(gif|jpg|png|bmp)$ {
root /a.com
valid_referers none blocked *.qfcloud.top server_names ~tianyun ~\.google\. ~\.baidu\.;
if ($invalid_referer) {
return 403;
#rewrite .* http://qfcloud.top/403.jpg;
}
}
location / {
root /a.com;
index index.html index.htm;
valid_referers none blocked *.a.com server_name 192.168.100.* ~tianyun ~\.google\. ~\.baidu\. b.com;
if ($invalid_referer) {
return 403;
}
}
⑨ 再次盜鏈,訪問成功
九、nginx限制訪問
1、ngx_http_limit_req_module
啟動請求頻率限制
測驗未限制的情況下訪問
[root@localhost ~]# yum -y install httpd-tools
已加載插件:fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
軟體包 httpd-tools-2.4.6-93.el7.centos.x86_64 已安裝并且是最新版本
無須任何處理
[root@localhost ~]# ab -n 100 -c 10 http://10.8.162.122/
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 10.8.162.122 (be patient).....done
Server Software: nginx/1.18.0
Server Hostname: 10.8.162.122
Server Port: 80
Document Path: /
Document Length: 660 bytes
Concurrency Level: 10
Time taken for tests: 0.034 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 78200 bytes
HTML transferred: 66000 bytes
Requests per second: 2917.07 [#/sec] (mean)
Time per request: 3.428 [ms] (mean)
Time per request: 0.343 [ms] (mean, across all concurrent requests)
Transfer rate: 2227.68 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 1 3 1.0 3 5
Waiting: 1 3 0.9 3 4
Total: 1 3 1.1 3 5
Percentage of the requests served within a certain time (ms)
50% 3
66% 3
75% 4
80% 5
90% 5
95% 5
98% 5
99% 5
100% 5 (longest request)
啟動限制
vim /etc/nginx/nginx.conf
定義:
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s;
//限制請求 二進制地址 限制策略的名稱 占用10M空間 允許每秒1次請求
參考:
limit_req zone=req_zone;
//參考 限制策略的名稱
配置:
http {
limit_req_zone $binary_remote_addr zone=req_zone:10m rate=1r/s; 定義
server {
location / {
root /usr/share/nginx/html;
index index.html index.htm;
limit_req zone=req_zone; 參考
#limit_req zone=req_zone burst=5;
#limit_req zone=req_zone burst=5 nodelay;
}
}
}
限制后 (重啟服務,并測驗)
[root@localhost ~]# ab -n 100 -c 10 http://10.8.162.122/
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 10.8.162.122 (be patient).....done
Server Software: nginx/1.18.0
Server Hostname: 10.8.162.122
Server Port: 80
Document Path: /
Document Length: 660 bytes
Concurrency Level: 10
Time taken for tests: 0.066 seconds
Complete requests: 100
Failed requests: 99 //失敗的請求
(Connect: 0, Receive: 0, Length: 99, Exceptions: 0)
Write errors: 0
Non-2xx responses: 99 //有問題的相應
Total transferred: 65231 bytes
HTML transferred: 50160 bytes
Requests per second: 1506.27 [#/sec] (mean)
Time per request: 6.639 [ms] (mean)
Time per request: 0.664 [ms] (mean, across all concurrent requests)
Transfer rate: 959.53 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 1
Processing: 1 6 14.3 1 49
Waiting: 1 6 14.3 1 49
Total: 1 6 14.4 2 49
Percentage of the requests served within a certain time (ms)
50% 2
66% 2
75% 2
80% 3
90% 49
95% 49
98% 49
99% 49
100% 49 (longest request)
觀察錯誤日志
tail -f /var/log/nginx/error.log
2017/10/08 01:05:08 [error] 23287#23287: *720 limiting requests, excess: 5.109 by zone "req_zone",
client: 27.216.240.201, server: localhost, request: "GET / HTTP/1.0", host: "tianyun.me"
limiting requests
由于限制請求導致,
十、Nginx訪問控制
1、基于主機(ip)
模塊
ngx_http_access_module
directives
allow 允許某些主機
deny 拒絕某些主機
syntax
Syntax: allow address | CIDR | unix: | all;
Context: http, server, location, limit_except
啟用控制
限制主機訪問
vim /etc/nginx/conf.d/default.conf
server {
allow 10.18.45.65;
allow 10.18.45.181;
deny all;
}
測驗
服務器無法訪問
2、基于用戶
模塊
ngx_http_auth_basic_module
Syntax
方法一
Syntax: auth_basic string | off;
Context: http, server, location, limit_except
方法二
Syntax: auth_basic_user_file file;
Context: http, server, location, limit_except
啟用控制
① 建立認證檔案
yum install -y httpd-tools
生成秘鑰的工具是由apache提供
htpasswd -cm /etc/nginx/conf.d/passwd user10
會話密碼
htpasswd -m /etc/nginx/conf.d/passwd user20
會話密碼
cat /etc/nginx/conf.d/passwd
觀察口令檔案是否生成,已生成
user10:$apr1$UE/tLtDM$nVm686kAMYb/ArqQDUi8U/
user20:$apr1$bmn0E/gK$enkXKb2V5uFvUy9wdIHlP.
② 啟動認證
vim /etc/nginx/conf.d/default.conf
server {
找到server{欄位,在下一行插入認證欄位,
auth_basic "nginx access test!";
auth_basic_user_file /etc/nginx/conf.d/passwd;
提示訊息
參考認證檔案
...
}
③ 重啟并驗證
再次訪問網站,發現需要輸入用戶名和密碼,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/163984.html
標籤:python
