1、網(wǎng)頁的狀態(tài)頁
基于nginx 模塊 ngx_http_stub_status_module 實(shí)現(xiàn),在編譯安裝nginx的時(shí)候需要添加編譯參數(shù)
–with-http_stub_status_module,否則配置完成之后監(jiān)測(cè)會(huì)是提示語法錯(cuò)誤注意: 狀態(tài)頁顯示的是整個(gè)服務(wù)器的狀態(tài),而非虛擬主機(jī)的狀態(tài)
#配置示例:
location /nginx_status {
#stub_status;
auth_basic "auth login";
auth_basic_user_file /apps/nginx/conf/.htpasswd;
allow 192.168.0.0/16;
allow 127.0.0.1;
deny all;
}
while : ;do ab -c 1000 -n 10000 http://192.168.91.100/;sleep 1;done
#壓力測(cè)試 模擬高鏈接
[root@localhost ~]#curl http://www.kgc.com/nginx_status 2>/dev/null |awk '/Reading/{print $2,$4,$6}'
#
[root@localhost ~]#curl http://用戶名:密碼@www.kgc.com/nginx_status 2>/dev/null |awk '/Reading/{print $2,$4,$6}'
#curl http://www.pc.com/status 2> /dev/null |awk '/Reading/{print $2,$4,$6}'
實(shí)際操作:
vim /apps/nginx/conf.d/pc.conf //進(jìn)入子配置文件
只需要添加 location
location /nginx_status {
stub_status;
}
瀏覽器訪問
192.168.190.200/ngin_status
Active connections:
#當(dāng)前處于活動(dòng)狀態(tài)的客戶端連接數(shù),包括連接等待空閑連接數(shù)=reading+writing+waiting accepts
#統(tǒng)計(jì)總值,Nginx自啟動(dòng)后已經(jīng)接受的客戶端請(qǐng)求的總數(shù)。 handled
#統(tǒng)計(jì)總值,Nginx自啟動(dòng)后已經(jīng)處理完成的客戶端請(qǐng)求總數(shù),通常等于accepts,除非有因worker_connections限制等被拒絕的連接
requests
#統(tǒng)計(jì)總值,Nginx自啟動(dòng)后客戶端發(fā)來的總的請(qǐng)求數(shù)。 Reading
#當(dāng)前狀態(tài),正在讀取客戶端請(qǐng)求報(bào)文首部的連接的連接數(shù),數(shù)值越大,說明排隊(duì)現(xiàn)象嚴(yán)重,性能不足 Writing
#當(dāng)前狀態(tài),正在向客戶端發(fā)送響應(yīng)報(bào)文過程中的連接數(shù),數(shù)值越大,說明訪問量很大 Waiting
#當(dāng)前狀態(tài),正在等待客戶端發(fā)出請(qǐng)求的空閑連接數(shù),開啟 keep-alive的情況下,這個(gè)值等于active – (reading+writing)
2、Nginx第三方模塊
Nginx第三方模塊就是一種可選的插件,用于擴(kuò)展和增強(qiáng)Nginx的功能,并根據(jù)特定需求自定義其行為。
第三方模塊可以添加新的指令、處理程序、變量或修改現(xiàn)有功能。
要使用第三方模塊,您需要在編譯和安裝Nginx時(shí)包含相應(yīng)的模塊源代碼,并按照模塊提供的說明進(jìn)行配置。
2.1echo模塊
echo-nginx-module 是一個(gè)第三方的 Nginx 模塊,可以解析配置文件中的 echo
指令,并執(zhí)行對(duì)應(yīng)的腳本或表達(dá)式,將其結(jié)果作為HTTP 響應(yīng)返回給客戶端
使用echo模塊,可以實(shí)現(xiàn):
(1) 輸出純文本:將字符串作為響應(yīng)的一部分返回給客戶端。
(2) 輸出變量值:將 Nginx 內(nèi)置變量或自定義變量的值返回給客戶端。這對(duì)于顯示請(qǐng)求頭信息或動(dòng)態(tài)生成內(nèi)容非常有用。
(3)輸出 HTTP 狀態(tài)碼:設(shè)置響應(yīng)的 HTTP 狀態(tài)碼。
(4)控制請(qǐng)求處理流程:通過終止請(qǐng)求或?qū)⒄?qǐng)求重定向到其他 URL 來控制請(qǐng)求的處理流程。
要使用 echo-nginx-module,需要在編譯安裝 Nginx 時(shí)添加該模塊,或者通過第三方軟件包管理工具進(jìn)行安裝。
#舉個(gè)例子
http {
server {
listen 80;
server_name example.com;
location /hello {
echo "Hello, World!";
}
}
}
當(dāng)訪問 `http://example.com/hello` 時(shí),Nginx 會(huì)使用 echo 模塊輸出 "Hello, World!" 作為 HTTP 響應(yīng)。
https://codeload.github.com/openresty/echo-nginx-module/zip/refs/heads/master
下載模塊包
unzip echo-nginx-module-master.zip#解壓
#重新編譯安裝 添加echo模塊
cd /data/nginx-1.18.0
./configure --prefix=/apps/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module --add-module=/test11/echo-nginx-module-master
make -j2 && make install
//在配置文件中加入echo模塊配置
vim /apps/nginx/conf.d/pc.conf
location /ip {
default_type text/html;
echo "welcome, your ip addr: ";
echo $remote_addr;
}
nginx -t
nginx -s reload
其他主機(jī)curl 192.168.190.200/ip
3、變量
在NGINX中,變量是一種用于存儲(chǔ)和檢索HTTP請(qǐng)求和響應(yīng)中的數(shù)據(jù)的機(jī)制。
變量可以包含請(qǐng)求頭、請(qǐng)求方法、請(qǐng)求參數(shù)、時(shí)間戳等信息。
3.1內(nèi)置變量
$remote_addr;
//存放了客戶端的地址,注意是客戶端的公網(wǎng)IP
$proxy_add_x_forwarded_for
//此變量表示將客戶端IP追加請(qǐng)求報(bào)文中X-Forwarded-For首部字段,多個(gè)IP之間用逗號(hào)分隔,如果請(qǐng)求中沒有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.
客戶機(jī) 代理1 代理2 nginx服務(wù)器
$proxy_add_x_forwarded_for: 在代理1 上存的是 客戶機(jī)的ip
$proxy_add_x_forwarded_for: 在代理2 上存的是 客戶機(jī)的ip,代理1的ip 用逗號(hào)隔開
$proxy_add_x_forwarded_for: nginx 上存的是 客戶機(jī)的ip,代理1的ip,代理2的ip
$args;
//變量中存放了URL中的參數(shù),例如:http://www.kgc.org/main/index.do?id=20190221&partner=search
//返回結(jié)果為: id=20190221&partner=search 存放的就是這個(gè)
$document_root;
//保存了針對(duì)當(dāng)前資源的請(qǐng)求的系統(tǒng)根目錄,例如:/apps/nginx/html。
$document_uri;
//保存了當(dāng)前請(qǐng)求中不包含參數(shù)的URI,注意是不包含請(qǐng)求的指令,比
如:http://www.kgc.org/main/index.do?id=20190221&partner=search會(huì)被定義為/main/index.do
//返回結(jié)果為:/main/index.do
$host;
//存放了請(qǐng)求的host名稱
limit_rate 10240;
echo $limit_rate;
//如果nginx服務(wù)器使用limit_rate配置了顯示網(wǎng)絡(luò)速率,則會(huì)顯示,如果沒有設(shè)置, 則顯示0
$remote_port;
//客戶端請(qǐng)求Nginx服務(wù)器時(shí)隨機(jī)打開的端口,這是每個(gè)客戶端自己的端口
$remote_user;
//已經(jīng)經(jīng)過Auth Basic Module驗(yàn)證的用戶名
$request_body_file;
//做反向代理時(shí)發(fā)給后端服務(wù)器的本地資源的名稱
$request_method;
//請(qǐng)求資源的方式,GET/PUT/DELETE等
$request_filename;
//當(dāng)前請(qǐng)求的資源文件的磁盤路徑,由root或alias指令與URI請(qǐng)求生成的文件絕對(duì)路徑,如:/apps/nginx/html/main/index.html
$request_uri;
//包含請(qǐng)求參數(shù)的原始URI,不包含主機(jī)名,相當(dāng)于:$document_uri?$args,例如:/main/index.do?id=20190221&partner=search
$scheme;
//請(qǐng)求的協(xié)議,例如:http,https,ftp等
$server_protocol;
//保存了客戶端請(qǐng)求資源使用的協(xié)議的版本,例如:HTTP/1.0,HTTP/1.1,HTTP/2.0等
$server_addr;
//保存了服務(wù)器的IP地址
$server_name;
//請(qǐng)求的服務(wù)器的主機(jī)名
$server_port;
//請(qǐng)求的服務(wù)器的端口號(hào)
$http_<name>
//name為任意請(qǐng)求報(bào)文首部字段,表示記錄請(qǐng)求報(bào)文的首部字段
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;
//客戶端瀏覽器的詳細(xì)信息
$http_cookie;
//客戶端的cookie信息
$cookie_<name>
//name為任意請(qǐng)求報(bào)文首部字部cookie的key名
$http_<name>
//name為任意請(qǐng)求報(bào)文首部字段,表示記錄請(qǐng)求報(bào)文的首部字段,ame的對(duì)應(yīng)的首部字段名需要為小寫,如果有
橫線需要替換為下劃線
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為響應(yīng)報(bào)文的首部字段,name的對(duì)應(yīng)的首部字段名需要為小寫,如果有橫線需要替換為下劃線,此變量有問題
echo $sent_http_server;
$arg_<name>
//此變量存放了URL中的指定參數(shù),name為請(qǐng)求url中指定的參數(shù)
//對(duì)比 變量 $arg 是全部, 如果 要id 如下
echo $arg_id;
例子:
vim /apps/nginx/conf.d/computer.conf
#添加以下內(nèi)容
location /main {
index index.html;
default_type text/html;
echo "hello world,main-->";
echo $remote_addr;
echo $args;
echo $arg_user
echo $document_root;
echo $document_uri;
echo $host;
echo $http_user_agent;
echo $http_cookie;
echo $request_filename;
echo $scheme;
echo $scheme://$host$document_uri?$args;
}
- `index index.html;`:指定默認(rèn)的索引文件為index.html,當(dāng)訪問/main時(shí),如果有index.html文件,將自動(dòng)顯示該文件。
- `default_type text/html;`:指定默認(rèn)的Content-Type為text/html,如果響應(yīng)中沒有特別指定Content-Type,則使用默認(rèn)值。
- `echo "hello world,main-->";`:輸出字符串"hello world,main-->"。
- `echo $remote_addr;`:輸出客戶端的IP地址。
- `echo $args;`:輸出請(qǐng)求的查詢參數(shù)。
- `echo $arg_user;`:輸出名為user的查詢參數(shù)的值。
- `echo $document_root;`:輸出當(dāng)前請(qǐng)求的根目錄路徑。
- `echo $document_uri;`:輸出當(dāng)前請(qǐng)求的URI。
- `echo $host;`:輸出請(qǐng)求的主機(jī)名。
- `echo $http_user_agent;`:輸出客戶端使用的用戶代理。
- `echo $http_cookie;`:輸出請(qǐng)求中的Cookie。
- `echo $request_filename;`:輸出當(dāng)前請(qǐng)求的文件路徑。
- `echo $scheme;`:輸出請(qǐng)求使用的協(xié)議(http或https)。
- `echo $scheme://$host$document_uri?$args;`:輸出完整的URL,包括協(xié)議、主機(jī)、路徑和查詢參數(shù)。
- 進(jìn)入子配置文件
vim /apps/nginx/conf.d/computer.conf
- 添加以下內(nèi)容
location /main {
index index.html;
default_type text/html;
echo "hello world,main-->";
echo $remote_addr;
echo $args;
echo $arg_user
echo $document_root;
echo $document_uri;
echo $host;
echo $http_user_agent;
echo $http_cookie;
echo $request_filename;
echo $scheme;
echo $scheme://$host$document_uri?$args;
}
- 使用另外一臺(tái)主機(jī)進(jìn)行測(cè)試
curl 192.168.190.200/main
3.2自定義變量
假如需要自定義變量名稱和值,使用指令set $variable value;
語法格式:
Syntax: set $variable value;
Default: —
Context: server, location, if
范例:
set $name kgc;
echo $name;
set $my_port $server_port;
echo $my_port;
echo "$server_name:$server_port"; #輸出信息如下
[root@centos6 ~]#curl www.kgc.org/main
kgc
80
www.kgc.org:80
######################################################
實(shí)際例子:
location /test {
set $name kgc;
echo $name;
set $my_port $server_port;
echo $my_port;
}
切換到另一臺(tái)主機(jī)
curl 192.168.198.200/main
4、自定義訪問日志
自定義訪問日志可以提供更靈活和定制化的日志記錄方式。
1、滿足特定需求:通過自定義訪問日志,你可以選擇記錄特定的訪問信息,如客戶端IP地址、訪問時(shí)間、請(qǐng)求內(nèi)容、狀態(tài)碼、傳輸字節(jié)數(shù)、引用頁面、用戶代理等。這些信息可以根據(jù)你的需求進(jìn)行自定義,以滿足特定的分析、監(jiān)控或統(tǒng)計(jì)需求。
2、減少日志量:默認(rèn)情況下,Nginx 記錄的訪問日志較為詳細(xì),包含了大量的信息。而自定義訪問日志可以讓你只記錄感興趣的信息,避免產(chǎn)生過多的日志數(shù)據(jù),減少磁盤空間和讀寫開銷。
3、提高性能:自定義訪問日志可以減少磁盤的寫入操作,從而減小對(duì)系統(tǒng)性能的影響。尤其在高訪問量的情況下,減少日志量可以提高系統(tǒng)的處理能力和響應(yīng)速度。
4、日志分析與監(jiān)控:自定義訪問日志可以使日志數(shù)據(jù)更易于分析和監(jiān)控。你可以根據(jù)自定義的格式,使用各種日志分析工具或腳本,提取有用的信息,進(jìn)行訪問分析、安全審計(jì)、性能優(yōu)化等工作。
4.1 自定義訪問日志的格式
要自定義 Nginx 的訪問日志,你需要編輯 Nginx 的配置文件,并修改 http 部分的日志格式。
以下是一個(gè)簡(jiǎn)單的例子,展示了如何在 Nginx 配置文件中定義一個(gè)自定義的訪問日志格式:
http {
# 定義自定義訪問日志格式
log_format my_custom_log '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
# 配置使用自定義訪問日志格式的訪問日志文件
access_log /path/to/custom_access.log my_custom_log;
# 其他配置項(xiàng)...
}
在上述例子中,我們使用 `log_format` 指令定義了一個(gè)名為 `my_custom_log` 的自定義日志格式,該格式包含了 IP 地址、用戶名、訪問時(shí)間、請(qǐng)求內(nèi)容、狀態(tài)碼、傳輸字節(jié)數(shù)、引用頁面和用戶代理等信息。
然后,在 `access_log` 指令中指定了一個(gè)自定義訪問日志文件的路徑 `/path/to/custom_access.log`,并且將之前定義的 `my_custom_log` 格式應(yīng)用于該日志文件。
請(qǐng)注意,修改完配置文件之后,記得重新加載 Nginx 配置使改動(dòng)生效,使用命令 `nginx -s reload` 可以實(shí)現(xiàn)配置文件的熱重載。
4.2自定義json 格式日志
log_format access_json '{"@timestamp":"$time_iso8601",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"uri":"$uri",'
'"xff":"$http_x_forwarded_for",'
'"referer":"$http_referer",'
'"tcp_xff":"$proxy_protocol_addr",'
'"http_user_agent":"$http_user_agent",'
'"status":"$status"}';
location / {
root /data/nginx/pc/;
access_log logs/access.log access_json;
}
'"http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTMLe/101.0.4951.54 Safari/537.36",' '"status":"304"}'
腳本
#!/usr/bin/env python3
#coding:utf-8
status_200= []
status_404= []
with open("access_json.log") as f:
for line in f.readlines():
line = eval(line)
if line.get("status") == "200":
status_200.append(line.get)
elif line.get("status") == "404":
status_404.append(line.get)
else:
print("狀態(tài)碼 ERROR")
print((line.get("clientip")))
f.close()
print("狀態(tài)碼200的有--:",len(status_200))
print("狀態(tài)碼404的有--:",len(status_404))
5、Nginx壓縮功能(重要)
支持對(duì)指定類型的文件進(jìn)行壓縮然后再傳輸給客戶端,而且壓縮還可以設(shè)置壓縮比例,壓縮后的文件大小將比源文件顯著變小,這樣有助于降低出口帶寬的利用率,降低企業(yè)的IT支出,不過會(huì)占用相應(yīng)的CPU資源。Nginx對(duì)文件的壓縮功能是依賴于模塊
ngx_http_gzip_module
官方文檔:https://nginx.org/en/docs/http/ngx_http_gzip_module.html
配置指令如下:
#啟用或禁用gzip壓縮,默認(rèn)關(guān)閉
gzip on | off;
#壓縮比由低到高從1到9,默認(rèn)為1
gzip_comp_level level;
#禁用IE6 gzip功能
gzip_disable "MSIE [1-6]\.";
#gzip壓縮的最小文件,小于設(shè)置值的文件將不會(huì)壓縮
gzip_min_length 1k;
#啟用壓縮功能時(shí),協(xié)議的最小版本,默認(rèn)HTTP/1.1
gzip_http_version 1.0 | 1.1;
#指定Nginx服務(wù)需要向服務(wù)器申請(qǐng)的緩存空間的個(gè)數(shù)和大小,平臺(tái)不同,默認(rèn):32 4k或者16 8k;
gzip_buffers number size;
#指明僅對(duì)哪些類型的資源執(zhí)行壓縮操作;默認(rèn)為gzip_types text/html,不用顯示指定,否則出錯(cuò)
gzip_types mime-type ...;
#如果啟用壓縮,是否在響應(yīng)報(bào)文首部插入“Vary: Accept-Encoding”,一般建議打開
gzip_vary on | off;
#預(yù)壓縮
gzip_static on | off;
#重啟nginx并進(jìn)行訪問測(cè)試壓縮功能
[root@centos8 ~]# cp /apps/nginx/logs/access.log /data/nginx/html/pc/m.txt
[root@centos8 ~]# echo "test" > /data/nginx/html/pc/test.html #小于1k的文件測(cè)試是否
會(huì)壓縮
[root@centos8 ~]# vim /apps/nginx/conf/nginx.conf
gzip on;
gzip_comp_level 5;
gzip_min_length 1k;
gzip_types text/plain application/javascript application/x-javascript text/css
application/xml text/javascript application/x-httpd-php image/gif image/png;
gzip_vary on;
#重啟Nginx并訪問測(cè)試:
[root@centos8 ~]# curl --head --compressed 192.168.91.100/test.html
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 22 Feb 2019 01:52:23 GMT
Content-Type: text/html
Last-Modified: Thu, 21 Feb 2019 10:31:18 GMT
Connection: keep-alive
Keep-Alive: timeout=65
Vary: Accept-Encoding
ETag: W/"5c6e7df6-171109"
Content-Encoding: gzip #壓縮傳輸
#驗(yàn)證不壓縮訪問的文件大?。?/span>
實(shí)際操作
太小的文件沒必要壓縮,壓縮說不定變大了
vim /apps/nginx/conf.d/computer.conf
//進(jìn)入子配置文件
//寫入以下內(nèi)容
server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html;
gzip on;
gzip_comp_level 9;
gzip_min_length 1k;
gzip_vary on;
瀏覽器輸入 192.168.190.200/111.txt
6、https 功能
Web網(wǎng)站的登錄頁面都是使用https加密傳輸?shù)?,加密?shù)據(jù)以保障數(shù)據(jù)的安全,HTTPS能夠加密信息,以免敏感信息被第三方獲取,所以很多銀行網(wǎng)站或電子郵箱等等安全級(jí)別較高的服務(wù)都會(huì)采用HTTPS協(xié)議,HTTPS其實(shí)是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務(wù)端和客戶端的信息傳輸都會(huì)通過TLS進(jìn)行加密,所以傳輸?shù)臄?shù)據(jù)都是加密后的數(shù)據(jù)。
nginx 的https 功能基于模塊ngx_http_ssl_module實(shí)現(xiàn),因此如果是編譯安裝的nginx要使用參數(shù)ngx_http_ssl_module開啟ssl功能,但是作為nginx的核心功能,yum安裝的nginx默認(rèn)就是開啟的,編譯安裝的nginx需要指定編譯參數(shù)–with-http_ssl_module開啟
官方文檔;https://nginx.org/en/docs/http/ngx_http_ssl_module.html
6.1Nginx的HTTPS工作原理的詳解
(1)客戶端發(fā)送HTTPS請(qǐng)求:客戶端(例如Web瀏覽器)通過HTTPS協(xié)議向Nginx服務(wù)器發(fā)送加密的HTTP請(qǐng)求。默認(rèn)情況下,HTTPS使用443端口進(jìn)行通信。
(2)服務(wù)器證書握手:Nginx服務(wù)器接收到HTTPS請(qǐng)求后,會(huì)向客戶端發(fā)送已經(jīng)配置好的SSL證書。該證書包含了服務(wù)器的公鑰以及其他相關(guān)信息,例如服務(wù)器的域名。
(3)客戶端驗(yàn)證證書:客戶端接收到服務(wù)器發(fā)送的證書后,會(huì)使用預(yù)置的受信任證書頒發(fā)機(jī)構(gòu)(CA)根證書列表來驗(yàn)證詳細(xì)的服務(wù)器證書鏈??蛻舳藭?huì)檢查證書是否由受信任的CA簽發(fā),并驗(yàn)證證書的有效性和真實(shí)性。如果證書通過驗(yàn)證,客戶端可以確認(rèn)服務(wù)器的身份。
(4)密鑰交換:如果服務(wù)器的證書被成功驗(yàn)證,客戶端會(huì)生成一個(gè)隨機(jī)的對(duì)稱密鑰,稱為“會(huì)話密鑰”。然后,客戶端使用服務(wù)器的公鑰來加密該會(huì)話密鑰,并將其發(fā)送給服務(wù)器。
(5)數(shù)據(jù)加密:Nginx服務(wù)器接收到客戶端發(fā)送的加密的會(huì)話密鑰后,使用服務(wù)器的私鑰解密該會(huì)話密鑰。此后,Nginx服務(wù)器和客戶端使用會(huì)話密鑰來進(jìn)行對(duì)稱加密和解密,以加密和解密數(shù)據(jù)的傳輸。
(6)安全數(shù)據(jù)傳輸:一旦會(huì)話密鑰被交換并使用,Nginx服務(wù)器和客戶端之間的通信將通過使用會(huì)話密鑰進(jìn)行加密和解密來保證安全性。所有通過HTTPS協(xié)議傳輸?shù)臄?shù)據(jù),包括HTTP請(qǐng)求和響應(yīng)內(nèi)容,都將被加密。
客戶端和服務(wù)器之間的加密通道建立后,數(shù)據(jù)在傳輸過程中將經(jīng)過加密,從而提供了更高的安全性。
6.2啟用功能模塊的配置過程
-
Nginx的HTTPS功能通過ngx_http_ssl_module模塊來實(shí)現(xiàn)的。
-
ngx_http_ssl_module模塊為Nginx添加了對(duì)SSL/TLS協(xié)議的支持,使其能夠提供HTTPS服務(wù)。
-
ngx_http_ssl_module模塊提供了一組配置項(xiàng),用于指定SSL證書、私鑰、加密算法、協(xié)議版本以及其他與SSL/TLS相關(guān)的設(shè)置。
配置步驟:
- 1、獲取SSL證書和私鑰:從證書頒發(fā)機(jī)構(gòu)(CA)或自簽名證書頒發(fā)機(jī)構(gòu)獲取有效的SSL證書和對(duì)應(yīng)的私鑰文件。證書用于驗(yàn)證服務(wù)器的身份,私鑰用于解密SSL連接。
- 2、配置Nginx:編輯主配置文件nginx.conf
ssl_certificate:指定SSL證書文件的路徑。
ssl_certificate_key:指定SSL私鑰文件的路徑。
ssl_protocols:指定支持的TLS協(xié)議版本,例如TLSv1.2、TLSv1.3。
ssl_ciphers:指定加密算法套件,例如AES128-GCM-SHA256、ECDHE-RSA-AES256-GCM-SHA384。
其他可選的SSL配置項(xiàng):ssl_prefer_server_ciphers、ssl_session_timeout等。
- eg:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /path/to/certificate.crt;
ssl_certificate_key /path/to/private/key.key;
# SSL配置項(xiàng)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
}
- 3、重啟Nginx:保存配置文件,并重新加載或重啟Nginx服務(wù)。
nginx -s reload
6.3配置實(shí)例—自簽名證書
- 腳本內(nèi)容
CA_SUBJECT="/O=kgc/CN=ca.kgc.com"
SUBJECT="/C=CN/ST=js/L=nj/O=kgc/CN=www.kgc.com"
SERIAL=34
EXPIRE=202002
FILE=kgc.com
openssl req -x509 -newkey rsa:2048 -subj $CA_SUBJECT -keyout ca.key -nodes -days 202002 -out ca.crt
openssl req -newkey rsa:2048 -nodes -keyout ${FILE}.key -subj $SUBJECT -out ${FILE}.csr
openssl x509 -req -in ${FILE}.csr -CA ca.crt -CAkey ca.key -set_serial $SERIAL -days $EXPIRE -out ${FILE}.crt
chmod 600 ${FILE}.key ca.key
server {
listen 80;
listen 443 ssl;
ssl_certificate /ky31/www.kgc.com.crt;
ssl_certificate_key /ky31/www.kgc.com.key;
ssl_session_cache shared:sslcache:20m;
ssl_session_timeout 10m;
7、自定義圖標(biāo)
favicon.ico 文件是瀏覽器收藏網(wǎng)址時(shí)顯示的圖標(biāo)。文章來源:http://www.zghlxwxcb.cn/news/detail-685553.html
當(dāng)客戶端使用瀏覽器問頁面時(shí),瀏覽器會(huì)自己主動(dòng)發(fā)起請(qǐng)求獲取頁面的favicon.ico文件。
當(dāng)瀏覽器請(qǐng)求的favicon.ico文件不存在時(shí),服務(wù)器會(huì)記錄404日志,而瀏覽器會(huì)顯示404報(bào)錯(cuò)。文章來源地址http://www.zghlxwxcb.cn/news/detail-685553.html
#方法一:服務(wù)器不記錄訪問日志:
location = /favicon.ico {
log_not_found off;
access_log off;
}
#方法二:將圖標(biāo)保存到指定目錄訪問:
#location ~ ^/favicon\.ico$ {
location = /favicon.ico {
root /data/nginx/html/pc/images;
expires 365d; #設(shè)置文件過期時(shí)間
}
到了這里,關(guān)于Nginx詳解之Nginx高級(jí)配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!