#==========================nginx全局配置==========================#
# 指定 nginx 進(jìn)程運行的用戶匾鸥,這里是 nginx虑瀑,默認(rèn)為nobody。
user nginx;
# 指定 nginx 使用多少個 worker 進(jìn)程處理請求嚷兔,這里使用了 auto栏笆,表示根據(jù) CPU 核心數(shù)自動分配类腮。
worker_processes auto;
# 指定 nginx 主進(jìn)程的 PID 文件路徑。
pid /run/nginx.pid;
#指定錯誤日志文件的路徑
error_log /var/log/nginx/error.log;
#==========================nginx全局配置==========================#
##==========================events==========================##
# 事件模塊的配置
events {
# 默認(rèn)值512,設(shè)置每個 worker 進(jìn)程的最大連接數(shù)蛉加。
worker_connections 1024;
# 默認(rèn)值off,控制是否在一次事件循環(huán)中accept多個連接請求蚜枢。啟用 multi_accept 可以減少 CPU 的使用和系統(tǒng)調(diào)用的次數(shù)缸逃,也可能會導(dǎo)致每個請求的響應(yīng)時間增加
multi_accept on;
# 使用連接互斥鎖進(jìn)行順序的accept()系統(tǒng)調(diào)用,防止驚群現(xiàn)象發(fā)生厂抽,默認(rèn)為on
accept_mutex on;
# 如果一個進(jìn)程沒有互斥鎖察滑,它將延遲至少多長時間。默認(rèn)情況下修肠,延遲是500ms
accept_mutex_delay 500ms
# 指定事件驅(qū)動模塊,默認(rèn)值select,這個驅(qū)動模塊在大量連接時,性能較差户盯,這里使用了 epoll嵌施。 可選select|poll|kqueue|epoll|resig|/dev/poll|eventport
use epoll;
# 設(shè)置 accept 互斥鎖等待時間。
accept_mutex_delay 500ms;
# 實驗?zāi)K莽鸭,僅在 FreeBSD 下可用,aio 啟用則使用異步I/O,不啟用則使用同步I/O,默認(rèn)不啟用
aio threads; # 指定異步 I/O 模塊吗伤,這里使用了 threads。
aio_write on; # 啟用異步寫入操作硫眨。
aio_read on; # 啟用異步讀取操作足淆。
# 事件驅(qū)動模塊 use epoll時配置
epoll_events 1024; # 默認(rèn)值為 512,即每次事件循環(huán)最多處理 512 個事件礁阁。
epoll_event_connections 512; # 默認(rèn)值為 2048巧号,即每個事件最多處理 2048 個連接。
epoll_timeout 1s; # 默認(rèn)值為 0姥闭,即 epoll 模塊不會超時丹鸿,等待事件的時間取決于操作系統(tǒng)。
//事件驅(qū)動模塊 use kqueue時配置,僅在 FreeBSD 下可用
kqueue_events 1024;
kqueue_event_connections 512;
kqueue_timeout 1s;
}
##==========================events==========================##
##==========================http==========================##
# 主要用于處理 HTTP 請求和響應(yīng)棚品,包括路由靠欢、反向代理、緩存铜跑、日志等功能门怪。
http {
# 導(dǎo)入 MIME 類型的配置文件。
include /etc/nginx/mime.types;
# 定義默認(rèn)的 MIME 類型锅纺,默認(rèn)為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;
# 默認(rèn)開啟,直接把文件內(nèi)容從磁盤讀入內(nèi)核緩沖區(qū),尤其是在處理大文件時囤锉,效果更為明顯拣帽。
sendfile on;
# 每個進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值,默認(rèn)為0嚼锄,即不設(shè)上限减拭。
sendfile_max_chunk 100k;
# 客戶端與服務(wù)器之間的連接超時時間,默認(rèn)值為 75s区丑。
keepalive_timeout 75;
# 在一個持久連接上最多允許的請求數(shù)量拧粪,默認(rèn)值為 100修陡。
keepalive_requests 100;
# 是否開啟 Gzip 壓縮,默認(rèn)值為 off可霎。
gzip on;
gzip_types text/plain text/css application/json application/javascript application/xml; # 壓縮文件類型列表
gzip_min_length 20; # 只壓縮大于該長度的文件魄鸦,單位為字節(jié),默認(rèn)值為 20癣朗。
gzip_buffers 4 8k; # 第一個參數(shù)表示緩沖區(qū)的數(shù)量拾因,第二個參數(shù)表示每個緩沖區(qū)的大小。 默認(rèn)值為 4 8k旷余。
# 當(dāng)服務(wù)器返回錯誤碼時绢记,可以顯示指定的錯誤頁面。
error_page error_page 404 /404.html;
###==========================upstream=========================###
# upstream 模塊用于配置反向代理服務(wù)器組正卧,可以將客戶端請求轉(zhuǎn)發(fā)到多臺服務(wù)器進(jìn)行處理蠢熄,從而實現(xiàn)負(fù)載均衡和高可用性。
upstream backend {
# 簡單的循環(huán)負(fù)載均衡
server backend1.example.com;
server backend2.example.com;
# 使用權(quán)重進(jìn)行負(fù)載平衡
server backend3.example.com weight=3; #指定服務(wù)器的權(quán)重炉旷,缺省為 1签孔,可以是任意正整數(shù)。
server backend4.example.com weight=2;
# 使用IP Hash值進(jìn)行權(quán)重進(jìn)行負(fù)載平衡,確保來自同一 IP 的請求總是發(fā)送到同一服務(wù)器窘行。
ip_hash;
# 用最少的連接進(jìn)行負(fù)載均衡,動態(tài)地將請求發(fā)送到最空閑的服務(wù)器饥追。
least_conn;
# 使用服務(wù)器響應(yīng)時間進(jìn)行負(fù)載平衡,將請求發(fā)送到響應(yīng)時間最短的服務(wù)器。
fair;
# 根據(jù)請求 URL 的哈希值進(jìn)行負(fù)載平衡
hash $remote_addr consistent;
# 隨機(jī)發(fā)送到服務(wù)器
random;
# 為backend分配一個共享內(nèi)存區(qū)域罐盔。
zone backend_zone 64k;
# 指定與后端服務(wù)器的 TCP 連接復(fù)用數(shù)判耕,缺省為 1。
keepalive 16;
# 指定與后端服務(wù)器的 TCP 連接最大請求數(shù)翘骂,超過此數(shù)量壁熄,連接將關(guān)閉并重新建立新連接。默認(rèn)為 100碳竟。
keepalive_requests 100;
# 指定與后端服務(wù)器的 TCP 連接空閑超時時間草丧,默認(rèn)為 75 秒。
keepalive_timeout 60s;
}
###==========================upstream=========================###
###==========================server=========================###
server {
# 監(jiān)聽端口
listen 80;
# 指定服務(wù)器的主機(jī)名莹桅。它可以是域名昌执、IP 地址或*匹配任何主機(jī)名,也可以配置多個域名
server_name example.com;
# 根目錄
root /var/www/example.com;
# 限速 每秒4K
set $limit_rate 4k;
# 當(dāng)用戶訪問example.com 或 example.com/ 時
location / {
# 指定用于提供文件的回退機(jī)制。如果請求的文件不存在诈泼,nginx將嘗試返回fallback
try_files index.html index.htm @fallback;
}
# 上面try files 回退到這里
location @fallback {
root /var/www/error;
index index.html;
}
# 當(dāng)用戶訪問example.com/api時
location /api {
# 反向代理到 http://backend/api; 本配置中 backend 是個負(fù)載均衡器
proxy_pass http://backend/api;
}
# 當(dāng)用戶訪問example.com/images時
location /images/ {
# alias 看起來類似于 root 指令懂拾,但文檔根目錄沒有改變,只是用于當(dāng)前請求的路徑铐达。
# /images/top.gif 將返回 /var/www/images/top.gif
alias /var/www/images/;
# 設(shè)置緩存時間為1天,原理是Header 設(shè)置Cache-Control
expires 1d;
# 添加header
add_header Cache-Control "public";
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_index index.php;
# 使用fastcgi協(xié)議 轉(zhuǎn)發(fā)到 phpfpm的unix socket文件 phpfpm 和 nginx 同一臺機(jī)器才可以這么配置
fastcgi_pass unix:/var/run/php/php7.x-fpm.sock;
# 使用fastcgi協(xié)議 轉(zhuǎn)發(fā)到某個服務(wù)器某個端口
fastcgi_pass 127.0.0.1:9000;
# 使用fastcgi協(xié)議 轉(zhuǎn)發(fā)到負(fù)載均衡器
fastcgi_pass http://backend/
deny 127.0.0.1; #拒絕的ip
allow 172.18.5.54; #允許的ip
}
# SSL 配置 監(jiān)聽443
listen 443 ssl;
# 證書路徑
ssl_certificate /etc/ssl/certs/example.com.crt;
# 證書私鑰
ssl_certificate_key /etc/ssl/private/example.com.key;
# HTTP/2 配置 監(jiān)聽443
listen 443 ssl http2;
# 設(shè)置安全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 模塊