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

Nginx?部署及配置詳細(xì)步驟(附詳細(xì)代碼)

 更新時間:2025年11月01日 09:19:44   作者:人在旅途ぃ  
Nginx是一個web服務(wù)器也可以用來做負(fù)載均衡及反向代理使用,目前使用最多的就是負(fù)載均衡,這篇文章主要介紹了Nginx部署及配置的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、前言

Nginx 是現(xiàn)代 Web 架構(gòu)中不可或缺的組件,廣泛用于反向代理、負(fù)載均衡、靜態(tài)資源服務(wù)和安全網(wǎng)關(guān)。

二、基礎(chǔ)部署與核心配置

1. 常見安裝方式(以 Ubuntu 為例)

sudo apt update 
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

2、核心目錄概覽

目錄作用
/etc/nginx/主配置文件目錄(最重要)
/usr/sbin/nginxNginx 可執(zhí)行程序(命令行工具)
/var/log/nginx/日志文件目錄(access.log、error.log)
/usr/share/nginx/默認(rèn)靜態(tài)文件根目錄(HTML 文件)
/var/cache/nginx/緩存文件目錄(如代理緩存,需要開啟緩存在存在這個目錄)
/usr/share/man/man8/nginx.8.gz幫助手冊(man nginx
/run/nginx.pid存放主進(jìn)程 PID 的文件

詳細(xì)目錄與文件說明

2.1 /etc/nginx/ —— 主配置目錄(? 核心)

這是你最常打交道的目錄,包含所有配置文件。

主要文件:

文件說明
nginx.conf主配置文件,定義全局設(shè)置、events、http 塊等
mime.types定義文件擴(kuò)展名與 MIME 類型的映射(如 .csstext/css
conf.d/子配置片段目錄,通常存放 *.conf 文件(如 ssl.conf
sites-available/可用的站點(diǎn)配置(Debian/Ubuntu 特有)
sites-enabled/啟用的站點(diǎn)配置,通過軟鏈接指向 sites-available/

?? Debian/Ubuntu 使用 sites-availablesites-enabled 實(shí)現(xiàn)“多站點(diǎn)管理”,類似 Apache。 CentOS/RHEL 通常只用 conf.d/。

每次修改配置前,建議備份并在修改后測試

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
sudo nginx -t # 檢查配置是否有問題
sudo nginx -s reload  # 向主進(jìn)程發(fā)送信號,重新加載配置文件,熱重啟

2.2 /var/log/nginx/ —— 日志目錄(? 運(yùn)維必備)

文件說明
access.log訪問日志:記錄每個 HTTP 請求(IP、時間、URL、狀態(tài)碼等)
error.log錯誤日志:記錄 Nginx 啟動、運(yùn)行、配置錯誤、后端連接失敗等

2.3 /usr/share/nginx/html/ —— 默認(rèn)靜態(tài)資源根目錄

  • 這是 Nginx 默認(rèn)的 網(wǎng)站根目錄(Document Root)。
  • 當(dāng)你訪問 http://服務(wù)器IP 時,Nginx 會返回這個目錄下的 index.html。
  • 你可以將前端打包文件(如 Vue/React 的 dist/)復(fù)制到這里。

?? 權(quán)限:確保 www-data(Ubuntu)或 nginx(CentOS)用戶有讀取權(quán)限

2.4./var/cache/nginx/—— 緩存目錄

  • 用于存儲 代理緩存(如反向代理后端 API 或靜態(tài)資源)。

  • 需要在配置中顯式啟用:

     # 定義緩存區(qū)
    # 在 http 塊中定義緩存區(qū)
    proxy_cache_path /var/cache/nginx levels=1:2 
                     keys_zone=my_cache:10m 
                     max_size=10g
                     inactive=60m
                     use_temp_path=off;
    
    server {
        listen 80;
        server_name cached-api.example.com;
    
        location /api/ {
            proxy_pass http://backend_servers;
            
            # 啟用緩存
            proxy_cache my_cache;
            proxy_cache_valid 200 302 10m;   # 成功響應(yīng)緩存 10 分鐘
            proxy_cache_valid 404 1m;
            proxy_cache_use_stale error timeout updating; # 緩存容錯機(jī)制
        }
    }
    
  • 目錄結(jié)構(gòu)由 Nginx 自動管理,無需手動操作。

2.5./usr/share/man/man8/nginx.8.gz—— 幫助手冊

  • 這是 man nginx 命令使用的幫助文檔。

  • 壓縮格式(.gz),但 man 命令會自動解壓。

  • 查看方式:

    man nginx
    

一個Nginx配置例子如下

# main段配置信息
user www-data;             # 指定運(yùn)行 Nginx 的 woker 子進(jìn)程的屬主和屬組,其中組可以不指定
pid /run/nginx.pid;    # Nginx 服務(wù)啟動時的 pid 存放位置
worker_processes auto; # Nginx 進(jìn)程數(shù),一般設(shè)置為和 CPU 核數(shù)一樣
# worker_cpu_affinity 0001 0010 0100 1000; # 將每個 worker 進(jìn)程綁定到特定 CPU 核心(CPU 親和性)

worker_rlimit_nofile 20480; # 設(shè)置每個 Nginx worker 進(jìn)程能打開的最大文件描述符數(shù) 相當(dāng)于在進(jìn)程啟動時執(zhí)行 ulimit -n 20480
worker_rlimit_core 50M; # 限制每個 worker 進(jìn)程可生成的核心轉(zhuǎn)儲文件(core dump)大小當(dāng) Nginx worker 崩潰(如段錯誤)時,系統(tǒng)會將其內(nèi)存狀態(tài)寫入一個 core.* 文件 可選 0 或者 unlimited
working_directory /opt/nginx/tmp;  # core 文件生成路徑該目錄必須存在且 Nginx 用戶(www-data)有寫權(quán)限:

worker_priority -10;  # 設(shè)置 worker 進(jìn)程的調(diào)度優(yōu)先級(Linux nice 值)數(shù)值范圍:-20(最高優(yōu)先級)到 +19(最低優(yōu)先級) 默認(rèn)值:0
worker_shutdown_timeout 5s; # 設(shè)置 worker 進(jìn)程平滑關(guān)閉的最大等待時間
timer_resolution 100ms;  # 配置事件定時器的系統(tǒng)調(diào)用頻率,提升性能 適合大多數(shù)場景

error_log /var/log/nginx/error.log; # Nginx 的錯誤日志存放目錄
include /etc/nginx/modules-enabled/*.conf; # 導(dǎo)入已配置模塊

# events段配置信息
events {
        use epoll;     # 使用epoll的I/O模型 Linux上最高效 推薦注釋掉這行配置 讓Nginx自行選擇
        worker_connections 768; # 每個 worker 最大連接數(shù)
        multi_accept on; # 一次性接收多個連接
       # accept_mutex on; # 開啟“互斥鎖(Mutex)”機(jī)制,確保同一時間只有一個 worker 進(jìn)程在監(jiān)聽并接受新連接 建議采用默認(rèn)值關(guān)閉 內(nèi)核級 EPOLLEXCLUSIVE(自 4.5+)已解決驚群問題 在高并發(fā)場景下,accept_mutex off 的吞吐量通常更高
}

# http段配置信息,是 Nginx 配置文件中最核心的部分,用于定義 所有 HTTP 相關(guān)的行為,包括:MIME 類型、日志格式、緩存、上游服務(wù)器、虛擬主機(jī)等。
http {

        ##
        # Basic Settings
        ##

        sendfile on; # 啟用“零拷貝”文件傳輸機(jī)制,大幅提升靜態(tài)文件性能 只對 static 文件有效(如 index.html),對反向代理動態(tài)內(nèi)容無效。
        # tcp_nopush on; # 與 sendfile 配合使用,優(yōu)化 TCP 傳輸包的發(fā)送策略 這個配置配合sendfile用來優(yōu)化靜態(tài)配置
        types_hash_max_size 2048; # 增大 MIME 類型哈希表大小,避免 MIME 類型沖突或警告
        # tcp_nodelay         on; # 啟用 TCP 的 Nagle 算法禁用機(jī)制,讓小數(shù)據(jù)包立即發(fā)送,而不是等待拼包提升實(shí)時性 這個配置和tcp_nopush互斥 專用來優(yōu)化反向代理
        keepalive_timeout 65; # 控制 Nginx 與客戶端之間 TCP 連接在空閑多久后關(guān)閉 單位秒 建議 普通網(wǎng)站   65 高并發(fā) API   30 ~ 60(節(jié)省連接資源)長連接應(yīng)用(如 SSE)     300 ~ 75 可以配合keepalive_requests 使用 100;  # 單個連接最多處理 100 個請求
        # keepalive_requests 100;  # 單個連接最多處理 100 個請求
        server_tokens off; # 隱藏 Nginx 版本號,增強(qiáng)安全性

        server_names_hash_bucket_size 64; # 控制 Nginx 內(nèi)部用于存儲 server_name 的哈希表的桶(bucket)大小 解決域名過多或過長的警告 必須是 2 的冪次方且不能超過 server_names_hash_max_size
        server_name_in_redirect off; # 控制重定向時是否使用真實(shí)的 server_name 決定在 rewrite ... redirect 或 return 301/302 時,使用哪個域名生成跳轉(zhuǎn) URL 建議關(guān)閉

        include /etc/nginx/mime.types;  # 引入 MIME 類型映射表,讓 Nginx 知道不同文件擴(kuò)展名對應(yīng)哪種 Content-Type 必須包含,除非你手動定義所有類型
        default_type application/octet-stream; # 設(shè)置當(dāng)無法識別文件類型時,默認(rèn)使用的 MIME 類型 推薦值,安全且合理

        ##
        # SSL Settings
        ##

        # ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        # ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        # 設(shè)置日志模式
        log_format  main '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $body_bytes_sent '
                         '"$http_referer" "$http_user_agent" '
                         'upstream_response_time $upstream_response_time '
                         'request_time $request_time';
        access_log /var/log/nginx/access.log main;

        ##
        # Gzip Settings
        ##

        gzip on; # 開啟 Gzip 壓縮功能

        gzip_vary on; # 在響應(yīng)頭中添加 Vary: Accept-Encoding 告訴 CDN、反向代理、瀏覽器:壓縮版和非壓縮版是不同的資源
        gzip_proxied no-cache no-store private expired auth; # 控制代理請求 在包含哪些響應(yīng)頭的時候開啟壓縮
        gzip_comp_level 6; # 設(shè)置壓縮級別(1~9)
        gzip_buffers 32 4k; # 設(shè)置壓縮緩沖區(qū)大小 表示使用 16 個 8KB 的緩沖區(qū)
        gzip_http_version 1.1; # 指定啟用壓縮的最小 HTTP 版本
        gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 指定哪些 MIME 類型的響應(yīng)內(nèi)容需要壓縮

        ##
        # Virtual Host Configs
        ##

         # server段配置信息
        server {
                listen       80;       # 配置監(jiān)聽的端口
                server_name  localhost;    # 定義虛擬主機(jī)的域名或通配符,用于匹配客戶端請求的 Host 頭 支持精確匹配、通配符匹配、正則表達(dá)式匹配、泛域名匹配

                # location段配置信息 定義如何處理匹配特定 URI 的請求,是 server 塊中最核心的子塊。=:精確匹配(優(yōu)先級最高)、~:區(qū)分大小寫的正則匹配、~*:不區(qū)分大小寫的正則匹配、^~:前綴匹配(匹配成功后不再檢查正則)、無修飾符:前綴匹配
                location / {
                        root   /usr/share/nginx/html;  # 網(wǎng)站根目錄
                        index  index.html index.htm;   # 默認(rèn)首頁文件
                        deny 192.168.22.11;   # 禁止訪問的ip地址,可以為all
                        allow 192.168.33.44; # 允許訪問的ip地址,可以為all
                }

                error_page 500 502 503 504 /50x.html;  # 默認(rèn)50x對應(yīng)的訪問頁面
                error_page 400 404 error.html;   # 同上
        }
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}
                                                                                                                                                        

server 塊中的關(guān)鍵指令詳解

  1. listen:定義服務(wù)器監(jiān)聽的 IP 地址和端口。

    • 語法listen address:port [parameters];

    • 常用參數(shù)

      • default_server:將此 server 設(shè)為默認(rèn)服務(wù)器(當(dāng)沒有匹配的 server_name 時使用)。
      • ssl:啟用 SSL/TLS。
      • http2:啟用 HTTP/2。
      • reuseport:允許多個 worker 進(jìn)程監(jiān)聽同一端口(提升性能)。
    • 示例

      listen 80;
      listen 443 ssl http2;
      listen 192.168.1.1:80 default_server;
      
  2. server_name:定義虛擬主機(jī)的域名或通配符,用于匹配客戶端請求的 Host 頭。

  • 語法server_name name1 name2 ...;

  • 支持類型

    • 精確匹配:example.com
    • 通配符:*.example.comwww.example.*
    • 正則表達(dá)式:~^www\d+\.example\.com$
    • 泛域名匹配:_(匹配任何 Host)
  • 示例

    server_name example.com www.example.com;
    server_name *.example.com;
    server_name ~^(www|api)\.example\.com$;
    
  1. location:定義如何處理匹配特定 URI 的請求,是 server 塊中最核心的子塊。

    • 語法location [modifier] pattern { ... }

    • 修飾符

      • =:精確匹配(優(yōu)先級最高)
      • ~:區(qū)分大小寫的正則匹配
      • ~*:不區(qū)分大小寫的正則匹配
      • ^~:前綴匹配(匹配成功后不再檢查正則)
      • 無修飾符:前綴匹配
    • 示例:

      location / {
          root /var/www/html;
      }
      
      location = /favicon.ico {
          log_not_found off;
          access_log off;
      }
      
      location ~ \.php$ {
          fastcgi_pass 127.0.0.1:9000;
          include fastcgi_params;
      }
      
  2. root 與 alias:定義文件系統(tǒng)路徑映射。

    • root:指定根目錄,請求 URI 會附加到該路徑后。

      location /static/ {
          root /var/www/html;  # /static/file.css → /var/www/html/static/file.css
      }
      
    • alias:直接替換 location 匹配部分

      location /static/ {
          alias /var/www/assets/;  # /static/file.css → /var/www/assets/file.css
      }
      
    • index:網(wǎng)站默認(rèn)首頁

    • error_page:定義錯誤處理

      error_page 404 /404.html;
      error_page 500 502 503 504 /50x.html;
      

三、使用Nginx實(shí)現(xiàn)靜態(tài)資源下載

http {
    # 1. 限制每個 IP 的并發(fā)連接數(shù)
    limit_conn_zone $binary_remote_addr zone=perip:64k;
   
    
    # 2. 限制請求頻率(可選)
    # limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
}


server {
    listen 80;
    server_name download.example.com;

    # 靜態(tài)文件根目錄
    root /var/www/downloads;
    # autoindex off;  # 關(guān)閉目錄瀏覽(安全)
    index index.html;
    
       # 允許上傳大文件(如用于反向代理上傳)
    client_max_body_size 10G;
    # 讀取客戶端請求體的超時
    client_body_timeout 60s;

    # === 強(qiáng)制下載:常見文件類型 ===
    location ~* \.(pdf|zip|tar|gz|tar\.gz|rar|7z|doc|docx|xls|xlsx|ppt|pptx|exe|msi|dmg|apk|mp4|avi|mkv|iso)$ {
        # 強(qiáng)制下載,不預(yù)覽
        add_header Content-Disposition "attachment";

        # 緩存策略:可下載的文件一般不會頻繁變,可緩存
        expires 7d;
        add_header Cache-Control "public, immutable";
        
        # 限速:每連接 1MB/s  注意:limit_rate 是每個連接的限速,多線程下載工具仍可突破。
    	limit_rate 1m;
    	
    	# 限制每個 IP 最多 1 個并發(fā)連接
    	limit_conn perip 1;
		
		# 限速前允許“突發(fā)”下載 5MB(提升體驗(yàn))
    	limit_rate_after 5m;

        # 啟用 sendfile 提升大文件傳輸性能
        sendfile        on;
        tcp_nopush      on;

        # 啟用斷點(diǎn)續(xù)傳(非常重要!)
        add_header Accept-Ranges bytes;

        # 禁用日志(可選,減少日志量)
        access_log off;
        # 防止中文亂碼
    	charset utf-8;
    }


    # === 可選:開啟目錄瀏覽(謹(jǐn)慎?。?==
     location / {
         autoindex on; # 自動目錄列表
         autoindex_exact_size off; # 控制目錄列表中文件大小是否以精確字節(jié)數(shù)顯示。
         autoindex_localtime on; # 控制目錄列表中文件時間是否顯示為本地時間。
         # 防止中文亂碼
    	 charset utf-8;
    }

    # === 安全:禁止訪問隱藏文件 ===
    location ~ /\.(?!well-known) {
        deny all;
    }

    # === 錯誤頁面 ===
    error_page 404 /404.html;
    location = /404.html {
        internal;
    }
}

四、使用Nginx實(shí)現(xiàn)反向代理 、負(fù)載均衡,限流、黑白名單

# 設(shè)置日志模式
log_format  main '$remote_addr - $remote_user [$time_local] '
                 '"$request" $status $body_bytes_sent '
                 '"$http_referer" "$http_user_agent" '
                 'upstream_response_time $upstream_response_time '
                 'request_time $request_time'
                  'cache_status:$upstream_cache_status '
                  'upstream_addr:$upstream_addr';

# 在 http 塊中定義緩存區(qū)
proxy_cache_path /var/cache/nginx levels=1:2 
                 keys_zone=my_cache:10m 
                 max_size=10g
                 inactive=60m
                 use_temp_path=off;

# nginx.conf 或在 conf.d/ 下的配置文件
upstream backend_servers {
    # 負(fù)載均衡:3 臺后端服務(wù)器,輪詢(默認(rèn))
    server 192.168.10.10:8080 weight=1; # weight配置每臺服務(wù)器的權(quán)重 parameters 可選值:weight=number 權(quán)重值,默認(rèn)為1 max_conns=number 上游服務(wù)器的最大并發(fā)連接數(shù);fail_timeout=time 服務(wù)器不可用的判定時間;max_fails=numer 服務(wù)器不可用的檢查次數(shù);backup 備份服務(wù)器,僅當(dāng)其他服務(wù)器都不可用時才會啟用;down 標(biāo)記服務(wù)器長期不可用,離線維護(hù);

    server 192.168.10.11:8080 weight=1;
    server 192.168.10.12:8080 weight=1;
	least_conn;  # least_conn 將請求分配給當(dāng)前連接數(shù)最少的服務(wù)器 默認(rèn) round_robin 還可以配置 ip_hash、hash $request_uri consistent:基于 URL 一致性哈希
    # 可選:健康檢查(需 Nginx Plus 或 OpenResty),開源版可用第三方模塊
    # 在 Nginx 與 后端服務(wù)器(如應(yīng)用服務(wù)器)之間,為每個 worker 進(jìn)程保持最多 32 個空閑的長連接(keepalive 連接),用于后續(xù)請求復(fù)用,避免頻繁建立/斷開 TCP 連接。注意需要在location中配置proxy_http_version 1.1;proxy_set_header Connection "";這兩行配置 否則keepalive不生效
    keepalive 32; 
    keepalive_requests 100; # 每個 keep-alive 連接最多處理 50 個請求后關(guān)閉。防止單個連接長時間占用 避免內(nèi)存泄漏、連接老化等問題
    keepalive_timeout 30s; # 每個空閑 keep-alive 連接保持打開狀態(tài)最長 30 秒。
}

# 限流:定義共享內(nèi)存區(qū)
# 1. 限制每個 IP 的請求頻率(防刷)
limit_req_zone $binary_remote_addr zone=api_limit:10m rate=20r/s;
# 2. 限制每個 IP 的并發(fā)連接數(shù)
limit_conn_zone $binary_remote_addr zone=conn_limit:1m;

server {
    listen 80;
    server_name api.example.com;
    # 日志格式(可選增強(qiáng))
    access_log /var/log/nginx/api.access.log main;
    error_log /var/log/nginx/api.error.log warn;

    # === 黑白名單控制 ===
    # 方法 1:白名單優(yōu)先(只允許特定 IP)
    # allow 192.168.10.0/24;
    # allow 10.0.0.1;
    # deny all;

    # 方法 2:黑名單(禁止某些 IP)
    include /etc/nginx/blacklist.conf;  # 自定義黑名單文件

    # === 限流規(guī)則 ===
    # 限制每個 IP 最多 10 個并發(fā)連接
    limit_conn conn_limit 10;

    # 限制每個 IP 每秒最多 20 個請求,突發(fā)允許 40 個 # nodelay表示突發(fā)請求不延遲處理
    limit_req zone=api_limit burst=40 nodelay;


        # 保留客戶端真實(shí)信息 這四個必須要
        proxy_set_header Host $host; # 將原始請求的 Host 頭原樣傳遞給后端
        proxy_set_header X-Real-IP $remote_addr; # 告訴后端“客戶端的真實(shí) IP 地址”。
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 構(gòu)建一個 請求經(jīng)過的代理鏈列表,記錄整個路徑上的 IP。 X-Forwarded-For: client_ip, proxy1_ip, proxy2_ip, ... 
        proxy_set_header X-Forwarded-Proto $scheme; # 告訴后端“原始請求是 HTTP 還是 HTTPS”。

        # 超時設(shè)置  Nginx 與后端服務(wù)器通信時的三個超時時間
        proxy_connect_timeout 30s; # 建立TCP鏈接的超時時間
        proxy_send_timeout 30s; # Nginx 向后端服務(wù)器發(fā)送請求數(shù)據(jù)的超時時間。注意:不是整個請求發(fā)送的總時間,而是“連續(xù)寫之間的間隔超時”
        proxy_read_timeout 30s; # Nginx 從后端服務(wù)器讀取響應(yīng)的超時時間。這個指令定義:兩次讀操作之間的等待時間不能超過 30 秒 如果后端處理請求的總時間可能很長,但只要它持續(xù)輸出響應(yīng)(比如流式輸出),就不會觸發(fā) proxy_read_timeout
        
        # 強(qiáng)制協(xié)議版本(配合 keepalive)
        proxy_http_version 1.1;
        proxy_set_header Connection "";

        # 緩沖區(qū)控制
        proxy_buffering on; # 打開緩沖區(qū)
        proxy_buffer_size 128k; #  用于存儲后端響應(yīng)“頭部”和“第一部分響應(yīng)體”的緩沖區(qū)大小。
        proxy_buffers 4 256k; # 設(shè)置 用于存儲響應(yīng)體主體的緩沖區(qū)數(shù)量和大小。 當(dāng)響應(yīng)體超過 proxy_buffer_size 的容量時,剩余數(shù)據(jù)會存到這些緩沖區(qū)中

        # 錯誤時重試下一臺
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
    # === 反向代理 + 負(fù)載均衡 ===
    location /api {
        # 反向代理到 upstream 注意 http://backend_servers 和 http://backend_servers/有很大的區(qū)別 帶不/會保留原始 URI,完整轉(zhuǎn)發(fā),帶/替換匹配部分為 /,相當(dāng)于路徑重寫
        proxy_pass http://backend_servers;

    }

    # === 特殊路徑放行或加強(qiáng)限制 ===
    # 例如:登錄接口限得更嚴(yán)
    # location = /login {
    #    limit_req zone=api_limit burst=5 nodelay;  # 更嚴(yán)格
    #    proxy_pass http://backend_servers;
    #    proxy_set_header Host $host;
    #    # ... 其他 proxy 設(shè)置
    # }

    # 靜態(tài)資源可緩存
    location ~* \.(jpg|jpeg|png|gif|css|js|ico|webp)$ {
        proxy_pass http://backend_servers;
        
        # 啟用緩存
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;   # 成功響應(yīng)緩存 10 分鐘
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout updating; # 緩存容錯機(jī)制
        expires 10m; # 添加 Expires 頭
        # add_header Cache-Control "public, immutable"; # public 表示該資源可以被 任何中間代理、CDN、瀏覽器緩存,immutable:這是一個性能優(yōu)化提示,告訴瀏覽器:“這個資源一旦緩存,內(nèi)容永遠(yuǎn)不會改變,你不用再發(fā)請求去檢查它是否更新!”
    }

    # 錯誤頁面
    error_page 403 /403.html;
    error_page 500 502 503 504 /50x.html;
}

五、解決跨域問題(CORS)

當(dāng)前端部署在 https://web.example.com,后端 API 在 https://api.example.com 時,需配置 CORS。

location /api/ {
    proxy_pass http://backend_servers/;
    
    # 啟用 CORS
    add_header 'Access-Control-Allow-Origin' 'https://web.example.com' always; # 指定哪個源(Origin) 被允許訪問資源 always示無論響應(yīng)狀態(tài)碼是多少(即使是 500、404),都添加這個頭
    add_header 'Access-Control-Allow-Methods' '*' always; # 聲明服務(wù)器支持的 HTTP 方法
    add_header 'Access-Control-Allow-Headers' '*' always; # 聲明服務(wù)器允許客戶端發(fā)送的自定義請求頭
    add_header 'Access-Control-Expose-Headers' '*' always; # 聲明哪些響應(yīng)頭可以被 JavaScript 讀取

    # 預(yù)檢請求直接返回 204
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Max-Age' 86400; # 告訴瀏覽器:這個預(yù)檢結(jié)果可以緩存 86400 秒
        add_header 'Content-Type' 'text/plain; charset=utf-8'; # 設(shè)置響應(yīng)體的 MIME 類型
        add_header 'Content-Length' 0; # 與 return 204 配合,確保響應(yīng)正確
        return 204;
    }
}

? ?? 注意:生產(chǎn)環(huán)境避免使用 * 通配符,應(yīng)明確指定域名。

六、配置防盜鏈保護(hù)靜態(tài)資源

防止其他網(wǎng)站盜用你的圖片、視頻等資源。

防盜鏈配置(基于 Referer)

location ~* \.(jpg|jpeg|png|gif|mp4|avi|css|js)$ {
    valid_referers none blocked *.example.com example.com; # 定義哪些 Referer(來源頁)是合法的。 none 表示允許 Referer 為空的請求(直接通過URL請求) blocked 表示 允許 Referer 被防火墻或代理屏蔽/加密的情況

    if ($invalid_referer) {
        return 403;
        # 或重定向到默認(rèn)圖片
        # rewrite ^/ https://example.com/forbidden.png redirect;
    }

    expires 1y;
    add_header Cache-Control "public, immutable";
}

? 說明

  • valid_referers 定義合法來源
  • $invalid_referer 為 1 時表示非法引用
  • 結(jié)合緩存提升性能

七、SSL/TLS 證書配置(HTTPS)

使用 Let’s Encrypt 免費(fèi)證書實(shí)現(xiàn) HTTPS。

1. 使用 Certbot 自動獲取證書

sudo apt install certbot python3-certbot-nginx -y # 如果安裝不了需要換源
sudo certbot --nginx -d test.api.com # 域名需要公網(wǎng)可訪問 # certbot 生成的證書默認(rèn)放在 /etc/letsencrypt/live/your-domain.com/ 下邊 包含fullchain.pem證書鏈(Nginx 的 ssl_certificate) 和 privkey.pem 私鑰(Nginx 的 ssl_certificate_key) ,注意certbot會自動修改Nginx配置但也可以手動修改檢查
# systemctl list-timers | grep certbot # 檢查自動續(xù)期是否可用
# sudo certbot renew --dry-run # 手動測試?yán)m(xù)期 # 證書到期后Nginx需要重新加載證書才可用 可以通過添加鉤子的方法自動重載

2. 手動配置 SSL(示例)

# 生成自簽名證書
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout /etc/ssl/nginx/selfsigned.key \
  -out /etc/ssl/nginx/selfsigned.crt \
  -subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN= api.example.com"
參數(shù)含義
-x509生成自簽名證書(不是證書請求)
-nodes不加密私鑰(Nginx 啟動時不用輸密碼)
-days 365有效期 365 天
-newkey rsa:2048生成 2048 位 RSA 密鑰
-keyout私鑰保存路徑
-out證書保存路徑
-subj證書信息(可自定義)
CN=download.example.com 是你的域名
server {
    listen 443 ssl http2; # 啟用https 和 http2協(xié)議
    server_name api.example.com;

    ssl_certificate /etc/ssl/nginx/selfsigned.crt; # ssl公鑰位置
    ssl_certificate_key /etc/ssl/nginx/selfsigned.key; # ssl私鑰位置

    ssl_protocols TLSv1.2 TLSv1.3; # 指定支持的 TLS 協(xié)議版本。
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; # 指定加密套件(Cipher Suites),決定客戶端和服務(wù)器如何加密通信。
    ssl_prefer_server_ciphers off; # 控制是否優(yōu)先使用服務(wù)器指定的加密套件。off:客戶端優(yōu)先選擇(更兼容)on:服務(wù)器優(yōu)先(更安全)

    # 安全頭
    add_header Strict-Transport-Security "max-age=63072000" always; # 強(qiáng)制瀏覽器在未來 63072000 秒(約 2 年)內(nèi)只能通過 HTTPS 訪問
    add_header X-Frame-Options DENY always; # 防止點(diǎn)擊劫持(Clickjacking)DENY:不允許被 <iframe> 嵌入
    add_header X-Content-Type-Options nosniff always; # 防止 MIME 類型嗅探攻擊
    add_header X-Permitted-Cross-Domain-Policies none always; # 防止舊式 Flash 跨域攻擊
    add_header Referrer-Policy "no-referrer" always; # 瀏覽器在任何情況下都不會發(fā)送 Referer 頭。
		
    location / {
        proxy_pass http://backend_servers;
        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_set_header X-Forwarded-Proto $scheme;
    }
}

總結(jié) 

到此這篇關(guān)于Nginx部署及配置的文章就介紹到這了,更多相關(guān)Nginx部署及配置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Nginx中IF語句實(shí)現(xiàn)數(shù)學(xué)比較功能

    Nginx中IF語句實(shí)現(xiàn)數(shù)學(xué)比較功能

    這篇文章主要介紹了Nginx中IF語句實(shí)現(xiàn)數(shù)學(xué)比較功能,即在Nginx中用if判斷數(shù)字大小,類似編程語言中的邏輯比較,需要的朋友可以參考下
    2015-02-02
  • Linux配置nginx腳本的操作方法

    Linux配置nginx腳本的操作方法

    正常來說,配置nginx相對來說比較麻煩,這里寫一個sh腳本,可以之間完成相關(guān)的操作,其中包括,換 nginx的源,加載nginx前置的依賴,同樣包含nginx的conf文件配置,這篇文章主要介紹了Linux配置nginx腳本的操作方法,需要的朋友可以參考下
    2024-05-05
  • Nginx+Tomcat+Https 服務(wù)器負(fù)載均衡配置實(shí)踐方案詳解

    Nginx+Tomcat+Https 服務(wù)器負(fù)載均衡配置實(shí)踐方案詳解

    這篇文章主要介紹了Nginx+Tomcat+Https 服務(wù)器負(fù)載均衡配置實(shí)踐方案的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-09-09
  • Nginx HTTP反向代理負(fù)載均衡實(shí)驗(yàn)教程

    Nginx HTTP反向代理負(fù)載均衡實(shí)驗(yàn)教程

    文章描述了在192.168.65.135上部署Nginx作為七層HTTP反向代理,將www.xiaotiantian.org的流量輪詢轉(zhuǎn)發(fā)到兩臺后端Web服務(wù)器,并驗(yàn)證了反向代理的負(fù)載均衡和故障轉(zhuǎn)移功能
    2025-12-12
  • Nginx啟用proxy_cache緩存的方法

    Nginx啟用proxy_cache緩存的方法

    本篇文章主要介紹了Nginx啟用proxy_cache緩存的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • nginx下支持PATH_INFO的方法實(shí)例詳解

    nginx下支持PATH_INFO的方法實(shí)例詳解

    這篇文章主要介紹了nginx下支持PATH_INFO的方法,結(jié)合實(shí)例形式詳細(xì)分析了nginx下使用PATH_INFO模式的具體方法與相關(guān)使用技巧,需要的朋友可以參考下
    2016-02-02
  • Nginx 502 Bad Gateway錯誤原因及解決方案

    Nginx 502 Bad Gateway錯誤原因及解決方案

    這篇文章主要介紹了Nginx 502 Bad Gateway錯誤原因及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 淺談Nginx請求限制和訪問控制的實(shí)現(xiàn)

    淺談Nginx請求限制和訪問控制的實(shí)現(xiàn)

    這篇文章主要介紹了淺談Nginx請求限制和訪問控制的實(shí)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Nginx 轉(zhuǎn)發(fā)匹配規(guī)則的實(shí)現(xiàn)

    Nginx 轉(zhuǎn)發(fā)匹配規(guī)則的實(shí)現(xiàn)

    這篇文章主要介紹了Nginx 轉(zhuǎn)發(fā)匹配規(guī)則的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Nginx報(bào)Too Many Open Files總結(jié)

    Nginx報(bào)Too Many Open Files總結(jié)

    本文提供了解決Nginx服務(wù)器出現(xiàn)Too many open files錯誤的方法,包括檢查和調(diào)整文件句柄限制、修改系統(tǒng)配置文件及nginx配置等,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-01-01

最新評論

江安县| 南木林县| 万山特区| 建德市| 寿宁县| 吉林省| 石景山区| 彰化市| 鹤壁市| 东丰县| 上虞市| 凤城市| 双江| 房产| 定陶县| 鸡泽县| 横峰县| 江阴市| 钟祥市| 德化县| 赤峰市| 黔江区| 乐至县| 昌江| 宁国市| 浦江县| 东阳市| 墨玉县| 盐亭县| 平邑县| 磴口县| 虎林市| 彩票| 隆回县| 东乡县| 邵东县| 嘉禾县| 黄陵县| 辽宁省| 洛南县| 三明市|