Nginx -2

接著上文寫

5.4.7 驗證模塊 需要輸入用戶名和密碼

模塊名稱:ngx_http_auth_basic_module

訪問控制基于模塊 ngx_http_auth_basic_module 實現,可以通過匹配客戶端資源進行限制

語法:

Syntax: auth_basic string | off;
Default:
auth_basic off;
Context: http, server, location, 1imit_exceptSyntax: auth_basic_user_file file;
Default:   _
Context:  http, server, location, 1imit_except
htpasswd?

用此命令生成用戶密碼文件

此命令來自于 httpd-tools 包,如果沒有安裝 一下即可

第一次生成文件
htpasswd -c  文件路徑 姓名        	    交互式生成密碼
htpasswd -bc 文件路徑 姓名 密碼   		直接將密碼跟在后面 -c  代表新建用戶名和密碼對應的文件
-b  將密碼跟在用戶名后非第一次
htpasswd     文件路徑 姓名               交互式生成密碼
htpasswd -b  文件路徑 姓名 密碼   		直接將密碼跟在后面

先安裝 httpd

谷歌瀏覽器查看:

由于瀏覽器的差異,有的內容不支持,下面去火狐瀏覽查看

使用另一種方式

瀏覽器查看:

5.4.8 自定義錯誤的頁面

我們可以改變默認的錯誤頁面,同時也可以用指定的響應狀態碼進行響應, 可用位置:http, server, location, if in location

Syntax: error_page code ... [=[response]] uri;
Default:   _
Context: http,server,location,if in locationerror_page     固定關鍵字
code           響應碼(404  403 等)
=              可以將響應碼轉換
uri            訪問連接

默認錯誤頁面 404 報錯

自定義頁面:
① 錯誤了直接跳轉到主頁面

沒有再顯示404報錯,而是跳轉到了我們規定的頁面

② 精確頁面

頁面顯示:

③ 我們可以指定狀態碼,防止劫持

5.4.9 日志的存放位置
Syntax: error_log file [level];Default: 
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
level: debug, info, notice, warn, error, crit, alert, emergerror_log    /apps/nginx/logs/xxx_error.log;
固定格式       文件路徑                    級別(info  debug等  可以忽略不寫)
將兩個網站的日志分離

自定義錯誤日志的位置

查看錯誤日志:

5.4.10 檢測文件是否存在

try_files 會按順序檢查文件是否存在,返回第一個找到的文件或文件夾(結尾加斜線表示為文件夾),如果所有文件或文件夾都找不到,會進行一個內部重定向到最后一個參數。只有最后一個參數可以引起一個內部重定向,之前的參數只設置內部 URI 的指向。最后一個參數是回退URI且必須存在,否則會出現內部500錯誤。

語法格式:

Syntax: try_files file ... uri;
try_files file ... =code;
Default: —
Context: server, location

server {listen 80;server_name  www.lucky.com;root /data/html;location  / {root  /data;try_files  $uri  $uri.html  $uri/index.html  /about/default.html;
}
}

當不存在的時候,有托底頁面

如果存在,就正常顯示

5.4.11 長連接
keepalive_timeout timeout [header timeout];
#設定保持連接超時時長,0表示禁止長連接,默認為65s,通常配置在http字段作為站點全局配置keepalive_requests number;
#在一次長連接上所允許請求的資源的最大數量,默認為100次,建議適當調大,比如:500可以加在全局或者 server

案例:

keepalive_requests 3;
#最大下載三個資源就會斷開keepalive_timeout 60 65: #只能有一個空格
#開啟長連接后,返回客戶端的會話保持時間為60s,單次長連接累計請求達到指定次數請求或65秒就會被斷開,后面的60為發送給客戶端應答報文頭部中顯示的超時時間設置為60s:如不設置客戶端將不顯示超時時間。Keep-Alive:timeout=60  #瀏覽器收到的服務器返回的報文#如果設置為0表示關閉會話保持功能,將如下顯示:
Connection:close #瀏覽器收到的服務器返回的報文

默認開啟

keepalive_disable none | browser ...;
#對哪種瀏覽器禁用長連接
5.4.12 作為下載服務器配置

