最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Nginx超詳細實戰(zhàn)詳解教程

 更新時間:2026年05月27日 09:40:10   作者:JAVA社區(qū)  
Nginx高性能實戰(zhàn)詳解,涵蓋靜態(tài)資源優(yōu)化、反向代理、負載均衡、SSL配置等多核心功能,助你構(gòu)建穩(wěn)定高效Web架構(gòu),本文介紹Nginx超詳細實戰(zhàn)詳解教程,感興趣的朋友一起看看吧

Java進階全套教程(九)—— Nginx超詳細實戰(zhàn)詳解教程

一、Nginx核心概述

1.1 什么是Nginx

Nginx是一款高性能、輕量級、開源免費的HTTP和反向代理服務(wù)器,同時兼具郵件代理服務(wù)器、通用TCP/UDP代理服務(wù)器功能。由俄羅斯工程師Igor Sysoev開發(fā),專為高并發(fā)、低資源消耗場景設(shè)計,徹底解決了傳統(tǒng)Apache服務(wù)器高并發(fā)卡頓、內(nèi)存占用過高的痛點。

相較于傳統(tǒng)Web服務(wù)器,Nginx核心優(yōu)勢突出:內(nèi)存占用極低、毫秒級啟動、支持數(shù)萬級并發(fā)連接,依托異步非阻塞、事件驅(qū)動的核心運行模型,成為互聯(lián)網(wǎng)企業(yè)Web服務(wù)、反向代理、負載均衡的首選中間件,廣泛應(yīng)用于電商、直播、門戶、微服務(wù)架構(gòu)等場景。

1.2 主流Web服務(wù)器對比

目前企業(yè)常用的Web服務(wù)器包含Apache、Tomcat、Nginx、IIS,四款服務(wù)器定位與適用場景差異顯著:

  • Apache:老牌開源服務(wù)器,基于同步阻塞模型,穩(wěn)定性極強,但并發(fā)能力弱,資源開銷大,適合靜態(tài)網(wǎng)站、低并發(fā)傳統(tǒng)項目,現(xiàn)已逐步被Nginx替代。
  • Tomcat:Java專屬應(yīng)用服務(wù)器,支持JSP、Servlet運行,主打動態(tài)Java項目解析,并發(fā)性能一般,僅用于Java后端服務(wù)部署,不擅長靜態(tài)資源處理。
  • IIS:微軟自帶服務(wù)器,適配Windows系統(tǒng),兼容性強,多用于Windows平臺.NET項目,跨平臺性差、性能較弱。
  • Nginx:跨平臺高性能服務(wù)器,兼顧靜態(tài)資源處理、反向代理、負載均衡,支持高并發(fā)、熱部署,無平臺限制,是目前企業(yè)主流首選。

1.3 Nginx核心運行模型

Nginx核心采用異步非阻塞事件驅(qū)動模型,這是其高并發(fā)能力的核心原理。區(qū)別于同步阻塞模型(一個請求占用一個線程,線程阻塞等待響應(yīng)),Nginx通過單個工作線程輪詢處理多個客戶端請求,無線程阻塞、無頻繁線程創(chuàng)建銷毀開銷。

在Linux系統(tǒng)中,Nginx默認采用epoll高效事件池,能夠監(jiān)聽海量文件描述符,官方基準測試可支撐5萬+瞬時并發(fā)連接,生產(chǎn)環(huán)境穩(wěn)定承載2-4萬并發(fā),且內(nèi)存占用僅為Apache的1/5左右。

二、Nginx四大核心應(yīng)用場景

2.1 靜態(tài)資源HTTP服務(wù)器

Nginx原生優(yōu)化了靜態(tài)資源(HTML、CSS、JS、圖片、視頻)的解析與傳輸能力,無需依賴后端程序,可獨立部署靜態(tài)網(wǎng)站。相較于Tomcat、Apache,Nginx對靜態(tài)文件的讀取、緩存、壓縮效率更高,響應(yīng)速度提升3-10倍。

適用場景:純靜態(tài)官網(wǎng)、資源托管服務(wù)器、前端項目打包部署(Vue/React靜態(tài)產(chǎn)物)。

2.2 反向代理(核心高頻場景)

反向代理是Nginx最核心、使用最廣泛的功能??蛻舳藘H訪問Nginx服務(wù)器,由Nginx代為轉(zhuǎn)發(fā)請求至后端真實業(yè)務(wù)服務(wù)器,處理完成后再由Nginx將結(jié)果返回客戶端。

核心價值:隱藏后端真實服務(wù)器IP與架構(gòu)、抵御網(wǎng)絡(luò)攻擊、統(tǒng)一入口管理請求、實現(xiàn)請求統(tǒng)一攔截與處理,保障后端服務(wù)安全。

正向代理與反向代理核心區(qū)別:正向代理代理客戶端(如VPN),反向代理代理服務(wù)端(Nginx核心場景)。

2.3 負載均衡

當后端單臺服務(wù)器無法承載高并發(fā)請求時,可部署多臺業(yè)務(wù)服務(wù)器集群,通過Nginx負載均衡策略,將客戶端請求均勻分發(fā)至集群節(jié)點,避免單節(jié)點壓力過載。

核心價值:解決單機并發(fā)瓶頸、實現(xiàn)服務(wù)水平擴容、通過節(jié)點故障自動剔除實現(xiàn)服務(wù)高可用,提升項目整體吞吐量與穩(wěn)定性。

