Nginx 服務器常用操作

一. Nginx 常用配置

1. Nginx 總配置文件

nginx 安裝目錄下的 nginx.conf 文件:

# 指定 Nginx worker 進程運行的系統用戶
user  nginx;
# 自動根據 CPU 核心數啟動相應數量的 worker 進程,充分利用多核。
worker_processes  auto;
# 自動將 worker 進程綁定到特定 CPU 核心,減少 CPU 緩存失效,提高性能。
worker_cpu_affinity auto;# 錯誤日志路徑和日志級別
error_log  /var/log/nginx/error.log warn;
# 保存 Nginx 主進程 PID 文件的位置,方便管理。
pid        /var/run/nginx.pid;# 事件段
events {# 每個 worker 進程允許同時處理的最大連接數worker_connections  4096;# 避免多個 worker 同時爭搶新連接,減少驚群效應(適合高并發)accept_mutex on;# worker 一次盡量多接收連接,而不是一次只接一個,提高吞吐量multi_accept on;
}# HTTP 段
http {# 加載文件類型與 MIME 類型的映射表。include       /etc/nginx/mime.types;# 默認 MIME 類型(找不到類型時按二進制流處理)。default_type  application/octet-stream;# 定義訪問日志的格式log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 指定日志文件位置access_log  /var/log/nginx/access.log  main;# 關閉響應頭中 Nginx 版本號,防止暴露版本信息server_tokens  off; # 開啟零拷貝機制,提高靜態文件傳輸性能。sendfile        on;#tcp_nopush     on;# 限制客戶端請求體大小(主要影響文件上傳)client_max_body_size 50m;# 接保持時間(秒),超過這個時間空閑連接會關閉。keepalive_timeout  65;# 啟用 Gzip 壓縮,減少傳輸體積。gzip on;# 小于 1KB 的響應不壓縮。gzip_min_length 1k;# 壓縮級別(1~9,數字越大壓縮比越高但 CPU 開銷越大,6 是平衡值)。gzip_comp_level 6;# 讓代理緩存知道有壓縮版本。gzip_vary on;# 壓縮數據的緩沖區數量和大小。gzip_buffers 16 8k;# 定義要壓縮的內容類型(文本類、JSON、JS、XML、部分圖片等)。gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif  application/x-protobuf application/octet-stream;# 載入 /etc/nginx/conf.d/ 目錄下的所有 .conf 文件,通常這里會放各個站點或服務的具體 server 配置。include /etc/nginx/conf.d/*.conf;}

2. Nginx 子文件

nginx 安裝目錄下的 conf.d 文件夾下可以放置多個子配置文件

如: default.conf:

# 定義一個名字叫 ashen_servers 的上游服務器組
upstream ashen_servers {# 每個 ashen00x 是一個后端服務(IP 或主機名),端口是 8091。# 負載均衡權重(這里都是 1,表示均勻分配請求)。server ashen001:8091  weight=1;server ashen002:8091  weight=1;server ashen003:8091  weight=1;
}server {# 開啟 443 端口,支持 HTTP/2 + SSL。listen 443 http2 ssl;# IPv6 支持。listen [::]:443 http2 ssl;# 該虛擬主機匹配 www.ashentest.com 域名請求server_name www.ashentest.com;# 指定 SSL 證書和私鑰路徑ssl_certificate /etc/nginx/ssl/www.ashentest.com.pem;ssl_certificate_key /etc/nginx/ssl/www.ashentest.com.key;# ssl驗證相關配置# SSL 會話緩存有效期 5 分鐘。ssl_session_timeout  5m;# 加密套件,禁止弱加密算法(!開頭的表示禁用)。# 首選套件:橢圓曲線 Diffie-Hellman 臨時密鑰交換(ECDHE)、RSA 身份認證、AES128 位加密(GCM 模式)、SHA256 消息認證。# ECDHE:臨時密鑰交換,防止密鑰被長期竊取。# ECDH:橢圓曲線 Diffie-Hellman(非臨時密鑰)。# AES:AES 對稱加密算法。# HIGH:高強度加密套件(OpenSSL 內置標簽)。# !NULL:禁用不加密的套件(純明文傳輸)。# !aNULL:禁用匿名認證的套件(無身份驗證,容易中間人攻擊)。# !MD5:禁用基于 MD5 的套件(MD5 已被攻破)。# !ADH:禁用匿名 Diffie-Hellman。# !RC4:禁用 RC4 流加密(已不安全)。# !3DES:禁用 3DES(三重 DES,加密強度低且易受 Sweet32 攻擊)。ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!3DES;# 安全鏈接可選的加密協議# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;# 只允許 TLS 1.1 和 TLS 1.2(TLS 1.0 已廢棄)# 指定允許的 TLS 協議版本。# TLSv1.1:比 TLSv1.0 安全,但現在已逐步棄用。# TLSv1.2:目前主流安全版本(支持 AES-GCM、SHA256 等現代套件)。ssl_protocols TLSv1.1 TLSv1.2;# 服務器優先使用自己選擇的加密算法(增強安全)    ssl_prefer_server_ciphers on;# 最大請求體(文件上傳等)300MBclient_max_body_size 300m;# 默認首頁文件優先級:index.html → index.htm → index.nginx-debian.htmlindex index.html index.htm index.nginx-debian.html;# 根目錄 location / {root   /usr/share/nginx/html;index  index.html index.htm;}# 前端配置location /webtest {alias /usr/share/nginx/html/webtest;index index.html index.htm;}# 配置跨域的前端服務location /yunkongzhixing{add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';if ($request_method = 'OPTIONS') {return 204;}alias /usr/share/nginx/html/yunkongzhixing;index index.html index.htm index.nginx-debian.html;}# 后端配置location /api-test {proxy_set_header Host $host;proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://192.168.1.111:8088/api-test;}# 配置負載均衡的服務location /ashen {proxy_set_header Host $host;proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://ashen_servers/ashen;}}server {listen       80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}# 前端配置location /webtest {alias /usr/share/nginx/html/webtest;index index.html index.htm;}# 后端配置location /api-test {proxy_set_header Host $host;proxy_set_header X-Real-Ip $remote_addr;proxy_set_header X-Forwarded-For $remote_addr;proxy_pass http://192.168.1.111:8088/api-test;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html# 錯誤頁面# 當返回 500/502/503/504 錯誤時,用 /usr/share/nginx/html/50x.html 顯示自定義錯誤頁面。error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}}

二. Nginx 四層代理

上面的配置主要是針對HTTP的七層代理模式, Nginx 通用支持 四層代理模式:

  1. OSI 模型的 第七層:應用層(HTTP、WebSocket、SMTP 等)
  2. OSI 模型的 第四層:傳輸層(TCP/UDP)

兩層代理的核心區別:

對比項四層代理(L4)七層代理(L7)
處理層級只處理 TCP/UDP 流,不解析應用層數據解析 HTTP/HTTPS 等應用層協議
Nginx 模塊stream {}http {}
代理方式類似 IP:PORT 的轉發,透明傳輸基于 URL、Host、Header 等做路由
能否修改數據? 不能改應用層內容? 可以改請求頭、響應內容
性能高(數據包轉發快,延遲低)稍低(要解析、處理 HTTP 內容)
常用場景數據庫代理、TCP 應用、負載均衡、SSL 透傳Web 反向代理、API 網關、靜態資源服務
負載均衡粒度IP+端口級URL、域名、Header、Cookie 級
示例轉發 MySQL 3306、Redis 6379、HTTPS 443根據 URL 轉發 /api 給后端,/static 給靜態服務器

示例:


# 四層代理
stream {# 對 ashen_server 的代理, 需要負載均衡開起 upstreamupstream mongodb_server {server ashen001:8808;server ashen002:8808;}server {listen 18808;proxy_pass ashen_server;}# 對單個服務進去四層代理server {listen 18848;proxy_pass docloud003:8848;}}

三.Tomcat 和 Nginx 啟用 gzip 壓縮

1.Nginx啟用GZIP壓縮

需要修改 Nginx安裝目錄下的conf/nginx.conf文件

添加:

     gzip on;gzip_vary on;gzip_buffers 16 8k;gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/jpeg image/gif image/png;

在這里插入圖片描述

然后重啟Nginx

2.Tomcat啟用 gzip 壓縮

需要修改tomcat安裝目錄下的conf/server.xml文件

<Connector port="8080"protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"    compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla, traviata"   compressableMimeType="text/html,text/xml,text/javascript,application/javascript,text/css,text/plain,text/json"/>

在這里插入圖片描述

然后重啟tomcat

3.開啟壓縮后的效果

在這里插入圖片描述

四.Nginx報Too many open files

Linux是有文件句柄限制的(open files),一般默認是1024,當超過這個數量便會報 Too many open files錯誤

1.查看默認文件句柄數

ulimit -a

在這里插入圖片描述

2.增大允許打開的文件數

有兩種修改方式:

2.1 命令行方式:
ulimit -n 65535

立即生效,對當前用戶有效,重啟后失效

2.2 修改系統配置文件
vim /etc/security/limits.conf

在文件最后加入:

* soft nofile 65535  
* hard nofile 65535

3.修改Nginx配置文件

worker_rlimit_nofile 65535;

在這里插入圖片描述

4.重啟 nginx

nginx -s reload

五.請求鏈接后綴帶 / 和不帶 /的區別

以 http://localhost:8080/test 和 http://localhost:8080/test/ 為例

  1. 帶 / 通常表示訪問的是一個目錄。在 RESTful 風格的 API 中,這可能代表該目錄下的資源集合。
    不帶 / 通常表示訪問的是一個具體的資源。它可以是一個文件或一個單獨的資源實體。

  2. 不同的服務器或框架(如 Flask、Django、FastAPI 等)會根據 URL 結尾的 / 處理方式不同:

如果服務器嚴格區分: 這種情況下 /test 和 /test/ 會被視為完全不同的兩個路由,如果沒有對應的路由規則,就直接返回 404。

如果服務器啟用了自動重定向: 服務器會自動返回一個 301 或 308 重定向 到正確的路徑。

六.靜態文件斷點續傳

1. 添加 nginx 配置

   location /download {alias /mnt/file/;add_header Content-Disposition: 'attachment';add_header  Content-Type application/octet-stream;}

2.將可下載的文件放在 /mnt/file/ 文件夾下即可

3.請求 http:/ip:port/download/ + "文件名稱"即可

七. linux上 springboot項目接收 header 為 null

原因: 可能header中帶下劃線 "_ " , 經過 nginx 轉發后, 會過濾掉該 header, 將下劃線 “_” 改為 "-"即可

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

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

相關文章

PHP官方及第三方下載地址全指南(2025最新版)

PHP官方及第三方下載地址全指南&#xff08;2025最新版&#xff09; 本文整理了PHP官方及主流第三方下載渠道&#xff0c;包含PHP 5.5至8.4各版本的直接下載鏈接&#xff0c;助您快速獲取安全可靠的PHP環境。 一、PHP官方下載渠道 1.1 全球主站下載 網址&#xff1a;https://…

深度剖析Redisson分布式鎖項目實戰

今天在練手項目中也是遇到了許多新的技術&#xff0c;其中我認為最深刻的還是Redisson分布式鎖&#xff0c;這里我就結合一下我項目中用到Redisson分布式鎖的代碼來講述一下Redisson分布式鎖&#xff0c;希望可以幫助大家更深刻地理解這項技術。在之前的文章中我已經講過Rediss…

第四天-創建一個Classic CAN(經典CAN2.0)/CANFD的系統描述ARXML文件

【ARXML專題】-構建CAN/CANFD通信系統:ARXML實戰指南 汽車神經系統的"高速公路" 想象一輛現代汽車如同人體,電子控制單元(ECU)是器官,而CAN總線就是連接它們的神經系統。在自動駕駛時代,傳統CAN2.0的"鄉間小路"已無法滿足數據傳輸需求,CANFD的"…

用架構建模工具Sparx EA繪制企業轉型路線圖

企業數字化轉型面臨諸多挑戰&#xff1a;信息壁壘導致各部門協同困難&#xff0c;資源投入缺乏科學評估&#xff0c;潛在風險難以提前預判。這些問題不僅拖慢轉型進程&#xff0c;還可能引發高昂的試錯成本。 本文將闡述如何運用架構建模工具Sparx EA的核心功能——可視化路線…

STM32——GPIO

總 &#xff1a;STM32——學習總綱 參考資料&#xff1a; STM32F1系列參考手冊-V10&#xff08;中&#xff09; 一、GPIO簡介 1.1 GPIO 特點 1.2 GPIO 電氣特性* stm32芯片資料STM32F103ZET6(English) 1.3 GPIO 引腳分布 電源引腳&#xff1a;V開頭 晶振引腳&#xff1a; …

NUX MG-400 吉他效果器功能原理介紹

NUX MG-400 是一款多功能數字吉他效果器&#xff0c;它的核心原理就是把吉他的模擬信號&#xff0c;通過 A/D 轉換變成數字信號 → 在 DSP 芯片上做建模運算 → 再通過 D/A 轉換還原成模擬信號輸出。 它的硬件 軟件協作設計&#xff0c;基本可以拆成幾個模塊來看&#xff1a; …

Linux——進程管理和計劃任務管理

文章目錄前言一、程序與進程的關系1.1 程序與進程的定義1.2 父進程與子進程二、查看進程信息2.1 ps 命令&#xff08;重點&#xff09;2.2 動態查看進程信息top命令&#xff08;重點&#xff09;2.3 pgrep命令查詢進程信息2.4 pstree命令以樹形結構列出進程信息三、進程的啟動方…

阿里云TranslateGeneral - 機器翻譯SDK-自己封賬單文件版本—仙盟創夢IDE

仙盟創夢IDE代碼<?php /*** 阿里云機器翻譯通用版API調用工具* 文檔參考&#xff1a;https://help.aliyun.com/zh/machine-translation/developer-reference/api-alimt-2018-10-12-translategeneral*/ class AliyunTranslate {// 阿里云訪問密鑰private $accessKeyId;priva…

新字符設備驅動實驗

經過前兩章實驗的實戰操作&#xff0c;我們已經掌握了 Linux 字符設備驅動開發的基本步驟&#xff0c;字符 設備驅動開發重點是使用 register_chrdev 函數注冊字符設備&#xff0c;當不再使用設備的時候就使用 unregister_chrdev 函數注銷字符設備&#xff0c;驅動模塊加載成功…

【更新公告】C++算法·線段樹

之前的線段樹知識都忘了qwq 現在在重新學線段樹 下一篇就是寫線段樹了&#xff0c;例題已經找好了 A了1遍&#xff0c;但是用的玄學代碼ee 下面是更新公告 更新公告 更新模式改為2~3天1篇 但是絕對高質量&#xff01;&#xff01; (平均質量分93夠嗎qwq) 如果例題好找盡量給出2…

pyqtgraph 庫 右鍵菜單欄插件漢化

第一步&#xff0c;打開pyqtgraph文件夾。 第二步&#xff1a;打開graphicsItems&#xff0c;將PlotItem和ViewBox中的.py文件中的英文替換為中文&#xff0c;運行軟件即可看到插件右鍵的菜單欄成為中文。 第三步&#xff1a;GraphicsScene中的&#xff0c;等找到相應的右鍵菜單…

docker鏡像解決的一些問題

1 概述Docker鏡像技術通過創新性的設計&#xff0c;徹底解決了應用交付領域的核心痛點&#xff0c;已經成為已成為云原生時代的事實標準。其核心價值在于??通過標準化封裝實現"一次構建&#xff0c;處處運行"??&#xff0c;從根本上改變了軟件交付的生命周期。2 …

10.從開始寫LINUX內核——時鐘中斷

Linux 0.12 內核時鐘中斷實現&#xff1a;從初始化到中斷響應時鐘中斷是操作系統中最基礎且最重要的中斷之一&#xff0c;它為系統提供時間基準&#xff0c;支持進程調度、定時器等核心功能。本文將基于 Linux 0.12 內核的 setup 程序框架&#xff0c;詳細介紹時鐘中斷的完整實…

Effective C++ 條款45:運用成員函數模板接受所有兼容類型

Effective C 條款45&#xff1a;運用成員函數模板接受所有兼容類型核心思想&#xff1a;使用成員函數模板&#xff08;member function templates&#xff09;生成可接受兼容類型的函數&#xff0c;特別是泛型拷貝構造函數和賦值操作符&#xff0c;同時避免抑制編譯器生成的默認…

華測科技(北京)的3D GPR數據分析

很高興得到了張總的支持&#xff0c;獲得了他們雷達的數據&#xff0c;并寫了雷達數據讀取和轉換文件。1 背景搜索后發現 華測科技&#xff08;北京&#xff09;有限公司 的實力很強&#xff0c;因為他們的檢測可達100km/h的時速。以前我只知道行業內 青島中電眾益 的3D GPR產…

X86、ARM與C86架構全面對比分析:性能、功耗、成本與生態系統

目錄標題X86、ARM與C86架構全面對比分析&#xff1a;性能、功耗、成本與生態系統一、架構概述與發展背景1.1 X86架構&#xff1a;PC與服務器市場的傳統霸主1.2 ARM架構&#xff1a;移動領域的王者與新興服務器力量1.3 C86架構&#xff1a;國產x86兼容的創新嘗試二、性能表現對比…

w嵌入式分享合集66

自己的原文哦~ https://blog.51cto.com/whaosoft/14132240 一、STM32的NRST管腳異常復位問題 這個問題是客戶對開發的平臺做EMS 浪涌測試的時候發生的&#xff0c;平臺上使用了一個STM32G474 RCT6 MCU 。在某個等級的EMS 測試中&#xff0c; 客戶發現MCU有時候會異常…

ZKmall開源商城的數據校驗之道:用規范守護業務基石

在電商系統里&#xff0c;數據就像流淌的血液 —— 用戶填的手機號、下單的商品數量、支付的金額&#xff0c;每一個數字、每一段文字都得靠譜。要是數據出了錯&#xff0c;輕則訂單下不了&#xff0c;重則錢貨兩空。ZKmall 開源商城作為一個分布式電商系統&#xff0c;每天要處…

QML實現數據可視化

界面樣式 項目開發流程 1.通過QtCreator創建一個Qt Quick插件,插件命名為CarPanMod; 2.通過QtCreator創建一個Qt Quick Application,命名為QmlPro; 3.在插件CarPanMod中實現條形圖,折線圖和餅狀圖的繪制; 4.在應用程序QmlPro中,添加插件的導入路徑; 5.在應用程序中,通過i…

實時計算 記錄

《大數據架構師》海量實時廣告流平臺架構設計與實踐 《架構師必備技能之集群資源評估.pdf》 參考&#xff1a; 大型廣告系統架構與實現 架構圖