ngx_http_autoindex_module 模塊處理以斜杠字符 "/" 結尾的請求,并生成目錄列表,可以做為下載服務

小插曲:

刪掉此文件或者不管直接按 ENTER 進入,這是一個緩存文件

配置:

顯示:

一些其它命令:

[root@localhost nginx-1.18.0]#./configure --help |grep auto
#自帶--without-http_autoindex_module    disable ngx_http_autoindex_moduleautoindex on | off;
#自動文件索引功能,默為offautoindex_exact_size on | off; ?
#計算文件確切大小(單位bytes),off 顯示大概大小(單位K、M),默認onautoindex_localtime on | off ; 
#顯示本機時間而非GMT(格林威治)時間,默認offautoindex_format html | xml | json | jsonp; 
#顯示索引的頁面文件風格,默認htmllimit_rate rate; 
#限制響應客戶端傳輸速率(除GET和HEAD以外的所有方法),單位B/s,即bytes/second,默認值0,表示無限制,此指令由ngx_http_core_module提供set $limit_rate
#變量提供 限制   變量優先級高

看到 json 格式的畫面

5.4.13 用戶上傳資料

上傳需要借助開發小的程序, 并且程序 5M 和 nginx 10M 都會限制。 兩者取最小

client_max_body_size 1m; 
#設置允許客戶端上傳單個文件的最大值,默認值為1m,上傳文件超過此值會出413錯誤client_body_buffer_size size; 
#用于接收每個客戶端請求報文的body部分的緩沖區大小;默認16k;超出此大小時,其將被暫存到磁盤上的由下面client_body_temp_path
#指令所定義的位置client_body_temp_path path [level1 [level2 [level3]]];
#設定存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量,目錄名為16進制的數字,使用hash之后的值從后往前截取1位、2位、2位作為目錄名
5.4.14 其他設置
directio size | off;
#操作完全和aio相反,aio是讀取文件而directio是寫文件到磁盤,啟用直接I/O,默認為關閉,當文件大于等于給定大小時,例如:directio 4m;同步(直接)寫磁盤,而非寫緩存。open_file_cache off; ?#是否緩存打開過的文件信息open_file_cache max=N [inactive=time];
#nginx可以緩存以下三種信息:
(1) 文件元數據:文件的描述符、文件大小和最近一次的修改時間
(2) 打開的目錄結構
(3) 沒有找到的或者沒有權限訪問的文件的相關信息 
max=N:#可緩存的緩存項上限數量;達到上限后會使用LRU(Least recently used,最近最少使用)算法實現管理
inactive=time:#緩存項的非活動時長,在此處指定的時長內未被命中的或命中的次數少于open_file_cache_min_uses    
#指令所指定的次數的緩存項即為非活動項,將被刪除open_file_cache_valid time; 
#緩存項有效性的檢查驗證頻率,默認值為60s open_file_cache_errors on | off; 
#是否緩存查找時發生錯誤的文件一類的信息,默認值為offopen_file_cache_min_uses number; 
#open_file_cache指令的inactive參數指定的時長內,至少被命中此處指定的次數方可被歸類為活動項,默認值為1示例:
open_file_cache max=10000 inactive=60s; 
#最大緩存10000個文件,非活動數據超時時長60sopen_file_cache_valid ? 60s; ?
#每間隔60s檢查一下緩存數據有效性open_file_cache_min_uses 5; 
#60秒內至少被命中訪問5次才被標記為活動數據open_file_cache_errors ? on;
#緩存錯誤信息limit_except method ... { ... },僅用于location
#限制客戶端使用除了指定的請求方法之外的其它方法 
method:GET, HEAD, POST, PUT, DELETE,MKCOL, COPY, MOVE, OPTIONS, PROPFIND, 
PROPPATCH, LOCK, UNLOCK, PATCHlimit_except GET {allow 192.168.44.20;deny all;
}
#允許 192.168.44.20主機下載,其他都拒絕

limit_except GET {
?allow 192.168.44.20;
?deny all;
}
#允許 192.168.44.20主機下載,其他都拒絕

六.高級配置