2.4 動靜分離

動靜分離是Web性能優(yōu)化的核心方案,核心思路是拆分動態(tài)資源與靜態(tài)資源請求:Nginx直接處理靜態(tài)資源請求(圖片、樣式、腳本),動態(tài)請求(JSP、接口請求)轉(zhuǎn)發(fā)至Tomcat、SpringBoot等后端服務(wù)。

核心價值:減輕后端業(yè)務(wù)服務(wù)器壓力、靜態(tài)資源可配置緩存與壓縮、大幅提升頁面加載速度,是企業(yè)Web項目性能優(yōu)化的標配方案。

三、Nginx選型與技術(shù)優(yōu)勢

3.1 技術(shù)選型背景

傳統(tǒng)單機Tomcat架構(gòu)存在嚴重性能瓶頸:Tomcat默認配置僅支持150左右并發(fā)連接,即便優(yōu)化硬件與JVM參數(shù),并發(fā)上限也難以突破1000。在互聯(lián)網(wǎng)高并發(fā)場景下,單機架構(gòu)極易出現(xiàn)請求超時、服務(wù)宕機問題,因此必須引入Nginx作為前置網(wǎng)關(guān),實現(xiàn)請求分流與性能優(yōu)化。

3.2 Nginx核心優(yōu)勢(企業(yè)選型核心原因)

  • 高并發(fā)高性能:基于epoll事件模型,支持數(shù)萬級并發(fā),請求處理效率遠超傳統(tǒng)服務(wù)器。
  • 極低資源消耗:啟動后常駐內(nèi)存極小,千級并發(fā)場景下內(nèi)存占用不足10M,CPU利用率極低。
  • 開源免費商用:完全開源,無版權(quán)費用,對比F5、NetScaler等十萬級硬件負載設(shè)備,大幅降低企業(yè)成本。
  • 智能健康檢查:自動檢測后端集群節(jié)點狀態(tài),宕機節(jié)點自動剔除,恢復(fù)后自動重新納入集群,不影響前端訪問。
  • 帶寬優(yōu)化:原生支持Gzip壓縮、資源緩存,減少網(wǎng)絡(luò)傳輸數(shù)據(jù)量,節(jié)省服務(wù)器帶寬資源。
  • 高穩(wěn)定性:反向代理與負載均衡場景下,宕機概率極低,可常年不間斷運行。
  • 熱部署熱更新:支持不停機加載配置、升級版本,實現(xiàn)業(yè)務(wù)零中斷維護。

四、Nginx環(huán)境準備與依賴安裝

4.1 基礎(chǔ)環(huán)境要求

本次實戰(zhàn)基于CentOS 7.9 X64系統(tǒng),適配所有CentOS7系列版本,同時兼容主流Linux發(fā)行版(Ubuntu、Debian)。安裝前需完成四項環(huán)境校驗,規(guī)避安裝報錯:

  • 網(wǎng)絡(luò)連通性:服務(wù)器可正常訪問外網(wǎng),用于下載依賴與Nginx源碼
  • YUM源可用:配置官方Y(jié)UM源或阿里云鏡像源,保證依賴安裝正常
  • 防火墻策略:關(guān)閉防火墻或放行80、443、自定義業(yè)務(wù)端口
  • SELinux狀態(tài):關(guān)閉SELinux安全限制,避免權(quán)限攔截

4.2 環(huán)境校驗實操命令

# 1. 校驗網(wǎng)絡(luò)連通性
ping -c 4 www.baidu.com
# 2. 校驗YUM可用性
yum clean all && yum makecache
# 3. 關(guān)閉防火墻(臨時+永久)
systemctl stop firewalld
systemctl disable firewalld
# 4. 關(guān)閉SELinux(臨時+永久)
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

4.3 核心依賴安裝

Nginx編譯安裝需依賴四大核心庫,缺一不可,所有依賴可通過YUM一鍵安裝:

  • gcc/gcc-c++:C語言編譯環(huán)境,用于編譯Nginx源碼
  • pcre/pcre-devel:正則表達式庫,支持Nginx rewrite規(guī)則解析
  • zlib/zlib-devel:壓縮庫,支撐Gzip壓縮功能實現(xiàn)
  • openssl/openssl-devel:加密庫,支持HTTPS、SSL證書配置
# 一鍵安裝所有編譯依賴
yum -y install gcc gcc-c++ make automake pcre pcre-devel zlib zlib-devel openssl openssl-devel

五、Nginx源碼編譯安裝(企業(yè)生產(chǎn)標準)

5.1 版本選型規(guī)范

Nginx官網(wǎng)提供三類版本,生產(chǎn)與開發(fā)環(huán)境嚴格區(qū)分:

  • Mainline Version(主線版):最新功能版,未經(jīng)過充分生產(chǎn)測試,禁止生產(chǎn)使用,僅用于功能測試
  • Stable Version(穩(wěn)定版):經(jīng)過大規(guī)模生產(chǎn)驗證,企業(yè)生產(chǎn)首選,本次選用1.24.0穩(wěn)定版
  • Legacy Version(舊版):老舊維護版本,僅用于老舊項目兼容

5.2 源碼下載與目錄規(guī)劃

企業(yè)規(guī)范:所有源碼統(tǒng)一存放至/opt/apps目錄,安裝程序部署至/usr/local/nginx/目錄,統(tǒng)一服務(wù)器文件規(guī)范。

