Nginx 優化

文章目錄

  • 1、隱藏版本號
  • 2、修改用戶與組
  • 3、緩存時間
  • 4、日志切割
  • 5、連接超時
  • 6、更改進程數
  • 7、配置網頁
  • 8、防盜鏈

1、隱藏版本號

隱藏nginx的版本號,為了防止惡意用戶利用已知漏洞進行攻擊

## 查看版本號
curl -I http://192.168.10.23方法一:修改配置文件方式
vim /usr/local/nginx/conf/nginx.conf
http {include	mime.types;default_type	application/octet-stream;## 添加,關閉版本號server_tokens off;	......
}systemctl restart nginx
curl -I http://192.168.10.23方法二: 
vim /opt/nginx-1.12.0/src/core/nginx.h
#define NGINX_VERSION "1.1.1" 					#修改版本號
#define NGINX_VER "IIS" NGINX_VERSION 			#修改服務器類型cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
make -j 2vim /usr/local/nginx/conf/nginx.conf
http {include       mime.types;default_type  application/octet-stream;server_tokens on;......
}## 重啟服務
systemctl restart nginx
## 測試
curl -I http://192.168.10.23

2、修改用戶與組

vim /usr/local/nginx/conf/nginx.conf
## 取消注釋,修改用戶為 nginx ,組為 nginx
user nginx nginx; 								
## 重啟
systemctl restart nginx
## 查看
ps aux | grep nginx
## 主進程由root創建,子進程由nginx創建

3、緩存時間

當Nginx將網頁數據返回給客戶端后,可設置緩存的時間,以方便在日后進行相同內容的請求時直接返回,避免重復請求,加快了訪問速度;一般針對靜態網頁設置,對動態網頁不設置緩存時間
設置緩存過期時間,主要是控制靜態資源的緩存時間, 方便提高網站訪問速度

vim /usr/local/nginx/conf/nginx.conf
## 加入新的 location,以圖片作為緩存對象
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ { 		root html;## 指定緩存時間,1天expires 1d;				## 1s,1m,1h			
}#重啟服務
systemctl restart nginx

4、日志切割

vim /opt/fenge.sh
#!/bin/bash
## 顯示前一天的時間
day=$(date -d "-1 day" "+%Y%m%d")	logs_path="/var/log/nginx"
pid_path="/usr/local/nginx/logs/nginx.pid"## 判斷路徑是否存在,不存在則創建
[ -d $logs_path ] || mkdir -p $logs_path## 創建日志文件目錄
mv /usr/local/nginx/logs/access.log ${logs_path}/kgc.com-access.log-$day	## 向指定進程發送USR1信號
kill -USR1 $(cat $pid_path)		
## 建新日志文件
find $logs_path -mtime +30 -exec rm -rf {} \;	
## 刪除30天之前的日志文件
## find $logs_path -mtime +30 | xargs rm -rf ## 文件賦權
chmod +x /opt/fenge.sh## 啟動腳本
/opt/fenge.sh
ls /var/log/nginx
ls /usr/local/nginx/logs/access.log ## 定時任務
crontab -e
0 1 * * * /opt/fenge.sh

5、連接超時

HTTP有一個KeepAlive模式,它告訴web服務器在處理完一個請求后保持這個TCP連接的打開狀態。若接收到來自同一客戶端的其它請求,服務端會利用這個未被關閉的連接,而不需要再建立一個連接。
KeepAlive 在一段時間內保持打開狀態,它們會在這段時間內占用資源。占用過多就會影響性能

vim /usr/local/nginx/conf/nginx.conf
http {
...... keepalive_timeout 65 180;        三次握手的超時時間client_header_timeout 80;        等待客戶端發送請求頭的超時時間會送408 錯誤client_body_timeout 80;          設置客戶端發送請求體的超時時間
...... 
}

keepalive_timeout
指定KeepAlive的超時時間(timeout)。指定每個TCP連接最多可以保持多長時間,服務器將會在這個時間后關閉連接。 Nginx的默認值是65秒,有些瀏覽器最多只保持 60 秒,所以可以設定為 60 秒。若將它設置為0,就禁止了keepalive 連接
第二個參數(可選的)指定了在響應頭Keep-Alive:timeout=time中的time值。這個頭能夠讓一些瀏覽器主動關閉連接,這樣服務器就不必去關閉連接了。沒有這個參數,Nginx 不會發送 Keep-Alive 響應頭