6.1 網頁的狀態頁

基于nginx 模塊 ngx_http_stub_status_module 實現,在編譯安裝nginx的時候需要添加編譯參數 --with-http_stub_status_module,否則配置完成之后監測會是提示語法錯誤注意: 狀態頁顯示的是整個服務器的狀態,而非虛擬主機的狀態。

狀態頁用于輸出 nginx 的基本狀態信息

Active connections: 
#當前處于活動狀態的客戶端連接數,包括連接等待空閑連接數=reading+writing+waiting
accepts:
#統計總值,Nginx自啟動后已經接受的客戶端請求的總數。
handled:
#統計總值,Nginx自啟動后已經處理完成的客戶端請求總數,通常等于accepts,除非有因worker_connections限制等被拒絕的連接
requests:
#統計總值,Nginx自啟動后客戶端發來的總的請求數。
Reading:
#當前狀態,正在讀取客戶端請求報文首部的連接的連接數,數值越大,說明排隊現象嚴重,性能不足
Writing:
#當前狀態,正在向客戶端發送響應報文過程中的連接數,數值越大,說明訪問量很大
Waiting:
#當前狀態,正在等待客戶端發出請求的空閑連接數,開啟 keep-alive的情況下,這個值等于active – (reading+writing)

可以只提取里面的基本狀態的數字

[root@localhost conf.d]#curl 192.168.44.20/status 2>/dev/null|awk '/Reading/{print $2,$4,$6}'

為了安全考慮,可以搭配驗證模塊一起使用

server {listen 80;server_name  www.lucky.com;root /data/html;location /status {stub_status;auth_basic  "welcome future";auth_basic_user_file  /mnt/.nginxuser;} }

再想提取的時候

[root@localhost conf.d]#curl http://lmy:123@192.168.44.20/status 2>/dev/null |awk '/Reading/{print $2,$4,$6}' 

最終升級版

server {listen 80;server_name  www.lucky.com;root /data/html;location /status {stub_status;auth_basic  "welcome future";auth_basic_user_file  /mnt/.nginxuser;allow 192.168.44.20;deny all;
}
}

6.2 nginx 第三方模塊

6.2.1 echo模塊

編譯之前,先關閉 nginx,導入壓縮包,并解壓。

6.3 變量

官方文檔? ? http://nginx.org/en/docs/varindex.html

6.3.1 內置變量