# 1. 創(chuàng)建源碼存放目錄
mkdir -p /opt/apps
cd /opt/apps
# 2. 下載Nginx1.24.0穩(wěn)定版源碼
wget http://nginx.org/download/nginx-1.24.0.tar.gz
# 3. 解壓源碼包
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0

5.3 編譯參數(shù)配置(完整版企業(yè)參數(shù))

編譯參數(shù)用于指定Nginx安裝路徑、日志路徑、模塊功能、運行用戶等核心配置,以下為生產(chǎn)環(huán)境通用完整參數(shù),包含SSL、Gzip、靜態(tài)資源優(yōu)化等必備模塊:

# 創(chuàng)建臨時緩存目錄(必須手動創(chuàng)建,否則啟動報錯)
mkdir -p /var/temp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
# 完整編譯配置命令
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--lock-path=/usr/local/nginx/logs/nginx.lock \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_gzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--with-http_realip_module

5.4 編譯與安裝

configure執(zhí)行無報錯后,執(zhí)行編譯安裝命令,僅首次安裝執(zhí)行make install,后續(xù)新增模塊僅需make編譯,無需重裝。

# 編譯+安裝(分步執(zhí)行,便于排查報錯)
make
make install
# 創(chuàng)建Nginx運行用戶與用戶組
useradd -s /sbin/nologin nginx

六、Nginx目錄結(jié)構(gòu)詳解

安裝完成后,Nginx主目錄為/usr/local/nginx,核心四大目錄各司其職,是運維與配置的核心重點:

6.1 conf 配置目錄(核心目錄)

存放所有Nginx配置文件,nginx.conf為主配置文件,所有服務(wù)規(guī)則、代理、負載均衡、緩存策略均在此配置,其余為模板配置文件。

6.2 html 站點目錄

默認靜態(tài)資源根目錄,包含兩個默認頁面:index.html(默認訪問首頁)、50x.html(服務(wù)器異常報錯頁面),可自定義靜態(tài)頁面替換。

6.3 logs 日志目錄

存放運行日志與進程文件,啟動Nginx后自動生成:access.log(正常訪問日志)、error.log(錯誤日志)、nginx.pid(主進程ID文件),是排查線上問題的核心依據(jù)。

6.4 sbin 命令目錄

存放Nginx可執(zhí)行程序,所有啟停、重載、校驗命令均基于該目錄下的nginx程序執(zhí)行。

七、Docker快速部署Nginx(容器化方案)

Docker部署無需編譯環(huán)境,一鍵部署、快速擴容,適合測試環(huán)境與容器化生產(chǎn)環(huán)境,支持目錄掛載、配置持久化。

7.1 基礎(chǔ)容器部署

# 拉取官方最新穩(wěn)定鏡像
docker pull nginx:stable
# 啟動基礎(chǔ)Nginx容器
docker run -d \
--name nginx-base \
--rm \
-p 8080:80 \
nginx:stable

7.2 持久化掛載部署(生產(chǎn)可用)

通過掛載本地目錄,實現(xiàn)配置文件、靜態(tài)資源、日志持久化,刪除容器不丟失數(shù)據(jù):

# 創(chuàng)建本地持久化目錄
mkdir -p /docker/nginx/{conf,html,logs}
# 臨時啟動容器,拷貝默認配置文件
docker run -d --name nginx-tmp nginx:stable
docker cp nginx-tmp:/etc/nginx/nginx.conf /docker/nginx/conf/
docker cp nginx-tmp:/etc/nginx/conf.d /docker/nginx/conf/
docker stop nginx-tmp && docker rm nginx-tmp
# 啟動持久化Nginx容器
docker run -d \
--name nginx-prod \
-p 80:80 \
-p 443:443 \
-v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /docker/nginx/html:/usr/share/nginx/html \
-v /docker/nginx/logs:/var/log/nginx \
--restart always \
nginx:stable

八、Nginx服務(wù)啟停與核心命令

8.1 核心命令參數(shù)

# 查看Nginx版本
/usr/local/nginx/sbin/nginx -v
# 查看詳細版本與編譯參數(shù)
/usr/local/nginx/sbin/nginx -V
# 校驗配置文件語法(核心!修改配置后必執(zhí)行)
/usr/local/nginx/sbin/nginx -t
# 靜默校驗配置(僅輸出錯誤信息)
/usr/local/nginx/sbin/nginx -q

8.2 啟停與重載操作

Nginx支持熱重載,無需停機即可更新配置,保障業(yè)務(wù)零中斷:

# 啟動Nginx
/usr/local/nginx/sbin/nginx
# 快速停止(強制終止所有請求,不推薦生產(chǎn)使用)
/usr/local/nginx/sbin/nginx -s stop
# 平緩?fù)V梗ㄌ幚硗戤斍罢埱蠛箨P(guān)閉,生產(chǎn)推薦)
/usr/local/nginx/sbin/nginx -s quit
# 熱重載配置(修改配置后必用,零停機更新)
/usr/local/nginx/sbin/nginx -s reload
# 重啟日志文件
/usr/local/nginx/sbin/nginx -s reopen

九、Nginx核心配置塊詳解

Nginx主配置文件nginx.conf分為四大核心塊,優(yōu)先級與作用域逐層遞減,是所有功能配置的基礎(chǔ):全局塊、events塊、http塊、server塊、location塊。

9.1 全局塊(頂級作用域)

