Nginx優(yōu)化和模塊解讀
實(shí)驗(yàn)環(huán)境

實(shí)驗(yàn)步驟
一、Nginx優(yōu)化
1、安裝Nginx1.28(192.168.10.40)
添加nginx官方源
tee /etc/yum.repos.d/nginx.repo <<EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF
dnf -y install nginx
2、編寫Nginx基本啟動(dòng)文件(192.168.10.40)
mkdir /nginxconf vim /nginxconf/nginx.conf
添加:
events {}
http {
server {
}
}檢查配置文件語法
nginx -c /nginxconf/nginx.conf -t

啟動(dòng)nginx服務(wù)
nginx -c /nginxconf/nginx.conf ss -antpl | grep nginx

3、自定義網(wǎng)站目錄(192.168.10.40)
(1)修改配置文件
vim /nginxconf/nginx.conf
添加:
events {}
http {
server {
root /mysite;
}
}(2)創(chuàng)建網(wǎng)站目錄并授權(quán)
mkdir /mysite echo "nginx" > /mysite/index.html chown -R nginx:nginx /mysite/
(3)重載nginx服務(wù)
nginx -c /nginxconf/nginx.conf -s reload ss -anplt | grep nginx
(4)訪問網(wǎng)頁
curl 127.0.0.1

4、虛擬主機(jī)(基于域名)(192.168.10.40)
(1)修改配置文件
vim /nginxconf/nginx.conf
添加:
events {}
http {
server {
server_name www.test1.com;
root /mysite;
}
server {
server_name www.test2.com;
root /mysite2;
}
}(2)創(chuàng)建網(wǎng)站目錄并授權(quán)
echo "web1" > /mysite/index.html mkdir /mysite2 echo "web2" > /mysite2/index.html chown -R nginx:nginx /mysite2
(3)設(shè)置域名解析
vim /etc/hosts
添加:
192.168.10.40 www.test1.com 192.168.10.40 www.test2.com
(4)重載nginx服務(wù)
nginx -c /nginxconf/nginx.conf -s reload
(5)通過域名訪問
curl www.test1.com

curl www.test2.com

5、虛擬主機(jī)(基于端口)(192.168.10.40)
(1)修改配置文件
vim /nginxconf/nginx.conf
修改:
events {}
http {
server {
listen 80;
root /mysite;
}
server {
listen 81;
root /mysite2;
}
}(2)重載ngix服務(wù)
nginx -c /nginxconf/nginx.conf -s reload
(3)通過端口訪問
curl 127.0.0.1

curl 127.0.0.1:81

6、location匹配模式(192.168.10.40)
location 是 Nginx 配置中最重要的指令之一,用于匹配請(qǐng)求的 URI(路徑),并定義如何處理這些請(qǐng)求(如代理、重定向、返回靜態(tài)文件等)
(1)基本語法
location [匹配模式] URI {
# 配置指令
}- [匹配模式]:可以是前綴匹配、正則匹配、精確匹配
- URI:要匹配的路徑
(2)匹配模式類型
匹配模式 | 語法示例 | 說明 |
精確匹配 | location = /path | 只匹配完全相同的路徑(優(yōu)先級(jí)最高) |
前綴匹配 | location /prefix | 匹配以 /prefix 開頭的路徑(按最長匹配優(yōu)先) |
正則匹配(區(qū)分大小寫) | location ~ \.php$ | 使用正則表達(dá)式匹配(區(qū)分大小寫,第一個(gè)匹配成功的生效) |
正則匹配(不區(qū)分大小寫) | `location ~* .(jpg png)` | 正則匹配不區(qū)分大小寫 |
通用匹配 | location / | 匹配所有未被其他 location 匹配的請(qǐng)求(優(yōu)先級(jí)最低) |
(3)修改配置文件
vim /nginxconf/nginx.conf
修改:
events {}
http {
server {
listen 80;
location = /exact-match {
return 200 "精確匹配\n";
}
location /prefix {
return 200 "前綴匹配\n";
}
location ~ \.php$ {
return 200 "區(qū)分大小寫的正則匹配\n";
}
location ~* \.(jpg|png)$ {
return 200 "不區(qū)分大小寫的正在匹配\n";
}
location / {
return 200 "通用匹配\n";
}
location ~ /\.ht {
deny all;
}
}
}(4)重載nginx服務(wù)
nginx -c /nginxconf/nginx.conf -s reload
(5)實(shí)驗(yàn)curl測試不同路徑
curl 127.0.0.1/exact-match