$remote_addr;?存放了客戶端的地址,注意是客戶端的公網IP
$args;變量中存放了URL中的參數
$document_root;?保存了針對當前資源的請求的系統根目錄
$document_uri;保存了當前請求中不包含參數的URI,注意是不包含請求的指令
$host;存放了請求的host名稱
服務端的地址
$request_filename;當前請求的資源文件的磁盤路徑,由root或alias指令與URI請求生成的文件絕對路徑
$scheme;?請求的協議,例如:http,https,ftp等
$http_user_agent;客戶端瀏覽器的詳細信息
$http_cookie;?客戶端的cookie信息
$remote_addr; 
#存放了客戶端的地址,注意是客戶端的公網IP$proxy_add_x_forwarded_for
#此變量表示將客戶端IP追加請求報文中X-Forwarded-For首部字段,多個IP之間用逗號分隔,如果請求中沒有X-Forwarded-For,就使用$remote_addrthe “X-Forwarded-For” client request header field with the $remote_addr variable appended to it, separated by a comma. If the “X-Forwarded-For” field is not present in the client request header, the $proxy_add_x_forwarded_for variable is equal to the $remote_addr variable.
客戶機    代理1     代理2     nginx服務器
$proxy_add_x_forwarded_for: 在代理1 上存的是  客戶機的ip
$proxy_add_x_forwarded_for: 在代理2 上存的是  客戶機的ip,代理1的ip            用逗號隔開
$proxy_add_x_forwarded_for: nginx  上存的是  客戶機的ip,代理1的ip,代理2的ip$args; 
#變量中存放了URL中的參數,例如:http://www.kgc.org/main/index.do?id=20190221&partner=search
#返回結果為: id=20190221&partner=search    存放的就是這個select   *  from table  where id=20190221$document_root; 
#保存了針對當前資源的請求的系統根目錄,例如:/apps/nginx/html$document_uri;
#保存了當前請求中不包含參數的URI,注意是不包含請求的指令,比
如:http://www.kgc.org/main/index.do?id=20190221&partner=search會被定義為/main/index.do 
#返回結果為:/main/index.do$host; 
#存放了請求的host名稱
服務端的地址limit_rate 10240;
echo $limit_rate;
#如果nginx服務器使用limit_rate配置了顯示網絡速率,則會顯示,如果沒有設置, 則顯示0$remote_port; 
#客戶端請求Nginx服務器時隨機打開的端口,這是每個客戶端自己的端口$remote_user; 
#已經經過Auth Basic Module驗證的用戶名$request_body_file; 
#做反向代理時發給后端服務器的本地資源的名稱$request_method; 
#請求資源的方式,GET/PUT/DELETE等$request_filename; 
#當前請求的資源文件的磁盤路徑,由root或alias指令與URI請求生成的文件絕對路徑,如:/apps/nginx/html/main/index.html$request_uri;   https:// www.baidu.com/main/index.do?id=20190221&partner=search 
#包含請求參數的原始URI,不包含主機名,相當于:$document_uri?$args,例如:/main/index.do?id=20190221&partner=search $scheme; 
#請求的協議,例如:http,https,ftp等$server_protocol; 
#保存了客戶端請求資源使用的協議的版本,例如:HTTP/1.0,HTTP/1.1,HTTP/2.0等$server_addr; 
#保存了服務器的IP地址$server_name; 
#請求的服務器的主機名$server_port;  443  https 
#請求的服務器的端口號$http_<name>
#name為任意請求報文首部字段,表示記錄請求報文的首部字段
arbitrary request header field; the last part of a variable name is the field name converted to lower case with dashes replaced by underscores 
#用下劃線代替橫線
#示例: echo $http_User_Agent; ?$http_user_agent; 
#客戶端瀏覽器的詳細信息$http_cookie; 
#客戶端的cookie信息$cookie_<name>
#name為任意請求報文首部字部cookie的key名$http_<name>
#name為任意請求報文首部字段,表示記錄請求報文的首部字段,ame的對應的首部字段名需要為小寫,如果有
橫線需要替換為下劃線
arbitrary request header field; the last part of a variable name is the field 
name converted to lower case with dashes replaced by underscores #用下劃線代替橫線
#示例: 
echo $http_user_agent; 
echo $http_host;$sent_http_<name>
#name為響應報文的首部字段,name的對應的首部字段名需要為小寫,如果有橫線需要替換為下劃線,此變量有問題
echo $sent_http_server;$arg_<name>
#此變量存放了URL中的指定參數,name為請求url中指定的參數
#對比 變量  $arg  是全部, 如果 要id   如下
echo $arg_id;

6.3.2 自定義變量

假如需要自定義變量名稱和值,使用指令 set $variable value;

語法格式:

Syntax: set $variable value;
Default: —
Context: server, location, if
   location /test {set $name  xyl;echo $name;set $my_port  $server_port;echo $my_port;
}

6.3.3 自定義圖標

favicon.ico 文件是瀏覽器收藏網址時顯示的圖標,當客戶端使用瀏覽器問頁面時,瀏覽器會自己主動發起請求獲取頁面的favicon.ico文件,但是當瀏覽器請求的 favicon.ico 文件不存在時,服務器會記錄404日志,而且瀏覽器也會顯示404報錯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696871.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696871.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696871.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

威爾金森功分器基本原理學習筆記

威爾金森功分器基本原理 威爾金森功率分配器的功能是將輸入信號等分或不等分的分配到各個輸出端口&#xff0c;并保持相同輸出相位。環形器雖然有類似功能&#xff0c;但威爾金森功率分配器在應用上具有更寬的帶寬。微帶形功分器的電路結構如圖所示&#xff0c;其中&#xff0…

【OpenAI Sora】何時開放使用?付費課程已上線(sora什么時候開放使用 )