作用于整個Nginx服務(wù),配置全局運行參數(shù),核心指令如下:

# 定義運行Nginx的用戶與組
user nginx nginx;
# 工作進程數(shù),建議與CPU核心數(shù)一致(auto自動適配)
worker_processes auto;
# 錯誤日志路徑與日志級別(debug/info/warn/error/crit)
error_log /usr/local/nginx/logs/error.log error;
# 主進程PID文件路徑
pid /usr/local/nginx/logs/nginx.pid;
# 最大文件打開數(shù)
worker_rlimit_nofile 65535;

9.2 events塊(事件驅(qū)動配置)

配置Nginx工作模式與連接上限,直接決定并發(fā)能力:

events {
    # 啟用Linux高效epoll事件模型
    use epoll;
    # 單個工作進程最大連接數(shù)
    worker_connections 10240;
    # 開啟多進程accept鎖
    accept_mutex on;
    # 批量接收新連接
    multi_accept on;
}

并發(fā)計算公式:最大并發(fā)數(shù) = worker_processes * worker_connections,反向代理場景需除以4(經(jīng)驗值)。

9.3 HTTP塊(全局Web配置)

配置HTTP協(xié)議通用參數(shù)、日志格式、壓縮、超時、MIME類型等全局Web規(guī)則:

http {
    # 引入資源類型配置
    include mime.types;
    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 /usr/local/nginx/logs/access.log main;
    # 開啟零拷貝傳輸
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    # 連接超時時間
    keepalive_timeout 120s 100s;
    # 請求緩沖區(qū)配置
    client_header_buffer_size 16k;
    large_client_header_buffers 4 64k;
    # 開啟Gzip全局壓縮
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/js application/json application/javascript;
    gzip_disable "MSIE [1-6]\.";
}

9.4 Server虛擬主機塊

一個server塊對應(yīng)一個虛擬站點,支持多站點共存,核心配置監(jiān)聽端口、域名、站點根目錄:

server {
    listen 80;
    server_name www.demo.com demo.com;
    root /usr/local/nginx/html/demo;
    index index.html index.htm index.php;
    access_log /usr/local/nginx/logs/demo-access.log main;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root html;
    }
}

9.5 Location路由匹配塊

Nginx核心路由規(guī)則,用于匹配客戶端請求URL,支持多種匹配模式,優(yōu)先級從高到低:

精準匹配(=) > 前綴鎖定(^~) > 大小寫正則(~) > 忽略大小寫正則(~*) > 通用匹配(/)

# 精準匹配根路徑
location = / {
    index index.html;
}
# 鎖定靜態(tài)資源前綴,停止后續(xù)匹配
location ^~ /static/ {
    root /usr/local/nginx/html;
    expires 30d;
}
# 正則匹配圖片資源(區(qū)分大小寫)
location ~ \.(jpg|png|gif|ico)$ {
    expires 7d;
    add_header Cache-Control "public";
}
# 通用匹配所有請求
location / {
    proxy_pass http://127.0.0.1:8080;
}

十、三大虛擬主機實戰(zhàn)配置

10.1 基于IP的虛擬主機

單網(wǎng)卡綁定多IP,不同IP訪問不同站點,適合內(nèi)網(wǎng)業(yè)務(wù)隔離場景:

# 1. 網(wǎng)卡配置多IP(CentOS7)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.66.100
IPADDR1=192.168.66.101
NETMASK=255.255.255.0
GATEWAY=192.168.66.2
# 重啟網(wǎng)絡(luò)
systemctl restart network
# 2. Nginx虛擬主機配置
server {
    listen 80;
    server_name 192.168.66.100;
    root /usr/local/nginx/html/ip100;
    index index.html;
}
server {
    listen 80;
    server_name 192.168.66.101;
    root /usr/local/nginx/html/ip101;
    index index.html;
}

10.2 基于域名的虛擬主機(生產(chǎn)主流)

同一IP、同一端口,通過不同域名區(qū)分站點,適用于多官網(wǎng)、多業(yè)務(wù)部署:

# hosts域名映射(本地測試)
192.168.66.100 www.frontend.com
192.168.66.100 www.backend.com
# 前端站點配置
server {
    listen 80;
    server_name www.frontend.com;
    root /usr/local/nginx/html/frontend;
    index index.html;
}
# 后端站點配置
server {
    listen 80;
    server_name www.backend.com;
    root /usr/local/nginx/html/backend;
    index index.html;
}

10.3 基于端口的虛擬主機

同一IP、不同端口部署不同服務(wù),適合內(nèi)部測試系統(tǒng)、后臺管理系統(tǒng):

server {
    listen 8088;
    server_name 192.168.66.100;
    root /usr/local/nginx/html/test8088;
    index index.html;
}
server {
    listen 9099;
    server_name 192.168.66.100;
    root /usr/local/nginx/html/test9099;
    index index.html;
}

十一、Nginx核心模塊實戰(zhàn)

11.1 Rewrite地址重寫模塊

通過正則匹配實現(xiàn)URL重定向、域名跳轉(zhuǎn)、地址標準化,支持301永久重定向、302臨時重定向:

# 1. 舊域名永久跳轉(zhuǎn)新域名
server {
    listen 80;
    server_name old.com www.old.com;
    rewrite ^/(.*)$ https://www.new.com/$1 permanent;
}
# 2. 偽靜態(tài)配置(動態(tài)URL轉(zhuǎn)靜態(tài)URL)
location / {
    rewrite ^/article-(\d+)\.html$ /article.php?id=$1 last;
}
# 3. 目錄跳轉(zhuǎn)
location /admin {
    rewrite ^/admin$ /admin/index.html redirect;
}

