Nginx優(yōu)化和模塊解讀
實驗環(huá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基本啟動文件(192.168.10.40)
mkdir /nginxconf vim /nginxconf/nginx.conf
添加:
events {} http { server { } }
檢查配置文件語法
nginx -c /nginxconf/nginx.conf -t
啟動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、虛擬主機(基于域名)(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、虛擬主機(基于端口)(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 配置中最重要的指令之一,用于匹配請求的 URI(路徑),并定義如何處理這些請求(如代理、重定向、返回靜態(tài)文件等)
(1)基本語法
location [匹配模式] URI { # 配置指令 }
- [匹配模式]:可以是前綴匹配、正則匹配、精確匹配
- URI:要匹配的路徑
(2)匹配模式類型
匹配模式 | 語法示例 | 說明 |
精確匹配 | location = /path | 只匹配完全相同的路徑(優(yōu)先級最高) |
前綴匹配 | location /prefix | 匹配以 /prefix 開頭的路徑(按最長匹配優(yōu)先) |
正則匹配(區(qū)分大小寫) | location ~ \.php$ | 使用正則表達式匹配(區(qū)分大小寫,第一個匹配成功的生效) |
正則匹配(不區(qū)分大小寫) | `location ~* .(jpg png)` | 正則匹配不區(qū)分大小寫 |
通用匹配 | location / | 匹配所有未被其他 location 匹配的請求(優(yōu)先級最低) |
(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)實驗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ù)版本號(192.168.10.40)
默認情況下,Nginx 會在 HTTP 響應(yīng)頭中顯示版本號(如 Server: nginx/1.25.3),這可能存在安全風險。
查看百度的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、定義進程數(shù)量(192.168.10.40)
(1)查看nginx工作進程數(shù)
ps -ef | grep nginx
(2)修改配置文件(設(shè)置為兩個工作進程)
vim /nginxconf/nginx.conf
添加:
worker_processes 2; events {} http { ……
或者使用worker_processes auto; 自動匹配 CPU 核心數(shù)
(3)重啟nginx服務(wù)
nginx -c /nginxconf/nginx.conf -s stop nginx -c /nginxconf/nginx.conf
(4)查看nginx工作進程數(shù)
ps -ef | grep nginx
9、CPU親和性(192.168.10.40)
worker_cpu_affinity 是 Nginx 中用于 綁定 Worker 進程到特定 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è)置進程打開文件數(shù)量
worker_rlimit_nofile 是 Nginx 的核心配置指令,用于 設(shè)置每個 Worker 進程能打開的最大文件描述符(File Descriptor)數(shù)量,直接影響 Nginx 的并發(fā)處理能力。
(1)安裝ab測試工具(192.168.10.41)
dnf -y install httpd-tools
(2)對nginx服務(wù)器進行壓力測試(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
當并發(fā)超過1020后報錯,是由于系統(tǒng)對單個進程可打開文件描述符數(shù)量的限制導(dǎo)致的。默認情況下,Linux 系統(tǒng)通常限制為 1024 個文件描述符。
(3)設(shè)置Linux 系統(tǒng)中單個進程可打開的文件描述符數(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)對nginx服務(wù)器進行壓力測試(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:不退出接收錯誤,繼續(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 的一個官方模塊,主要用于動態(tài)合并 HTTP 響應(yīng)體。該模塊允許將多個 HTTP 響應(yīng)體合并為單個響應(yīng)體,從而減少 HTTP 請求次數(shù),提高網(wǎng)站性能和用戶體驗。
(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)啟動nginx服務(wù)
systemctl start nginx
(4)訪問驗證
使用瀏覽器訪問192.168.10.40
(5)創(chuàng)建test網(wǎng)頁目錄并訪問驗證
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 的一個官方模塊,用于在響應(yīng)內(nèi)容中執(zhí)行字符串替換操作。這個模塊非常實用,特別是當你需要對上游服務(wù)器返回的內(nèi)容進行修改但又無法直接修改源內(nèi)容時。
(1)修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
添加:
sub_filter_once off; sub_filter 'nginx' 'apache';
(2)重啟nginx服務(wù)
systemctl restart nginx
(3)訪問驗證
使用瀏覽器訪問192.168.10.40
3、http_random_index_module模塊
http_random_index_module 是 Nginx 的一個內(nèi)置模塊,用于在請求以斜杠(/)結(jié)尾的目錄時,隨機選擇一個文件作為索引文件返回。這個模塊特別適用于需要展示隨機內(nèi)容的場景,如輪換展示不同主頁、隨機圖片展示等。
(1)修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
添加:
random_index on;
(2)重啟nginx服務(wù)
systemctl restart nginx
(3)創(chuàng)建多個網(wǎng)頁
for i in {a..e};do echo $i > /usr/share/nginx/html/$i.html;done
(4)訪問驗證
使用瀏覽器訪問192.168.10.40
4、http_mp4_module模塊
http_mp4_module 是 Nginx 的官方模塊,專門用于處理 MP4 視頻文件的偽流媒體(pseudo-streaming)請求。該模塊使 Nginx 能夠支持視頻的時間范圍請求(Range Requests),實現(xiàn)視頻的拖放播放和部分加載。
(1)上傳視頻文件到/usr/share/nginx/html目錄
(2)修改nginx配置文件
vim /etc/nginx/conf.d/default.conf
添加:
(3)重啟nginx服務(wù)
systemctl restart nginx
(4)訪問驗證
使用瀏覽器訪問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ù)加密傳輸、身份驗證和完整性保護。
(1)使用OpenSSL 生成自簽名證書
cd /etc/nginx/
生成私鑰
openssl genrsa -out nginx-selfsigned.key 2048
創(chuà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)訪問驗證
使用瀏覽器訪問https;//192.168.10.40
由于自簽名證書未經(jīng)第三方CA機構(gòu)驗證,瀏覽器會持續(xù)顯示安全警告
三、Nginx優(yōu)化
1、gzip優(yōu)化(192.168.10.40)
使用 gzip 壓縮功能,可能為我們節(jié)約帶寬,加快傳輸速度,有更好的體驗,也為我們節(jié)約成本。
Nginx 啟用壓縮功能需要你來 ngx_http_gzip_module 模塊,apache 使用的是 mod_deflate。
一般我們需要壓縮的內(nèi)容有:文本,js,html,css,對于圖片,視頻,flash 什么的不壓縮,同時也要注意,我們使用 gzip 的功能是需要消耗 CPU 的。
(1)將index.html網(wǎng)頁內(nèi)容增多
使用復(fù)制粘貼在<p>內(nèi)容</p>
(2)訪問驗證
打開瀏覽器,右鍵打開檢查選擇網(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)訪問驗證
先清除瀏覽器緩存
打開瀏覽器,右鍵打開檢查選擇網(wǎng)絡(luò),訪問192.168.10.40查看響應(yīng)文件大小
看到大小為855B已壓縮
2、expires 緩存優(yōu)化(192.168.10.40)
緩存,主要針對于圖片,css,js 等元素更改機會比較少的情況下使用,特別是圖片,占用帶寬大,我們完全可以設(shè)置圖片在瀏覽器本地緩存 365d,css,js,html 可以緩存?zhèn)€ 10 來天,這樣用戶第一次打開加載慢一點,第二次,就非??炝?。
(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)訪問驗證
使用瀏覽訪問192.168.10.40/devops.png
解析:
Cache-Control的值max-age=2592000:緩存有效期 30 天(單位:秒),瀏覽器/CDN 會在此期間直接使用本地緩存
Expires的值Thu, 17 Jul 2025 08:06:43 GMT:緩存過期時間(與 Cache-Control 一致,兼容舊瀏覽器)
3、配置防盜鏈
Nginx防盜鏈是一種保護服務(wù)器資源不被外部網(wǎng)站非法引用,消耗網(wǎng)絡(luò)流量的重要技術(shù)手段,尤其適用于圖片、視頻、CSS/JS等靜態(tài)資源。解決辦法有幾種:1:水印,品牌宣傳,你的帶寬,服務(wù)器足夠 2:防火墻,直接控制,前提是你知道 IP 來源 3:防盜鏈策略。
這里的方法是直接給予404錯誤提示
(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>
啟動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 | 請求來源的IP地址(內(nèi)網(wǎng)用戶) |
標識占位符 | - - | 依次為 遠程用戶(通常為-)和 認證用戶(未啟用則為-) |
請求時間 | [17/Jun/2025:17:57:04 +0800] | 北京時間 2025年6月17日 17:57:04 |
請求方法 | "GET /devops.png HTTP/1.1" | 通過HTTP/1.1協(xié)議GET請求/devops.png文件 |
狀態(tài)碼 | 200 | 請求成功(服務(wù)器返回HTTP 200 OK) |
響應(yīng)大小 | 365884 | 返回的PNG圖片大小為365,884字節(jié)(約357KB) |
Referer | "http://192.168.10.41/" | 請求來自192.168.10.41的頁面(防盜鏈關(guān)鍵字段) |
User-Agent | "Mozilla/5.0 (...)" | 客戶端為Edge瀏覽器(基于Chromium 137內(nèi)核) |
附加信息 | "-" | 通常用于記錄Cookie或會話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)訪問驗證
使用瀏覽器訪問192.168.10.41
圖片已經(jīng)無法顯示,狀態(tài)碼返回404
4、實現(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)訪問驗證
使用瀏覽訪問192.168.10.40
瀏覽器會自動跳轉(zhuǎn)的https
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Nginx 反向代理、負載均衡、頁面緩存、URL重寫及讀寫分離詳解
本篇文章主要介紹了Nginx 反向代理、負載均衡、頁面緩存、URL重寫及讀寫分離詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2016-12-12Nginx 訪問 /root/下 403 Forbidden問題解決
在使用Nginx作為Web服務(wù)器時,可能會遇到403 Forbidden錯誤,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-05-05