Sora何時開放使用 根據提供的信息&#xff0c;Sora目前還未對廣大用戶開放。OpenAI在2024年2月15日展示了Sora的視頻&#xff0c;但沒有設立等待名單或提供API訪問。Sora仍在開發中&#xff0c;正在接受安全測試&#xff0c;并且尚未向公眾開放使用。 付費課程已上線 根據最…

Vue圖片瀏覽組件v-viewer,支持旋轉、縮放、翻轉等操作

Vue圖片瀏覽組件v-viewer&#xff0c;支持旋轉、縮放、翻轉等操作 之前用過viewer.js&#xff0c;算是市場上用過最全面的圖片預覽。v-viewer&#xff0c;是基于viewer.js的一個圖片瀏覽的Vue組件&#xff0c;支持旋轉、縮放、翻轉等操作。 基本使用 安裝&#xff1a;npm安裝…

費舍爾FISHER金屬探測器探測儀維修F70

美國FISHER LABS費舍爾地下金屬探測器&#xff0c;金屬探測儀等維修&#xff08;考古探金銀銅探寶等儀器&#xff09;。 費舍爾F70視聽目標ID金屬探測器&#xff0c;Fisher 金屬探測器公司成立于1931年&#xff0c;在實驗條件很艱苦的情況下&#xff0c;研發出了地下金屬探測器…

【Python】實現一個類似于Glass2k的Windows窗口透明化軟件

一 背景說明 網上看到一款Windows下的窗口透明化工具Glass2k&#xff08;Glass2k官網&#xff09;&#xff0c;可以簡單地通過快捷鍵實現任意窗口的透明化&#xff0c;還挺方便的&#xff0c;想用Python自己實現一下類似的功能。 軟件已經開源到&#xff1a;窗口透明化小工具開…

【Leetcode】889. 根據前序和后序遍歷構造二叉樹

文章目錄 題目思路代碼結果 題目 題目鏈接 給定兩個整數數組&#xff0c;preorder 和 postorder &#xff0c;其中 preorder 是一個具有 無重復 值的二叉樹的前序遍歷&#xff0c;postorder 是同一棵樹的后序遍歷&#xff0c;重構并返回二叉樹。 如果存在多個答案&#xff0c;…

CSS基礎屬性

【三】基礎屬性 【1】高度和寬度 &#xff08;1&#xff09;參數 width&#xff08;寬度&#xff09;&#xff1a;用于設置元素的寬度。可以使用具體的數值&#xff08;如像素值&#xff09;或百分比來指定寬度。 height&#xff08;高度&#xff09;&#xff1a;用于設置元…

Kubernetes 卷存儲 NFS | nfs搭建配置 原理介紹 nfs作為存儲卷使用

目錄 1、NFS介紹2、NFS服務部署2.1安裝nfs服務 (服務端配置)2.2啟動NFS服務2.3 服務檢查2.4 客戶端配置 3、nfs作為存儲卷使用3.1 nfs作為volume3.2 nfs存儲的缺點3.3 nfs作為PersistentVolum 4、nfs作為動態存儲提供5、總結 1、NFS介紹 NFS&#xff08;Network File System&a…

4.pom文件介紹Maven常用命令

1.pom.xml文件介紹. 1.1project標簽和modelVersion標簽介紹. pom.xml文件是maven的核心文件&#xff0c;POM(Project Object Model&#xff0c;項目對象模型)定義了項目的基本信息&#xff0c;用于描述如何構建&#xff0c;聲明項目依賴;&#xff1b; 1.2依賴坐標介紹. 依賴的…

得物面試:Kafka消息0丟失,如何實現?

得物面試&#xff1a;Kafka消息0丟失&#xff0c;如何實現&#xff1f; 尼恩說在前面 在40歲老架構師 尼恩的讀者交流群(50)中&#xff0c;最近有小伙伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、希音、百度、網易、美團的面試資格&#xff0c;遇到很多很重要的面…

新版Java面試專題視頻教程——多線程篇②

