#==========================nginx全域性配置==========================#
# 指定 nginx 程式執行的使用者,這裡是 nginx,預設為nobody。
user nginx;
# 指定 nginx 使用多少個 worker 程式處理請求,這裡使用了 auto,表示根據 CPU 核心數自動分配。
worker_processes auto;
# 指定 nginx 主程式的 PID 檔案路徑。
pid /run/nginx.pid;
#指定錯誤日誌檔案的路徑
error_log /var/log/nginx/error.log;
#==========================nginx全域性配置==========================#
##==========================events==========================##
# 事件模組的配置
events {
# 預設值512,設定每個 worker 程式的最大連線數。
worker_connections 1024;
# 預設值off,控制是否在一次事件迴圈中accept多個連線請求。啟用 multi_accept 可以減少 CPU 的使用和系統呼叫的次數,也可能會導致每個請求的響應時間增加
multi_accept on;
# 使用連線互斥鎖進行順序的accept()系統呼叫,防止驚群現象發生,預設為on
accept_mutex on;
# 如果一個程式沒有互斥鎖,它將延遲至少多長時間。預設情況下,延遲是500ms
accept_mutex_delay 500ms
# 指定事件驅動模組,預設值select,這個驅動模組在大量連線時,效能較差,這裡使用了 epoll。 可選select|poll|kqueue|epoll|resig|/dev/poll|eventport
use epoll;
# 設定 accept 互斥鎖等待時間。
accept_mutex_delay 500ms;
# 實驗模組,僅在 FreeBSD 下可用,aio 啟用則使用非同步I/O,不啟用則使用同步I/O,預設不啟用
aio threads; # 指定非同步 I/O 模組,這裡使用了 threads。
aio_write on; # 啟用非同步寫入操作。
aio_read on; # 啟用非同步讀取操作。
# 事件驅動模組 use epoll時配置
epoll_events 1024; # 預設值為 512,即每次事件迴圈最多處理 512 個事件。
epoll_event_connections 512; # 預設值為 2048,即每個事件最多處理 2048 個連線。
epoll_timeout 1s; # 預設值為 0,即 epoll 模組不會超時,等待事件的時間取決於作業系統。
//事件驅動模組 use kqueue時配置,僅在 FreeBSD 下可用
kqueue_events 1024;
kqueue_event_connections 512;
kqueue_timeout 1s;
}
##==========================events==========================##
##==========================http==========================##
# 主要用於處理 HTTP 請求和響應,包括路由、反向代理、快取、日誌等功能。
http {
# 匯入 MIME 型別的配置檔案。
include /etc/nginx/mime.types;
# 定義預設的 MIME 型別,預設為text/plain
default_type application/octet-stream;
# 定義訪問日誌格式 main
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;
# 指定錯誤日誌檔案的路徑和格式。
error_log /var/log/nginx/error.log main;
# 預設開啟,直接把檔案內容從磁碟讀入核心緩衝區,尤其是在處理大檔案時,效果更為明顯。
sendfile on;
# 每個程式每次呼叫傳輸數量不能大於設定的值,預設為0,即不設上限。
sendfile_max_chunk 100k;
# 客戶端與伺服器之間的連線超時時間,預設值為 75s。
keepalive_timeout 75;
# 在一個持久連線上最多允許的請求數量,預設值為 100。
keepalive_requests 100;
# 是否開啟 Gzip 壓縮,預設值為 off。
gzip on;
gzip_types text/plain text/css application/json application/javascript application/xml; # 壓縮檔案型別列表
gzip_min_length 20; # 只壓縮大於該長度的檔案,單位為位元組,預設值為 20。
gzip_buffers 4 8k; # 第一個參數列示緩衝區的數量,第二個參數列示每個緩衝區的大小。 預設值為 4 8k。
# 當伺服器返回錯誤碼時,可以顯示指定的錯誤頁面。
error_page error_page 404 /404.html;
###==========================upstream=========================###
# upstream 模組用於配置反向代理伺服器組,可以將客戶端請求轉發到多臺伺服器進行處理,從而實現負載均衡和高可用性。
upstream backend {
# 簡單的迴圈負載均衡
server backend1.example.com;
server backend2.example.com;
# 使用權重進行負載平衡
server backend3.example.com weight=3; #指定伺服器的權重,預設為 1,可以是任意正整數。
server backend4.example.com weight=2;
# 使用IP Hash值進行權重進行負載平衡,確保來自同一 IP 的請求總是傳送到同一伺服器。
ip_hash;
# 用最少的連線進行負載均衡,動態地將請求傳送到最空閒的伺服器。
least_conn;
# 使用伺服器響應時間進行負載平衡,將請求傳送到響應時間最短的伺服器。
fair;
# 根據請求 URL 的雜湊值進行負載平衡
hash $remote_addr consistent;
# 隨機傳送到伺服器
random;
# 為backend分配一個共享記憶體區域。
zone backend_zone 64k;
# 指定與後端伺服器的 TCP 連線複用數,預設為 1。
keepalive 16;
# 指定與後端伺服器的 TCP 連線最大請求數,超過此數量,連線將關閉並重新建立新連線。預設為 100。
keepalive_requests 100;
# 指定與後端伺服器的 TCP 連線空閒超時時間,預設為 75 秒。
keepalive_timeout 60s;
}
###==========================upstream=========================###
###==========================server=========================###
server {
# 監聽埠
listen 80;
# 指定伺服器的主機名。它可以是域名、IP 地址或*匹配任何主機名,也可以配置多個域名
server_name example.com;
# 根目錄
root /var/www/example.com;
# 限速 每秒4K
set $limit_rate 4k;
# 當使用者訪問example.com 或 example.com/ 時
location / {
# 指定用於提供檔案的回退機制。如果請求的檔案不存在,nginx將嘗試返回fallback
try_files index.html index.htm @fallback;
}
# 上面try files 回退到這裡
location @fallback {
root /var/www/error;
index index.html;
}
# 當使用者訪問example.com/api時
location /api {
# 反向代理到 http://backend/api; 本配置中 backend 是個負載均衡器
proxy_pass http://backend/api;
}
# 當使用者訪問example.com/images時
location /images/ {
# alias 看起來類似於 root 指令,但文件根目錄沒有改變,只是用於當前請求的路徑。
# /images/top.gif 將返回 /var/www/images/top.gif
alias /var/www/images/;
# 設定快取時間為1天,原理是Header 設定Cache-Control
expires 1d;
# 新增header
add_header Cache-Control "public";
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
# 使用fastcgi協議 轉發到 phpfpm的unix socket檔案 phpfpm 和 nginx 同一臺機器才可以這麼配置
fastcgi_pass unix:/var/run/php/php7.x-fpm.sock;
# 使用fastcgi協議 轉發到某個伺服器某個埠
fastcgi_pass 127.0.0.1:9000;
# 使用fastcgi協議 轉發到負載均衡器
fastcgi_pass http://backend/
deny 127.0.0.1; #拒絕的ip
allow 172.18.5.54; #允許的ip
}
# SSL 配置 監聽443
listen 443 ssl;
# 證照路徑
ssl_certificate /etc/ssl/certs/example.com.crt;
# 證照私鑰
ssl_certificate_key /etc/ssl/private/example.com.key;
# HTTP/2 配置 監聽443
listen 443 ssl http2;
# 設定安全header
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
}
###==========================server=========================###
}
##==========================http==========================##
@@todo rewrite 模組
本作品採用《CC 協議》,轉載必須註明作者和本文連結