11.2 If條件判斷模塊

支持基于IP、請求方式、瀏覽器標識、參數(shù)的條件攔截與定制化配置:

# 禁止POST請求訪問靜態(tài)資源
location ~ \.(html|js|css)$ {
    if ($request_method = POST) {
        return 405;
    }
}
# 攔截指定IP訪問
if ($remote_addr = "192.168.66.200") {
    return 403;
}
# 攔截爬蟲訪問
if ($http_user_agent ~* (spider|crawler)) {
    return 403;
}

11.3 瀏覽器緩存優(yōu)化

通過expires與Cache-Control配置靜態(tài)資源緩存,減少重復(fù)請求,提升訪問速度:

server {
    listen 80;
    server_name www.demo.com;
    # 圖片、視頻緩存30天
    location ~ \.(jpg|png|gif|mp4|ico)$ {
        expires 30d;
        add_header Cache-Control "max-age=2592000, public";
    }
    # JS、CSS緩存7天
    location ~ \.(js|css)$ {
        expires 7d;
        add_header Cache-Control "max-age=604800, public";
    }
    # HTML禁止緩存,保證實時更新
    location ~ \.(html|htm)$ {
        add_header Cache-Control "no-cache, no-store, must-revalidate";
        add_header Pragma "no-cache";
        expires -1;
    }
}

11.4 防盜鏈配置

基于Referer請求頭攔截非法盜鏈,保護服務(wù)器資源,防止流量被盜用:

location ~ \.(jpg|png|gif|js|css)$ {
    # 允許空Referer、本機、合法域名訪問
    valid_referers none blocked www.demo.com demo.com 192.168.66.100;
    # 非法請求返回403
    if ($invalid_referer) {
        return 403;
    }
}

11.5 跨域問題解決

前端跨域請求報錯核心解決方案,配置全局跨域響應(yīng)頭:

location / {
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;
    add_header Access-Control-Allow-Headers DNT,X-Requested-With,Content-Type,Authorization;
    # 處理預(yù)檢請求
    if ($request_method = OPTIONS) {
        return 204;
    }
    proxy_pass http://127.0.0.1:8080;
}

十二、Nginx高階企業(yè)實戰(zhàn)場景

12.1 動靜分離實戰(zhàn)

分離靜態(tài)、動態(tài)請求,Nginx處理靜態(tài)資源,Tomcat處理動態(tài)接口,極致優(yōu)化性能:

upstream tomcat_cluster {
    server 192.168.66.102:8080 weight=5;
    server 192.168.66.103:8080 weight=5;
}
server {
    listen 80;
    server_name www.demo.com;
    # 靜態(tài)資源直接由Nginx處理
    location ~ \.(html|js|css|jpg|png|gif|ico)$ {
        root /usr/local/nginx/static;
        expires 10d;
    }
    # 動態(tài)請求轉(zhuǎn)發(fā)至Tomcat集群
    location ~ \.(jsp|do|action)$ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://tomcat_cluster;
    }
    # 通用接口請求轉(zhuǎn)發(fā)
    location /api/ {
        proxy_pass http://tomcat_cluster;
    }
}

12.2 負載均衡完整配置

支持權(quán)重、IP哈希、故障轉(zhuǎn)移,實現(xiàn)后端服務(wù)高可用:

http {
    # 定義后端服務(wù)集群
    upstream backend_cluster {
        # 權(quán)重配置,weight越大分發(fā)請求越多
        server 192.168.66.102:8080 weight=3 max_fails=3 fail_timeout=10s;
        server 192.168.66.103:8080 weight=2 max_fails=3 fail_timeout=10s;
        # 備用節(jié)點,主節(jié)點全部故障時啟用
        server 192.168.66.104:8080 backup;
    }
    server {
        listen 80;
        server_name www.demo.com;
        location / {
            # 轉(zhuǎn)發(fā)請求至集群
            proxy_pass http://backend_cluster;
            # 保留真實客戶端信息
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            # 超時配置
            proxy_connect_timeout 5s;
            proxy_send_timeout 10s;
            proxy_read_timeout 10s;
            # 故障轉(zhuǎn)移
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        }
    }
}

12.3 限流防護實戰(zhàn)

基于漏桶算法實現(xiàn)請求速率限流、并發(fā)連接限流,防護突發(fā)流量與CC攻擊:

http {
    # 速率限流:單IP每秒1次請求,緩沖區(qū)5個
    limit_req_zone $binary_remote_addr zone=req_limit:10m rate=1r/s;
    # 并發(fā)限流:單IP最大10個并發(fā)連接
    limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
    server {
        listen 80;
        server_name www.demo.com;
        location / {
            # 啟用速率限流
            limit_req zone=req_limit burst=5 nodelay;
            # 啟用并發(fā)限流
            limit_conn conn_limit 10;
            proxy_pass http://backend_cluster;
        }
    }
}

12.4 緩存加速實戰(zhàn)

配置Nginx代理緩存,緩存后端接口響應(yīng)數(shù)據(jù),大幅提升重復(fù)請求響應(yīng)速度:

http {
    # 緩存路徑、層級、內(nèi)存空間、過期時間
    proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=api_cache:100m inactive=7d max_size=5G;
    server {
        listen 80;
        server_name www.demo.com;
        location /api/data/ {
            # 啟用緩存
            proxy_cache api_cache;
            # 200/304狀態(tài)碼緩存10分鐘
            proxy_cache_valid 200 304 10m;
            # 自定義緩存key
            proxy_cache_key "$host$request_uri$args";
            # 緩存狀態(tài)響應(yīng)頭
            add_header Nginx-Cache "$upstream_cache_status";
            proxy_pass http://backend_cluster;
        }
        # 手動清理緩存接口(僅本機訪問)
        location /purge/cache {
            allow 127.0.0.1;
            deny all;
            proxy_cache_purge api_cache $host$request_uri$args;
        }
    }
}

十三、Nginx高可用架構(gòu)(Nginx+Keepalived)

13.1 架構(gòu)原理

單臺Nginx存在單點故障風(fēng)險,通過Keepalived實現(xiàn)雙機熱備:主節(jié)點正常工作,備節(jié)點待命,主節(jié)點故障時,虛擬VIP自動漂移至備節(jié)點,實現(xiàn)服務(wù)無感知切換。

13.2 環(huán)境規(guī)劃

  • 主Nginx:192.168.66.100(MASTER)
  • 備Nginx:192.168.66.101(BACKUP)
  • 虛擬VIP:192.168.66.99

13.3 Keepalived核心配置

主節(jié)點配置 /etc/keepalived/keepalived.conf:

! Configuration File for keepalived
global_defs {
    router_id nginx_master
}
# Nginx狀態(tài)檢測腳本
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 120
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    track_script {
        chk_nginx
    }
    virtual_ipaddress {
        192.168.66.99/24
    }
}

備節(jié)點配置僅修改 state BACKUP、priority 80,其余參數(shù)與主節(jié)點一致。

13.4 健康檢測腳本

創(chuàng)建 /etc/keepalived/nginx_check.sh,實現(xiàn)Nginx宕機自動切換:

#!/bin/bash
# 統(tǒng)計Nginx進程數(shù)
NGINX_NUM=$(ps -C nginx --no-header | wc -l)
# 無進程則重啟Nginx
if [ $NGINX_NUM -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    # 重啟失敗則關(guān)閉keepalived,觸發(fā)VIP漂移
    if [ $(ps -C nginx --no-header | wc -l) -eq 0 ];then
        systemctl stop keepalived
    fi
fi

腳本授權(quán):chmod 755 /etc/keepalived/nginx_check.sh

十四、Nginx HTTPS證書企業(yè)級配置實戰(zhàn)

14.1 HTTPS核心原理與前置準備

HTTPS基于SSL/TLS協(xié)議對HTTP數(shù)據(jù)加密傳輸,端口默認443,可解決明文傳輸、數(shù)據(jù)篡改、中間人劫持問題,是網(wǎng)站合規(guī)、瀏覽器安全訪問的必備配置。Nginx實現(xiàn)HTTPS依賴編譯時的openssl模塊,前文編譯流程已默認集成,無需重新編譯。

證書類型分為兩類:免費域名證書(Let’s Encrypt、阿里云免費證書,適合中小企業(yè)官網(wǎng))、付費OV/EV證書(適合金融、電商等高危場景),證書文件核心包含.pem/.crt公鑰文件、.key私鑰文件。

前置準備:域名已完成備案、服務(wù)器防火墻放行443端口、證書文件上傳至服務(wù)器固定目錄。

14.2 證書目錄規(guī)范與文件部署

企業(yè)統(tǒng)一規(guī)范:在Nginx配置目錄下創(chuàng)建ssl專屬目錄,統(tǒng)一存放所有域名證書,便于管理和續(xù)期:

# 創(chuàng)建證書統(tǒng)一存放目錄
mkdir -p /usr/local/nginx/conf/ssl
# 上傳證書文件(示例:域名demo.com)
# 上傳后目錄包含:demo.com.pem(公鑰)、demo.com.key(私鑰)
# 授權(quán)證書目錄權(quán)限,防止權(quán)限過高報錯
chmod 600 /usr/local/nginx/conf/ssl/*
chown nginx:nginx /usr/local/nginx/conf/ssl/*

14.3 完整HTTPS站點配置(生產(chǎn)最優(yōu))

配置包含SSL加密參數(shù)優(yōu)化、兼容主流瀏覽器、開啟會話復(fù)用、強制HTTPS跳轉(zhuǎn),適配生產(chǎn)環(huán)境所有場景:

# 80端口強制跳轉(zhuǎn)HTTPS
server {
    listen 80;
    server_name www.demo.com demo.com;
    # 301永久重定向,SEO友好
    return 301 https://$host$request_uri;
}
# 443 HTTPS核心配置
server {
    listen 443 ssl;
    server_name www.demo.com demo.com;
    root /usr/local/nginx/html/demo;
    index index.html index.htm;
    # 配置證書公鑰、私鑰路徑
    ssl_certificate /usr/local/nginx/conf/ssl/demo.com.pem;
    ssl_certificate_key /usr/local/nginx/conf/ssl/demo.com.key;
    # SSL性能與安全優(yōu)化參數(shù)(生產(chǎn)必配)
    ssl_protocols TLSv1.2 TLSv1.3; # 禁用老舊不安全協(xié)議
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on; # 優(yōu)先使用服務(wù)器加密套件
    ssl_session_cache shared:SSL:10m; # 開啟SSL會話緩存
    ssl_session_timeout 10m; # 會話緩存過期時間
    ssl_buffer_size 4k; # 優(yōu)化傳輸緩沖區(qū)大小
    # 瀏覽器HTTPS安全強化
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Frame-Options DENY; # 防止頁面被嵌套劫持
    add_header X-Content-Type-Options nosniff;
    # 日志配置
    access_log /usr/local/nginx/logs/https-demo-access.log main;
    error_log /usr/local/nginx/logs/https-demo-error.log error;
    # 靜態(tài)資源緩存、反向代理等業(yè)務(wù)配置沿用原有規(guī)則
    location ~ \.(jpg|png|gif|js|css)$ {
        expires 10d;
    }
}

14.4 多域名HTTPS共存配置

單服務(wù)器多域名獨立HTTPS證書部署,互不沖突,適配多站點業(yè)務(wù)場景:

# 站點1:www.frontend.com
server {
    listen 80;
    server_name www.frontend.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name www.frontend.com;
    ssl_certificate /usr/local/nginx/conf/ssl/frontend.com.pem;
    ssl_certificate_key /usr/local/nginx/conf/ssl/frontend.com.key;
    # 通用SSL優(yōu)化參數(shù)省略,同上
}
# 站點2:www.backend.com
server {
    listen 80;
    server_name www.backend.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name www.backend.com;
    ssl_certificate /usr/local/nginx/conf/ssl/backend.com.pem;
    ssl_certificate_key /usr/local/nginx/conf/ssl/backend.com.key;
    # 通用SSL優(yōu)化參數(shù)省略,同上
}

14.5 證書自動續(xù)期方案(免費證書必備)

Let’s Encrypt等免費證書有效期僅90天,需配置定時任務(wù)自動續(xù)期,避免證書過期導(dǎo)致網(wǎng)站無法訪問:

# 1. 安裝續(xù)期工具
yum install -y certbot
# 2. 手動續(xù)期測試
certbot renew --dry-run
# 3. 配置定時任務(wù),每日凌晨2點自動檢測續(xù)期
crontab -e
# 寫入以下內(nèi)容
0 2 * * * /usr/bin/certbot renew && /usr/local/nginx/sbin/nginx -s reload

十五、Nginx線上高頻報錯排查方案

本節(jié)匯總生產(chǎn)環(huán)境最常見的Nginx報錯,包含報錯現(xiàn)象、根因分析、完整解決辦法,覆蓋啟動報錯、訪問異常、HTTPS報錯、代理轉(zhuǎn)發(fā)報錯四大類場景。

15.1 啟動/重載報錯

報錯1:nginx: [emerg] mkdir() “/var/temp/nginx/client” failed (2: No such file or directory)

報錯原因:編譯配置中指定的臨時緩存目錄不存在,首次安裝后未手動創(chuàng)建目錄。

解決方案:執(zhí)行命令批量創(chuàng)建所需臨時目錄,重新重載配置:

mkdir -p /var/temp/nginx/{client,proxy,fastcgi,uwsgi,scgi}
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

報錯2:nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)

報錯原因:80端口被Nginx殘留進程、Apache、httpd等服務(wù)占用,端口沖突。

解決方案:排查端口占用、終止殘留進程:

# 查看80端口占用進程
netstat -tulpn | grep 80
# 強制終止占用進程
kill -9 進程ID
# 關(guān)閉沖突服務(wù)
systemctl stop httpd && systemctl disable httpd
# 重啟Nginx
/usr/local/nginx/sbin/nginx

報錯3:nginx: [emerg] user “nginx” does not exist

報錯原因:配置文件中指定的nginx運行用戶未創(chuàng)建。

解決方案:創(chuàng)建無登錄權(quán)限的系統(tǒng)用戶:

useradd -s /sbin/nologin nginx
/usr/local/nginx/sbin/nginx -s reload

15.2 HTTPS專屬報錯

報錯1:nginx: [emerg] SSL_CTX_use_certificate_file(…) failed (SSL: error:02001002:system library:fopen:No such file or directory)

報錯原因:證書文件路徑錯誤、文件缺失、文件名大小寫不匹配、證書目錄權(quán)限不足。

解決方案:核對配置文件證書路徑、檢查文件完整性、修正權(quán)限:

# 核對證書文件是否存在
ls /usr/local/nginx/conf/ssl/
# 修正目錄與文件權(quán)限
chmod 600 /usr/local/nginx/conf/ssl/*
chown nginx:nginx /usr/local/nginx/conf/ssl/*
# 重載配置
nginx -s reload

報錯2:瀏覽器提示“您的連接不是私密連接”/證書已過期

報錯原因:證書過期、域名不匹配、服務(wù)器系統(tǒng)時間錯誤、證書鏈不完整。

解決方案:1. 核對證書有效期,過期則重新上傳新證書并重載;2. 確保配置域名與證書綁定域名一致;3. 同步服務(wù)器時間;4. 補充完整證書鏈文件。

# 同步系統(tǒng)時間
ntpdate time.aliyun.com

報錯3:nginx: [emerg] unknown directive “ssl” in nginx.conf

報錯原因:Nginx編譯時未添加--with-http_ssl_module模塊,不支持HTTPS功能。

解決方案:重新編譯Nginx,新增SSL模塊,保留原有配置:

復(fù)用前文5.3節(jié)完整編譯參數(shù),執(zhí)行make編譯,無需make install,編譯完成后替換二進制文件即可。

15.3 訪問狀態(tài)異常報錯

報錯1:403 Forbidden 訪問禁止

常見原因:1. 站點目錄權(quán)限不足,nginx用戶無讀取權(quán)限;2. 目錄無默認首頁文件;3. SELinux未關(guān)閉;4. 防盜鏈規(guī)則攔截。

解決方案:逐層排查修復(fù):

# 1. 關(guān)閉SELinux(永久生效)
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config && setenforce 0
# 2. 修正站點目錄權(quán)限
chmod -R 755 /usr/local/nginx/html
chown -R nginx:nginx /usr/local/nginx/html
# 3. 檢查是否存在index.html默認文件
# 

到此這篇關(guān)于Nginx超詳細實戰(zhàn)詳解教程的文章就介紹到這了,更多相關(guān)Nginx實戰(zhàn)詳解內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx配置ssl支持https全過程(docker版)

    Nginx配置ssl支持https全過程(docker版)

    在Docker環(huán)境中配置Nginx使用SSL涉及準備SSL證書和密鑰、編寫Nginx配置文件以及使用Docker運行Nginx,首先,需獲取SSL證書和密鑰,可以是自簽名或由CA頒發(fā),編寫Nginx配置文件時,確保正確引用證書和密鑰路徑,通過Docker命令或Docker Compose運行Nginx容器
    2024-10-10
  • Nginx反向代理實現(xiàn)支持長連接詳解

    Nginx反向代理實現(xiàn)支持長連接詳解

    這篇文章主要給大家介紹了關(guān)于Nginx反向代理實現(xiàn)支持長連接的相關(guān)資料,文字介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)圖片的代碼示例

    nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)圖片的代碼示例

    這篇文章主要給大家介紹了nginx轉(zhuǎn)發(fā)內(nèi)網(wǎng)圖片,文章通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以自己動手試一下
    2023-10-10
  • nginx中rewrite和if的使用及配置方式

    nginx中rewrite和if的使用及配置方式

    文章主要解釋了Nginx中rewrite和ifginx跳轉(zhuǎn)需求的實現(xiàn)方式、rewrite和ifginx正則表達式、常用的Nginx正則表達式、案例配置等內(nèi)容,并涉及到了rewrite和if的應(yīng)用場景和用法,以及flag對Nginx中g(shù)inx防盜鏈案例等ginx的ginx基于瀏覽器實現(xiàn)ginx實現(xiàn)分離案例等
    2026-05-05
  • nginx各種代理配置大全

    nginx各種代理配置大全

    本文主要介紹了nginx各種代理配置大全,主要包括了路徑配置,http跳轉(zhuǎn)https,微信支付的校驗等,具有一定的參考價值,感興趣的可以了解一下
    2023-09-09
  • Nginx服務(wù)器中強制使用緩存的配置及緩存優(yōu)先級的講解

    Nginx服務(wù)器中強制使用緩存的配置及緩存優(yōu)先級的講解

    這篇文章主要介紹了Nginx服務(wù)器中強制使用緩存的配置及緩存優(yōu)先級的講解,一定程度上可以幫助大家解決Nginx不緩存或緩存失效的問題,需要的朋友可以參考下
    2016-01-01
  • 關(guān)于nginx+uWsgi配置遇到的問題的解決

    關(guān)于nginx+uWsgi配置遇到的問題的解決

    uWSGI 是在像 nginx 、 lighttpd 以及 cherokee 服務(wù)器上的一個部署的選擇,本篇文章主要介紹了關(guān)于nginx+uWsgi配置遇到的問題的解決,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Nginx單IP地址配置多個SSL證書的方法示例

    Nginx單IP地址配置多個SSL證書的方法示例

    這篇文章主要介紹了Nginx單IP地址配置多個SSL證書的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • 使用nginx+tomcat+keepalived實現(xiàn)高可用的詳細步驟

    使用nginx+tomcat+keepalived實現(xiàn)高可用的詳細步驟

    這篇文章主要介紹了nginx+tomcat+keepalived實現(xiàn)高可用,包括安裝nginx服務(wù)的步驟,詳細介紹了安裝keepalived的方法,對nginx+tomcat+keepalived高可用相關(guān)知識感興趣的朋友一起看看吧
    2022-03-03
  • 通俗易懂講解nginx-rtmp-module

    通俗易懂講解nginx-rtmp-module

    nginx-rtmp-module?是一個用于 Nginx 的第三方模塊,它擴展了 Nginx 服務(wù)器的功能,使其能夠處理實時流媒體數(shù)據(jù),本文就來詳細的介紹一下nginx-rtmp-module的使用,感興趣的可以了解一下
    2025-02-02

最新評論

虞城县| 苏州市| 安丘市| 临武县| 德昌县| 闽侯县| 海丰县| 沅陵县| 会昌县| 伊宁县| 岚皋县| 长治市| 广东省| 大同市| 海口市| 四平市| 罗甸县| 延吉市| 沙河市| 金溪县| 旬邑县| 沾化县| 武功县| 教育| 虞城县| 习水县| 阳高县| 长白| 洞口县| 金塔县| 盖州市| 巴林左旗| 济源市| 宁安市| 射洪县| 四川省| 特克斯县| 凤山市| 昔阳县| 永新县| 无棣县|