client_header_timeout
客戶端向服務端發送一個完整的 request header 的超時時間。如果客戶端在指定時間內沒有發送一個完整的 request header,Nginx 返回 HTTP 408(Request Timed Out)

client_body_timeout
指定客戶端與服務端建立連接后發送 request body 的超時時間。如果客戶端在指定時間內沒有發送任何內容,Nginx 返回 HTTP 408(Request Timed Out)

6、更改進程數

在高并發場景,需要啟動更多的Nginx進程以保證快速響應,以處理用戶的請求,避免造成阻塞

## 查看cpu核數
cat /proc/cpuinfo | grep -c "physical id"
#查看nginx主進程中包含幾個子進程
ps aux | grep nginx							vim /usr/local/nginx/conf/nginx.conf
worker_processes  2;
## 設置每個進程由不同cpu處理,進程數配為40001 0010 0100 1000
worker_cpu_affinity 01 10;## 重啟
systemctl restart nginx

7、配置網頁

Nginx的ngx_http_gzip_module壓縮模塊提供對文件內容壓縮的功能
允許Nginx服務器將輸出內容在發送客戶端之前進行壓縮,以節約網站帶寬,提升用戶的訪問體驗,默認已經安裝
可在配置文件中加入相應的壓縮功能參數對壓縮性能進行優化

vim /usr/local/nginx/conf/nginx.conf
http {
...... ## 取消注釋,開啟gzip壓縮功能gzip on;	## 最小壓縮文件大小gzip_min_length 1k; ## 壓縮緩沖區,大小為464k緩沖區gzip_buffers 4 64k;## 壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)	gzip_http_version 1.1; ## 壓縮比率gzip_comp_level 6; ## 支持前端緩存服務器存儲壓縮頁面gzip_vary on;## 壓縮類型,表示哪些網頁文檔啟用壓縮功能	gzip_types text/plain text/javascript application/x-javascript text/css text/xml application/xml application/xml+rss image/jpg image/jpeg image/png image/gif application/x-httpd-php application/javascript application/json;
...... 
}cd /usr/local/nginx/html
先將game.jpg文件傳到/usr/local/nginx/html目錄下
vim index.html
...... 
<img src="game.jpg"/>				#網頁中插入圖片
</body>
</html>nginx -s reload在Linux系統中,打開火狐瀏覽器,右擊點查看元素
選擇 網絡 ---> 選擇 HTML、WS、其他 
訪問 http://192.168.10.23 ,雙擊200響應消息查看響應頭中包含 Content-Encoding: gzip

8、防盜鏈