curl 127.0.0.1/prefix/hello

curl 127.0.0.1/test.php

curl 127.0.0.1/IMAGE.PNG

curl 127.0.0.1/any-other-path

curl 127.0.0.1/.htaccess

7、隱藏服務(wù)版本號(hào)(192.168.10.40)
默認(rèn)情況下,Nginx 會(huì)在 HTTP 響應(yīng)頭中顯示版本號(hào)(如 Server: nginx/1.25.3),這可能存在安全風(fēng)險(xiǎn)。
查看百度的HTTP響應(yīng)頭信息
curl -I http://www.baidu.com/

服務(wù)器類型:百度前端使用 bfe
查看安裝的nginx響應(yīng)頭信息
curl -I 127.0.0.1

(1)修改配置文件
vim /nginxconf/nginx.conf
添加:
events {}
http {
server_tokens off;
server {
listen 80;
location = /exact-match {
return 200 "精確匹配\n";
}
location /prefix {
return 200 "前綴匹配\n";
}
location ~ \.php$ {
return 200 "區(qū)分大小寫的正則匹配\n";
}
location ~* \.(jpg|png)$ {
return 200 "不區(qū)分大小寫的正在匹配\n";
}
location / {
return 200 "通用匹配\n";
}
location ~ /\.ht {
deny all;
}
}
}(2)重載nginx服務(wù)
nginx -c /nginxconf/nginx.conf -s reload
(3)檢查響應(yīng)頭
curl -I 127.0.0.1

8、定義進(jìn)程數(shù)量(192.168.10.40)
(1)查看nginx工作進(jìn)程數(shù)
ps -ef | grep nginx

