1.驗證模塊 需要輸入用戶名和密碼
我們要用htpasswd這個命令,先安裝一下httpd
生成文件和用戶?
修改文件?
訪問頁面?
?為什么找不到頁面?
對應的路徑下,沒有這個文件
去創建文件
去虛擬機瀏覽器查看
有的頁面不想被別人看到,可以做這個操作
2.網頁的狀態頁
基于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)
提取內容
這樣別人也可以看到,這個給它加個身份驗證
加了身份驗證,看不懂怎么辦
如果你想更安全
3.自定義 錯誤頁面
自定義一個頁面
更換狀態碼
為什么要更換狀態碼?
因為404狀態碼出現時,可能會被劫持,為了不被劫持,我們可以更換狀態碼
4.檢測文件是否存在
當訪問的頁面存在時,那就去訪問這個頁面,不會顯示about?
5.日志位置存放
#格式
Syntax: error_log file [level];
error_log ? ?/apps/nginx/logs/kgc_error.log;
固定格式 ? ? ?文件路徑 ? ? ? ? ? ? ? ? ? ? ? ? 級別(info ?debug等 ?可以忽略不寫)
? ? ??
Default:?
error_log logs/error.log error;
Context: main, http, mail, stream, server, location
level: debug, info, notice, warn, error, crit, alert, emerg[root@centos7 ~]# mkdir /data/nginx/logs
?listen 80;
?server_name www.kgc.org;
?error_page ?500 502 503 504 404 /error.html;?
?access_log /apps/nginx/logs/kgc_access.log;?
?error_log /apps/nginx/logs/kgc_error.log;?
?#定義錯誤日志文件
#重啟nginx并訪問不存在的頁面進行測試并驗證是在指定目錄生成新的日志文件
[root@localhost ~]#mkdir /apps/nginx/logs
[root@localhost ~]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost ~]#nginx -s reload
錯誤日志實驗?
將兩個網站的 日志分離
[root@localhost error]#vim /apps/nginx/conf.d/m.conf
server{
? ? ? ? listen 80;
? ? ? ? server_name ?www.m.com;
? ? ? ? root /data/nginx/m/;
? ? ? ? error_log ? ?/data/logs/m_error.log;
? ? ? ? access_log ?/data/logs/m_access.log;
}
[root@localhost error]#vim /apps/nginx/conf.d/pc.conf
server{
? ? ? ? listen 80;
? ? ? ? server_name ?www.pc.com;
? ? ? ? root /data/nginx/pc;
? ? ? ? error_log ? ?/data/logs/pc_error.log;
? ? ? ? access_log ?/data/logs/pc_access.log;
}
[root@localhost error]#mkdir /data/logs
[root@localhost error]#nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@localhost error]#nginx -s reload查看日志是否生效
6.長連接
keepalive_timeout timeout [header_timeout]; ?
#設定保持連接超時時長,0表示禁止長連接,默認為75s,通常配置在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 ?#瀏覽器收到的服務器返回的報文
#使用命令測試:
[root@centos8 ~]# telnet www.kgc.org 80
Trying 10.0.0.8...
Connected to www.kgc.org.
Escape character is '^]'.
GET / HTTP/1.1
HOST: www.kgc.org#Response Headers(響應頭信息):
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Thu, 24 Sep 2020 04:35:35 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Sep 2020 14:39:21 GMT
Connection: keep-alive
Keep-Alive: timeout=60
ETag: "5c8a6b3a-7"
Accept-Ranges: bytes
#頁面內容
pc web
7.作為下載服務器配置
ngx_http_autoindex_module 模塊處理以斜杠字符 "/" 結尾的請求,并生成目錄列表,可以做為下載服務
配置使用
官方文檔:
Module ngx_http_autoindex_module
給文件內容加單位大小
autoindex on | off;
#自動文件索引功能,默為off
autoindex_exact_size on | off; ?
#計算文件確切大小(單位bytes),off 顯示大概大小(單位K、M),默認on
autoindex_localtime on | off ;?
#顯示本機時間而非GMT(格林威治)時間,默認off
autoindex_format html | xml | json | jsonp;?
#顯示索引的頁面文件風格,默認html
limit_rate rate;?
#限制響應客戶端傳輸速率(除GET和HEAD以外的所有方法),單位B/s,即bytes/second,默認值0,表示無限制,此指令由ngx_http_core_module提供
set $limit_rate
#變量提供 限制 ? 變量優先級高
改為json格式
8.用戶上傳資料
上傳需要借助開發小的程序, 并且程序 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位作為目錄名上傳文件大于限制 ?錯誤代碼413
9.其他設置
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;?
#是否緩存查找時發生錯誤的文件一類的信息,默認值為off
open_file_cache_min_uses number;?
#open_file_cache指令的inactive參數指定的時長內,至少被命中此處指定的次數方可被歸類為活動項,默認值為1
范例:
open_file_cache max=10000 inactive=60s;?
#最大緩存10000個文件,非活動數據超時時長60s
open_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, PATCH
limit_except GET {
?allow 192.168.91.101;
?deny all;
}
#除了GET和HEAD 之外其它方法僅允許192.168.1.0/24網段主機使用
10.第三方模塊(echo模塊)
開源的echo模塊 https://github.com/openresty/echo-nginx-module
安裝第三方命令?
看一下,make install會不會覆蓋之前的?
curl訪問
11.變量
變量分為:內置變量和 自定義變量
http://nginx.org/en/docs/varindex.html
官方文檔
11.1內置變量
$remote_addr;?
#存放了客戶端的地址,注意是客戶端的公網IP
$proxy_add_x_forwarded_for;(傳地址)?
$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的參數)
$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;
不包含參數的URL
#保存了當前請求中不包含參數的URI,注意是不包含請求的指令
比如:http://www.kgc.org/main/index.do?id=20190221&partner=search會被定義為/main/index.do?
#返回結果為:/main/index.do
$host;
服務器的主機地址(名字)
$limit_rate;
限速(網路速率)
#如果nginx服務器使用limit_rate配置了顯示網絡速率,則會顯示,如果沒有設置, 則顯示0
$remote_port;
客戶端的請求端口
#客戶端請求Nginx服務器時隨機打開的端口,這是每個客戶端自己的端口
$remote_user;
經過 htpasswd驗證的用戶名
#已經經過Auth Basic Module驗證的用戶名
$request_method;?
請求資源的方式,GET/PUT/DELETE等
$request_filename;?
表示系統的真實路徑
#當前請求的資源文件的磁盤路徑,由root或alias指令與URI請求生成的文件絕對路徑,如:/apps/nginx/html/main/index.html
$request_uri;?
包含請求參數的原始URI,不包含主機名
相當于:$document_uri?$args
$scheme;
請求的協議
例如:http,https,ftp等
$server_protocol;?
你使用的協議的版本
#保存了客戶端請求資源使用的協議的版本,例如:HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr;?
服務器的IP地址
$server_name;?
請求的服務器的主機名
?$server_port;?
請求的服務器的端口號
例如:https(端口號443)? ? ? http(端口號80)
$http_user_agent;
客戶端瀏覽器的詳細信息
$http_cookie;?
客戶端的緩存信息
緩存:cookie和session
?例子:
11.2自定義變量
11.2.1 set指令
假如需要自定義變量名稱和值,使用指令set $variable value;
語法格式:
Syntax: set $variable value;
Default: —
Context: server, location, if
set這個指令
只能放在 server,location,if 下面?
12.自定義圖標
favicon.ico 文件是瀏覽器收藏網址時顯示的圖標,當客戶端使用瀏覽器問頁面時,瀏覽器會自己主動發起請求獲取頁面的favicon.ico文件,但是當瀏覽器請求的favicon.ico文件不存在時,服務器會記錄404日志,而且瀏覽器也會顯示404報錯
【定制小圖標】
wget www.baidu.com/favicon.ico
放到主目錄就可以了不生效可以重新打開瀏覽器
12.1 百度圖標?
復制一份到主目錄下
瀏覽器訪問地址,看圖標
12.2 京東圖標
?