----------------配置防盜鏈-------------------
vim /usr/local/nginx/conf/nginx.conf
http {
......server {......location ~* \.(jpg|gif|swf)$ {valid_referers none blocked *.kgc.com kgc.com;if ( $invalid_referer ) {rewrite ^/ http://www.kgc.com/error.png;#return 403;}} ......}
}
----------------------------------------------------------------------------------------------------------
~* \.(jpg|gif|swf)$ :這段正則表達式表示匹配不區分大小寫,以.jpg 或.gif 或.swf 結尾的文件;
valid_referers :設置信任的網站,可以正常使用圖片;
none:允許沒有http_refer的請求訪問資源(根據Referer的定義,它的作用是指示一個請求是從哪里鏈接過來的,如果直接在瀏覽器的地址欄中輸入一個資源的URL地址,那么這種請求是不會包含 Referer 字段的),如 http://www.kgc.com/game.jpg
我們使用 http://www.kgc.com 訪問顯示的圖片,可以理解成 http://www.kgc.com/game.jpg 這個請求是從 http://www.kgc.com 這個鏈接過來的。
blocked:允許不是http://開頭的,不帶協議的請求訪問資源; 
*.kgc.com:只允許來自指定域名的請求訪問資源,如 http://www.kgc.comif語句:如果鏈接的來源域名不在valid_referers所列出的列表中,$invalid_referer為true,則執行后面的操作,即進行重寫或返回 403 頁面。
----------------------------------------------------------------------------------------------------------
網頁準備:
Web源主機(192.168.10.23)配置:
cd /usr/local/nginx/html
將game.jpg、error.png文件傳到/usr/local/nginx/html目錄下
vim index.html
<html>
<body>
<img src="game.jpg"/>
</body>
</html>echo "192.168.10.23 www.kgc.com" >> /etc/hosts 
echo "192.168.10.80 www.benet.com" >> /etc/hosts 盜鏈網站主機(192.168.10.80):
cd /usr/local/nginx/html
vim index.html
...... 
<img src="http://www.kgc.com/game.jpg"/>
</body>
</html>echo "192.168.10.23 www.kgc.com" >> /etc/hosts 
echo "192.168.10.80 www.benet.com" >> /etc/hosts 在盜圖網站主機上進行瀏覽器驗證
http://www.benet.com

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

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

相關文章

基于多模態與主動學習的車船飛機圖像識別系統研究與應用技術方案

技術方案 一、技術背景與研究現狀 圖像識別是計算機視覺的核心任務之一&#xff0c;隨著深度學習的發展&#xff0c;基于 卷積神經網絡&#xff08;CNN&#xff09; 與 視覺Transformer&#xff08;ViT&#xff09; 的圖像分類方法已成為主流。 根據《圖像分類技術選型——截止…

Word2Vec詞嵌入技術和動態詞嵌入技術

Word2Vec&#xff08;Word to Vector&#xff09;是 2013 年由 Google 團隊提出的無監督詞嵌入模型&#xff0c;是一種靜態詞嵌入技術&#xff0c;核心目標是將自然語言中的離散詞匯映射為低維、稠密的實數向量&#xff08;即 “詞向量”&#xff09;&#xff0c;讓向量空間的距…

Netty從0到1系列之Netty邏輯架構【上】

文章目錄一、Netty邏輯架構【上】1.1 網絡通信層1.1.1 BootStrap & ServerBootStrap1. ?核心方法鏈與配置2. ? 架構與流程3. ? 底層實現與原理分析4. ? 實踐經驗與總結1.1.2 Channel1.2 事件調度層1.2.1 事件調度層概述1.2.2 EventLoop【事件循環】1.2.3 EventLoopGrou…

Spring Cloud 高頻面試題詳解(含代碼示例與深度解析)

文章目錄Spring Cloud 高頻面試題詳解&#xff08;含代碼示例與深度解析&#xff09;1. 什么是 Spring Cloud&#xff1f;它與 Spring Boot 有什么關系&#xff1f;2. 服務發現&#xff1a;Eureka 和 Nacos 的區別與選型&#xff1f;Eureka 示例與原理Eureka vs Nacos 對比表3.…

Ascend310B重構驅動run包

在Atlas 200I AI加速模塊(Ascend310B)移植過程中如需要將自己編譯的Image、dt.img及內核模塊打包到啟動鏡像包中需要對"Ascend-hdk-310b-npu-driver-soc_<version>_linux-aarch64.run"(下面統稱驅動run包)進行重構。下面將介紹如何重構run包。 重構驅動run包需…

Leecode hot100 - 287. 尋找重復數

題目描述 287. 尋找重復數 - 力扣&#xff08;LeetCode&#xff09; 定一個包含 n 1 個整數的數組 nums &#xff0c;其數字都在 [1, n] 范圍內&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一個重復的整數。 假設 nums 只有 一個重復的整數 &#xff0c;返…

機器人控制器開發(驅動層——奧比大白相機適配)

文章總覽 編譯OrbbecSDK_ROS2的代碼 執行命令 colcon buildros2 launch orbbec_camera dabai.launch.py問題1&#xff1a; 運行時報錯&#xff1a; [component_container-1] [ERROR] [1757153916.450795107] [camera.camera_container]: Failed to load library: Could not…

`vcpkg` 微軟開源的 C/C++ 包管理工具的使用和安裝使用spdlog

vcpkg 是 微軟開源的 C/C 包管理工具&#xff0c;類似于 Python 的 pip、Node.js 的 npm、Rust 的 cargo。 它的主要作用是&#xff1a;幫助你快速下載、編譯、安裝和管理 C/C 第三方庫&#xff0c;并自動配置到你的項目&#xff08;比如 Visual Studio、CMake、MSBuild&#x…

Mysql 幻讀詳解

我們來詳細地聊一聊 MySQL InnoDB 中的“幻讀”&#xff08;Phantom Read&#xff09;問題。這是一個在數據庫事務隔離中非常核心且有時令人困惑的概念。 我會從定義、例子、原因以及解決方案幾個方面來徹底講清楚。 1. 什么是幻讀&#xff1f; 官方定義&#xff1a;幻讀指的…

如何生成 GitHub Token(用于 Hexo 部署):保姆級教程+避坑指南

如何生成 GitHub Token&#xff08;用于 Hexo 部署&#xff09;&#xff1a;保姆級教程避坑指南 前置說明&#xff1a;為什么需要 GitHub Token&#xff1f; 在使用 Hexo 部署博客到 GitHub Pages 時&#xff0c;你可能會遇到「密碼驗證失敗」或「需要雙重驗證」的問題——這…

常用加密算法之 AES 簡介及應用

相關系列文章 常用加密算法之 SM4 簡介及應用常用加密算法之 RSA 簡介及應用 引言 AES&#xff08;Advanced Encryption Standard&#xff0c;高級加密標準&#xff09;是一種??廣泛使用的對稱分組加密算法??&#xff0c;它使用相同的密鑰進行加密和解密操作&#xff0c…

Java面試問題記錄(一)

一、Java 核心基礎與進階1、我們知道 Java 中存在 “值傳遞” 和 “引用傳遞” 的說法&#xff0c;你能結合具體例子&#xff0c;說明 Java 到底是值傳遞還是引用傳遞嗎&#xff1f;這背后涉及到 JVM 中哪些內存區域的交互&#xff1f;Java中只有值傳遞&#xff0c;不存在引用傳…

Redis 主從復制、哨兵與 Cluster 集群部署

文章摘要 本文基于 VMware 虛擬機環境&#xff0c;詳細講解 Redis 高可用架構的核心組件與部署流程&#xff0c;涵蓋三大核心模塊&#xff1a;Redis 主從復制&#xff08;實現數據備份與讀寫分離&#xff09;、Redis 哨兵&#xff08;基于主從復制實現故障自動轉移&#xff0c;…

ElementUI 中 validateField 對部分表單字段數組進行校驗時多次回調問題

目錄 方案一&#xff1a;循環調用 Promise.all 合并結果 方案二&#xff1a;直接傳入數組字段 總結 在實際業務中&#xff0c;我們有時只需要對表單的部分字段進行校驗。ElementUI 提供的 validateField 方法支持單個字段&#xff0c;也支持字段數組&#xff0c;但在使用時…

Visual Studio 2026 震撼發布!AI 智能編程時代正式來臨

Visual Studio 2026 震撼發布&#xff01;AI 智能編程時代正式來臨 Visual Studio 2026 Insider圖標 開發者們的開發環境即將迎來前所未有的智能革命&#xff0c;微軟用Visual Studio 2026 重新定義了編碼體驗。 2025年9月10日&#xff0c;微軟正式推出了Visual Studio 2026 In…

Gamma AI:高效制作PPT的智能生成工具

你有沒有過這種崩潰時刻&#xff1f;領導讓你下午交一份產品介紹 PPT&#xff0c;你打開模板網站翻了半小時沒找到合適的&#xff0c;好不容易選了個模板&#xff0c;又得手動調整文字間距、搭配圖片&#xff0c;光是把數據做成圖表就花了一小時&#xff0c;最后趕出來的 PPT 還…

Python副業新玩法:用Flask搭小程序后端,躺賺被動收入的秘密

凌晨1點&#xff0c;林浩合上電腦時&#xff0c;手機彈出一條微信消息——是上周幫一家社區水果店搭的小程序后端&#xff0c;商家發來了當月的服務費到賬提醒。他靠在椅背上笑了&#xff1a;這是這個月第8筆“睡后收入”&#xff0c;加起來剛好覆蓋了下個月的房貸。半年前&…

基于PyQt5和阿里云TTS的語音合成應用開發實戰[附源碼】

項目概述 本文將詳細介紹一個基于PyQt5圖形界面框架和阿里云TTS(Text-to-Speech)服務的語音合成桌面應用程序的開發過程。該應用提供了完整的文字轉語音功能,包括多音色選擇、參數調節、實時試聽、語速調節和音頻下載等特性。 技術棧 前端界面: PyQt5 語音合成: 阿里云TTS服…

基于esp32c3 rust embassy 的墨水屏程序

EPD Reader 基于ESP32-C3的電子墨水屏閱讀器&#xff0c;支持ap 配網、sntp 時間同步、txt閱讀、天氣預報、顯示節假日信息、農歷顯示、自動休眠、web配置等功能。這是在另一個項目 一個rust embassy esp32c3 的練習項目-CSDN博客的基礎上修改的 。 界面比較粗糙&#xff0c;以…

Spring 單例測試及線程安全

創建一個賬戶類 package com.duanhw.demo22.account;import org.springframework.beans.factory.annotation.Value;//Service public class AccountService {Value("1000")private Integer balance;//存款public void deposit(Integer amount){int newbalance balanc…