(2)修改配置文件(設(shè)置為兩個(gè)工作進(jìn)程)
vim /nginxconf/nginx.conf
添加:
worker_processes 2;
events {}
http {
……或者使用worker_processes auto; 自動(dòng)匹配 CPU 核心數(shù)
(3)重啟nginx服務(wù)
nginx -c /nginxconf/nginx.conf -s stop nginx -c /nginxconf/nginx.conf
(4)查看nginx工作進(jìn)程數(shù)
ps -ef | grep nginx

9、CPU親和性(192.168.10.40)
worker_cpu_affinity 是 Nginx 中用于 綁定 Worker 進(jìn)程到特定 CPU 核心 的指令,目的是通過 減少 CPU 上下文切換 和 提高緩存命中率 來優(yōu)化性能,尤其在多核服務(wù)器上效果顯著。
(1)修改配置文件
vim /nginxconf/nginx.conf
添加:
worker_processes 2;
worker_cpu_affinity 0101 1010;
events {}
http {
……(2)重載nginx服務(wù)
nginx -c /nginxconf/nginx.conf -s reload
10、設(shè)置進(jìn)程打開文件數(shù)量
worker_rlimit_nofile 是 Nginx 的核心配置指令,用于 設(shè)置每個(gè) Worker 進(jìn)程能打開的最大文件描述符(File Descriptor)數(shù)量,直接影響 Nginx 的并發(fā)處理能力。
(1)安裝ab測試工具(192.168.10.41)
dnf -y install httpd-tools
(2)對(duì)nginx服務(wù)器進(jìn)行壓力測試(192.168.10.41)
ab -n 100000 -c 1020 http://192.168.10.40/

ab -n 100000 -c 1200 http://192.168.10.40/

ulimit -n

當(dāng)并發(fā)超過1020后報(bào)錯(cuò),是由于系統(tǒng)對(duì)單個(gè)進(jìn)程可打開文件描述符數(shù)量的限制導(dǎo)致的。默認(rèn)情況下,Linux 系統(tǒng)通常限制為 1024 個(gè)文件描述符。
(3)設(shè)置Linux 系統(tǒng)中單個(gè)進(jìn)程可打開的文件描述符數(shù)量(192.168.10.40,192.168.10.41)
vim /etc/security/limits.conf
在最后添加:
* soft nofile 65535 * hard nofile 65535
重新登錄用戶使其生效
ulimit -n

(4)修改nginx配置文件(192.168.10.40)
vim /nginxconf/nginx.conf
添加:
worker_processes 2;
worker_cpu_affinity 0101 1010;
worker_rlimit_nofile 65535;
events {}
http {
……(5)重載nginx服務(wù)(192.168.10.40)
nginx -c /nginxconf/nginx.conf -s reload
(6)對(duì)nginx服務(wù)器進(jìn)行壓力測試(192.168.10.41)
ab -n 100000 -c 1200 http://192.168.10.40/

或
ab -n 100000 -c 1200 -r http://192.168.10.40/
-r:不退出接收錯(cuò)誤,繼續(xù)測試
(7)關(guān)閉nginx服務(wù)(192.168.10.40)
nginx -c /nginxconf/nginx.conf -s stop
二、Nginx模塊(192.168.10.40)
參考官網(wǎng)幫助文檔:http://nginx.org/en/docs/
1、http_addition_module模塊
http_addition_module 是 Nginx 的一個(gè)官方模塊,主要用于動(dòng)態(tài)合并 HTTP 響應(yīng)體。該模塊允許將多個(gè) HTTP 響應(yīng)體合并為單個(gè)響應(yīng)體,從而減少 HTTP 請(qǐng)求次數(shù),提高網(wǎng)站性能和用戶體驗(yàn)。
(1)創(chuàng)建存放目錄并創(chuàng)建文件
cd /usr/share/nginx/html/ mkdir addition cd addition/ echo "hello" > header.html echo "world" > footer.html

(2)修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
添加:
add_before_body /addition/header.html;
add_after_body /addition/footer.html;
(3)啟動(dòng)nginx服務(wù)
systemctl start nginx
(4)訪問驗(yàn)證
使用瀏覽器訪問192.168.10.40

(5)創(chuàng)建test網(wǎng)頁目錄并訪問驗(yàn)證
mkdir /usr/share/nginx/html/test echo "test" > /usr/share/nginx/html/test/index.html
訪問192.168.10.40/test

2、http_sub_module模塊
http_sub_module 是 Nginx 的一個(gè)官方模塊,用于在響應(yīng)內(nèi)容中執(zhí)行字符串替換操作。這個(gè)模塊非常實(shí)用,特別是當(dāng)你需要對(duì)上游服務(wù)器返回的內(nèi)容進(jìn)行修改但又無法直接修改源內(nèi)容時(shí)。
(1)修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
添加:
sub_filter_once off;
sub_filter 'nginx' 'apache';

(2)重啟nginx服務(wù)
systemctl restart nginx
(3)訪問驗(yàn)證
使用瀏覽器訪問192.168.10.40

3、http_random_index_module模塊
http_random_index_module 是 Nginx 的一個(gè)內(nèi)置模塊,用于在請(qǐng)求以斜杠(/)結(jié)尾的目錄時(shí),隨機(jī)選擇一個(gè)文件作為索引文件返回。這個(gè)模塊特別適用于需要展示隨機(jī)內(nèi)容的場景,如輪換展示不同主頁、隨機(jī)圖片展示等。
(1)修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
添加:
random_index on;

(2)重啟nginx服務(wù)
systemctl restart nginx
(3)創(chuàng)建多個(gè)網(wǎng)頁
for i in {a..e};do echo $i > /usr/share/nginx/html/$i.html;done(4)訪問驗(yàn)證
使用瀏覽器訪問192.168.10.40






4、http_mp4_module模塊
http_mp4_module 是 Nginx 的官方模塊,專門用于處理 MP4 視頻文件的偽流媒體(pseudo-streaming)請(qǐng)求。該模塊使 Nginx 能夠支持視頻的時(shí)間范圍請(qǐng)求(Range Requests),實(shí)現(xiàn)視頻的拖放播放和部分加載。
(1)上傳視頻文件到/usr/share/nginx/html目錄
(2)修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
添加:

(3)重啟nginx服務(wù)
systemctl restart nginx
(4)訪問驗(yàn)證
使用瀏覽器訪問192.168.10.40/2025-06-16.mp4

5、http_ssl_module模塊
http_ssl_module 是 Nginx 的核心模塊,用于提供 HTTPS 安全連接支持。它是現(xiàn)代 Web 服務(wù)的安全基礎(chǔ),能夠?qū)崿F(xiàn)數(shù)據(jù)加密傳輸、身份驗(yàn)證和完整性保護(hù)。
(1)使用OpenSSL 生成自簽名證書
cd /etc/nginx/
生成私鑰
openssl genrsa -out nginx-selfsigned.key 2048
創(chuàng)建證書簽名請(qǐng)求(CSR)
openssl req -new -key nginx-selfsigned.key -out nginx-selfsigned.csr -subj "/CN=CN/O=lkk.com/C=CN/ST=beijing/L=beijing"
生成自簽名證書
openssl x509 -req -days 365 -in nginx-selfsigned.csr -signkey nginx-selfsigned.key -out nginx-selfsigned.crt
(2)修改配置文件
vim /etc/nginx/conf.d/default.conf
添加:
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/nginx-selfsigned.crt;
ssl_certificate_key /etc/nginx/nginx-selfsigned.key;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
(3)重啟nginx服務(wù)
systemctl restart nginx
(4)訪問驗(yàn)證
使用瀏覽器訪問https;//192.168.10.40



由于自簽名證書未經(jīng)第三方CA機(jī)構(gòu)驗(yàn)證,瀏覽器會(huì)持續(xù)顯示安全警告
三、Nginx優(yōu)化
1、gzip優(yōu)化(192.168.10.40)
使用 gzip 壓縮功能,可能為我們節(jié)約帶寬,加快傳輸速度,有更好的體驗(yàn),也為我們節(jié)約成本。
Nginx 啟用壓縮功能需要你來 ngx_http_gzip_module 模塊,apache 使用的是 mod_deflate。
一般我們需要壓縮的內(nèi)容有:文本,js,html,css,對(duì)于圖片,視頻,flash 什么的不壓縮,同時(shí)也要注意,我們使用 gzip 的功能是需要消耗 CPU 的。
(1)將index.html網(wǎng)頁內(nèi)容增多
使用復(fù)制粘貼在<p>內(nèi)容</p>


(2)訪問驗(yàn)證
打開瀏覽器,右鍵打開檢查選擇網(wǎng)絡(luò),訪問192.168.10.40查看響應(yīng)文件大小

看到大小為31.8k沒有壓縮
(3)修改配置文件
vim /etc/nginx/nginx.conf
修改:
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
gzip_min_length 1k;
gzip_comp_level 6;
(4)重啟nginx服務(wù)
systemctl restart nginx
(5)訪問驗(yàn)證
先清除瀏覽器緩存
打開瀏覽器,右鍵打開檢查選擇網(wǎng)絡(luò),訪問192.168.10.40查看響應(yīng)文件大小

看到大小為855B已壓縮
2、expires 緩存優(yōu)化(192.168.10.40)
緩存,主要針對(duì)于圖片,css,js 等元素更改機(jī)會(huì)比較少的情況下使用,特別是圖片,占用帶寬大,我們完全可以設(shè)置圖片在瀏覽器本地緩存 365d,css,js,html 可以緩存?zhèn)€ 10 來天,這樣用戶第一次打開加載慢一點(diǎn),第二次,就非??炝?。
(1)上傳devops.png圖片到/usr/share/nginx/html目錄
(2)創(chuàng)建index.html文件
vim /usr/share/nginx/html/index.html
添加:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> </head> <body> <h1>Welcome to nginx!</h1> <img src="devops.png"> </body> </html>
(3)修改配置文件
vim /etc/nginx/conf.d/default.conf
添加:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
root /usr/share/nginx/html;
expires 30d;
add_header Cache-Control "public";
}
(4)重啟nginx服務(wù)
systemctl restart nginx
(5)訪問驗(yàn)證
使用瀏覽訪問192.168.10.40/devops.png

