主頁 > 後端開發 > Nginx基礎入門2

Nginx基礎入門2

2020-10-09 04:41:44 後端開發

一、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

上一篇:一種簡單的PC遠程連接樹莓派圖形界面的方法

下一篇:[SHELL SCRIPT] LINUX正則運算式 課堂作業 獲取PM2.5天氣資訊

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more