新版Java面試專題視頻教程——多線程篇② 0. 問題匯總0.1 線程的基礎知識0.2 線程中并發安全0.3 線程池0.4 使用場景 1.線程的基礎知識2.線程中并發鎖3.線程池3.1 說一下線程池的核心參數&#xff08;線程池的執行原理知道嘛&#xff09;3.2 線程池中有哪些常見的阻塞隊列Array…

高級語言期末2014級A卷

1.編寫函數 int delarr(int a[] ,int n)&#xff0c;刪除有n個元素的正整型數組a中所有素數&#xff0c;要求&#xff1a; 1&#xff09;數組a中剩余元素保持原來次序&#xff1b; 2&#xff09;將處理后的數組輸出&#xff1b; 3&#xff09;函數值返回剩余元素個數&#xff1…

MySQL索引面試題(高頻)

文章目錄 前言什么時候需要&#xff08;不需要&#xff09;)使用索引&#xff1f;有哪些優化索引的方法前綴索引優化索引覆蓋優化索引失效場景 總結 前言 今天來講一講 MySQL 索引的高頻面試題。主要是針對前一篇文章 MySQL索引入門&#xff08;一文搞定&#xff09;進行查漏補…

虛擬機的內存結構

一、摘要 熟悉 Java 語言特性的同學都知道&#xff0c;相比 C、C 等編程語言&#xff0c;Java 無需通過手動方式回收內存&#xff0c;內存中所有的對象都可以交給 Java 虛擬機來幫助自動回收&#xff1b;而像 C、C 等編程語言&#xff0c;需要開發者通過代碼手動釋放內存資源&…

MedicalGPT 訓練醫療大模型,實現了包括增量預訓練、有監督微調、RLHF(獎勵建模、強化學習訓練)和DPO(直接偏好優化)

MedicalGPT 訓練醫療大模型&#xff0c;實現了包括增量預訓練、有監督微調、RLHF(獎勵建模、強化學習訓練)和DPO(直接偏好優化)。 MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 訓練醫療大模型&#xff0c;實現了包括增量預訓練、有監督微…

Linux第63步_為新創建的虛擬機添加必要的目錄和安裝支持linux系統移植的軟件

1、創建必要的目錄 1)、創建“/home/zgq/linux/”目錄 打開終端&#xff0c;進入“/home/zgq/”目錄 輸入“mkdir linux回車”&#xff0c;創建“/home/zgq/linux/”目錄 輸入“ls回車”&#xff0c;列舉“/home/zgq/”目錄的所有文件和文件夾 創建好“/home/zgq/linux/”…

EIS(防抖):meshflow算法 C++實現

視頻防抖的應用 對視頻防抖的需求在許多領域都有。 這在消費者和專業攝像中是極其重要的。因此&#xff0c;存在許多不同的機械、光學和算法解決方案。即使在靜態圖像拍攝中&#xff0c;防抖技術也可以幫助拍攝長時間曝光的手持照片。 在內窺鏡和結腸鏡等醫療診斷應用中&…

Go 中的 init 如何用?它的常見應用場景有哪些呢?

嗨&#xff0c;大家好&#xff01;我是波羅學。本文是系列文章 Go 技巧第十六篇&#xff0c;系列文章查看&#xff1a;Go 語言技巧。 Go 中有一個特別的 init() 函數&#xff0c;它主要用于包的初始化。init() 函數在包被引入后會被自動執行。如果在 main 包中&#xff0c;它也…

QT基本組件

四、基本組件 Designer 設計師&#xff08;重點&#xff09; Qt包含了一個Designer程序&#xff0c;用于通過可視化界面設計開發界面&#xff0c;保存文件格式為.ui&#xff08;界面文件&#xff09;。界面文件內部使用xml語法的標簽式語言。 在Qt Creator中創建文件時&#xf…

滾雪球學Java(67):深入理解 TreeMap:Java 中的有序鍵值映射表

咦咦咦&#xff0c;各位小可愛&#xff0c;我是你們的好伙伴——bug菌&#xff0c;今天又來給大家普及Java SE相關知識點了&#xff0c;別躲起來啊&#xff0c;聽我講干貨還不快點贊&#xff0c;贊多了我就有動力講得更嗨啦&#xff01;所以呀&#xff0c;養成先點贊后閱讀的好…