解析:
Cache-Control的值max-age=2592000:緩存有效期 30 天(單位:秒),瀏覽器/CDN 會(huì)在此期間直接使用本地緩存
Expires的值Thu, 17 Jul 2025 08:06:43 GMT:緩存過期時(shí)間(與 Cache-Control 一致,兼容舊瀏覽器)
3、配置防盜鏈
Nginx防盜鏈?zhǔn)且环N保護(hù)服務(wù)器資源不被外部網(wǎng)站非法引用,消耗網(wǎng)絡(luò)流量的重要技術(shù)手段,尤其適用于圖片、視頻、CSS/JS等靜態(tài)資源。解決辦法有幾種:1:水印,品牌宣傳,你的帶寬,服務(wù)器足夠 2:防火墻,直接控制,前提是你知道 IP 來源 3:防盜鏈策略。
這里的方法是直接給予404錯(cuò)誤提示
(1)配置盜用圖片的服務(wù)器(192.168.10.41)
安裝Nginx1.28
添加nginx官方源
tee /etc/yum.repos.d/nginx.repo <<EOF [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true [nginx-mainline] name=nginx mainline repo baseurl=http://nginx.org/packages/mainline/centos/\$releasever/\$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF
dnf -y install nginx
編寫網(wǎng)頁
vim /usr/share/nginx/html/index.html
修改:
<!DOCTYPE html> <html> <head> <title>Welcome to my web!</title> <body> <h1>Welcome to my web!</h1> </body> </html>
啟動(dòng)nginx服務(wù)
systemctl start nginx
訪問網(wǎng)頁
使用瀏覽器訪問192.168.10.41

(2)盜用192.168.10.40網(wǎng)站的圖片(192.168.10.41)
使用瀏覽器訪問192.168.10.40,右擊圖片復(fù)制圖像鏈接

使192.168.10.41服務(wù)器盜用192.168.10.40網(wǎng)站的圖片
vim /usr/share/nginx/html/index.html
添加:

使用瀏覽器訪問192.168.10.41

圖片已盜用
(3)查看日志(192.168.10.40)
查看日志格式
vim /etc/nginx/nginx.conf

監(jiān)控日志
tail -f /var/log/nginx/access.log
使用瀏覽器訪問192.168.10.41

解析:
字段 | 值 | 說明 |
客戶端IP | 192.168.10.1 | 請(qǐng)求來源的IP地址(內(nèi)網(wǎng)用戶) |
標(biāo)識(shí)占位符 | - - | 依次為 遠(yuǎn)程用戶(通常為-)和 認(rèn)證用戶(未啟用則為-) |
請(qǐng)求時(shí)間 | [17/Jun/2025:17:57:04 +0800] | 北京時(shí)間 2025年6月17日 17:57:04 |
請(qǐng)求方法 | "GET /devops.png HTTP/1.1" | 通過HTTP/1.1協(xié)議GET請(qǐng)求/devops.png文件 |
狀態(tài)碼 | 200 | 請(qǐng)求成功(服務(wù)器返回HTTP 200 OK) |
響應(yīng)大小 | 365884 | 返回的PNG圖片大小為365,884字節(jié)(約357KB) |
Referer | "http://192.168.10.41/" | 請(qǐng)求來自192.168.10.41的頁面(防盜鏈關(guān)鍵字段) |
User-Agent | "Mozilla/5.0 (...)" | 客戶端為Edge瀏覽器(基于Chromium 137內(nèi)核) |
附加信息 | "-" | 通常用于記錄Cookie或會(huì)話ID(此處為空) |
(4)開啟盜鏈(192.168.10.40)
vim /etc/nginx/conf.d/default.conf
添加:
valid_referers none blocked 192.168.10.40;
if ($invalid_referer) {
return 404;
}
(5)訪問驗(yàn)證
使用瀏覽器訪問192.168.10.41


圖片已經(jīng)無法顯示,狀態(tài)碼返回404
4、實(shí)現(xiàn) HTTP 到 HTTPS 的重定向(192.168.10.40)
(1)修改配置文件
vim /etc/nginx/conf.d/default.conf
添加:
return 301 https://$host$request_uri;

return 301:使用 301 永久重定向狀態(tài)碼
(2)重啟nginx服務(wù)
systemctl restart nginx
(3)訪問驗(yàn)證
使用瀏覽訪問192.168.10.40


瀏覽器會(huì)自動(dòng)跳轉(zhuǎn)的https
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
nginx 負(fù)載均衡 多站點(diǎn)共享Session
這里我們就 演練一下 以數(shù)據(jù)庫的形來存儲(chǔ)Session,來實(shí)現(xiàn)多站點(diǎn)共享Session2012-11-11
nginx配置域名轉(zhuǎn)發(fā)到其他域名的幾種方法小結(jié)
本文主要介紹了nginx配置域名轉(zhuǎn)發(fā)到其他域名的幾種方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06
使用Nginx和Lua進(jìn)行JWT校驗(yàn)介紹
大家好,本篇文章主要講的是使用Nginx和Lua進(jìn)行JWT校驗(yàn)介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下2021-12-12

