Nginx主配置文件nginx.conf史上最細中文詳解... 1
第3章 Nginx核心配置文件nginx.conf史上最細中文詳解... 2
3.1 定義Nginx運行的用戶(hù)和用戶(hù)組... 2
3.2 nginxworker進(jìn)程數,即處理請求的進(jìn)程(熟稱(chēng)負責接客的服務(wù)員)... 2
3.3 cpu親和力配置,讓不同的進(jìn)程使用不同的cpu. 2
3.4 全局錯誤日志定義類(lèi)型,[ debug|info|notice|warn|error|crit]2
3.6 Nginx worker最大打開(kāi)文件數,可設置為系統優(yōu)化后的ulimit -HSn的結果... 2
3.7 IO事件模型與worker進(jìn)程連接數設置... 3
3.10 反向代理負載均衡配置(代理blog.oldboyedu.com服務(wù))... 6
3.12 設定java程序動(dòng)靜分離反向代理負載均衡配置... 7
老男孩,北京老男孩IT教育創(chuàng )始人,暢銷(xiāo)圖書(shū)作者,51CTO金牌講師,16年運維經(jīng)驗及培訓經(jīng)驗, IT界頂級Linux集群架構實(shí)戰與教育專(zhuān)家。
國內IT教育實(shí)戰心理學(xué)運維思想體系創(chuàng )始人,將心理學(xué)運維思想大量應用于教學(xué)培訓實(shí)踐,成就屌絲無(wú)數。所教學(xué)生平均就業(yè)工資及后期發(fā)展速度連續多年在國內同行業(yè)排名第一!
老男孩老師個(gè)人博客:http://oldboy.blog.51cto.com/和http://blog.oldboyedu.com
圖1-1 理解nginx http協(xié)議相關(guān)參數圖解
圖1-2 根據http原理及Fastcgi原理講解fastcgi參數優(yōu)化圖解
user nginx nginx; #改為特殊的用戶(hù)和組
worker_processes 8; #初始可設置為CPU總核數
worker_cpu_affinity 0001 0010 0100 1000 0001 00100100 1000;
error_log logs/error.log error; #一定要設置warn級別以上
pid logs/nginx.pid; #用于管理nginx進(jìn)程
worker_rlimit_nofile 65535;
events
{
#epoll模型是Linux 2.6以上版本內核中的高性能網(wǎng)絡(luò )I/O模型
use epoll;
#單個(gè)worker進(jìn)程最大連接數
worker_connections 10240; #nginx最大連接數=worker連接數*worker進(jìn)程數
}
http
{
server_tokens off; #隱藏響應header和錯誤通知中的版本號
include mime.types; #文件擴展名與文件類(lèi)型映射表
default_type application/octet-stream;#默認文件類(lèi)型
server_names_hash_max_size 512; #服務(wù)域名的最大hash表大小
server_names_hash_bucket_size 128;#服務(wù)域名的hash表大小
#開(kāi)啟高效文件傳輸模式,實(shí)現內核零拷貝
sendfile on;
#激活tcp_nopush參數可以允許把httpresponse header和文件的開(kāi)始放在一個(gè)文件里發(fā)布,積極的作用是減少網(wǎng)絡(luò )報文段的數量
tcp_nopush on;
#激活tcp_nodelay,內核會(huì )等待將更多的字節組成一個(gè)數據包,從而提高I/O性能
tcp_nodelay on;
#連接超時(shí)時(shí)間,單位是秒
keepalive_timeout 120;
#目錄列表訪(fǎng)問(wèn)參數,合適http下載,默認關(guān)閉。
autoindex off;
#讀取客戶(hù)端請求頭的超時(shí)時(shí)間(參看老男孩的書(shū)籍理解http協(xié)議原理)
client_header_timeout 15s;
#讀取客戶(hù)端請求主體的超時(shí)時(shí)間(參看老男孩的書(shū)籍理解http協(xié)議原理)
client_body_timeout 60s;
#設定讀取客戶(hù)端請求主體的最大大小。(參看老男孩的書(shū)籍理解http協(xié)議原理)
client_max_body_size 8m;
#設置服務(wù)器端傳送http響應信息到客戶(hù)端的超時(shí)時(shí)間
send_timeout 60s;
#設定訪(fǎng)問(wèn)日志的日志記錄格式,每列細節參考《跟老男孩學(xué)linux運維》:Web集群實(shí)戰
log_format main '$remote_addr - $remote_user$time_local] '$request' ' '$status $body_bytes_sent '$http_referer' ' ''$http_user_agent'$http_x_forwarded_for'';
#FastCGI參數是和動(dòng)態(tài)服務(wù)器交互起作用的參數
#設定Nginx服務(wù)器和后端FastCGI服務(wù)器連接的超時(shí)時(shí)間
fastcgi_connect_timeout 60;
#設定Nginx允許FastCGI服務(wù)端返回數據的超時(shí)時(shí)間
fastcgi_send_timeout 60;
#設定Nginx從FastCGI服務(wù)端讀取響應信息的超時(shí)時(shí)間
fastcgi_read_timeout 60;
#設定用來(lái)讀取從FastCGI服務(wù)端收到的第一部分響應信息的緩沖區大小
fastcgi_buffer_size 64k;
#設定用來(lái)讀取從FastCGI服務(wù)端收到的響應信息的緩沖區大小以及緩沖區數量
fastcgi_buffers 4 64k;
#設定系統很忙時(shí)可以使用的fastcgi_buffers大小,推薦大小為fastcgi_buffers *2。
fastcgi_busy_buffers_size 128k;
#fastcti臨時(shí)文件的大小,可設置128-256K
fastcgi_temp_file_write_size 128k;
#gzip壓縮模塊部分(此部分對于網(wǎng)站優(yōu)化極其重要)
#開(kāi)啟gzip壓縮功能。
gzip on;
#設置允許壓縮的頁(yè)面最小字節數,頁(yè)面字節數從header頭的Content-Length中獲取。默認值是0,表示不管頁(yè)面多大都進(jìn)行壓縮。建議設置成大于1K。如果小于1K可能會(huì )越壓越大。
gzip_min_length 1k;
#壓縮緩沖區大小。表示申請4個(gè)單位為16K的內存作為壓縮結果流緩存,默認值是申請與原始數據大小相同的內存空間來(lái)存儲gzip壓縮結果。
gzip_buffers 4 16k;
#壓縮版本(默認1.1,前端為squid2.5時(shí)使用1.0)用于設置識別HTTP協(xié)議版本,默認是1.1,目前大部分瀏覽器已經(jīng)支持GZIP解壓,使用默認即可。
gzip_http_version 1.1;
#壓縮比率。用來(lái)指定GZIP壓縮比,1壓縮比最小,處理速度最快;9壓縮比最大,傳輸速度快,但處理最慢,也比較消耗cpu資源。
gzip_comp_level 2;
#用來(lái)指定壓縮的類(lèi)型,“text/html”類(lèi)型總是會(huì )被壓縮,這個(gè)就是HTTP原理部分講的媒體類(lèi)型。
gzip_typestext/plain application/x-javascript text/css application/xml;
#vary header支持。該選項可以讓前端的緩存服務(wù)器緩存經(jīng)過(guò)GZIP壓縮的頁(yè)面,例如用Squid緩存經(jīng)過(guò)Nginx壓縮的數據。
gzip_vary on;
#反向代理負載均衡設定部分(可選)
#upstream表示負載服務(wù)器池,定義名字為blog.oldboyedu.com的服務(wù)器池
upstream blog.oldboyedu.com {
#server是服務(wù)器節點(diǎn)起始標簽,其后是節點(diǎn)地址,可為域名或IP,weight是權重,可以根據機器配置定義權重。weigth參數表示權值,權值越高被分配到的幾率越大。
ip_hash; #調度算法,默認是rr輪詢(xún)。
server 172.16.1.7:80 weight=1;
server 172.16.1.8:80 weight=1;
server 172.16.1.9:80 weight=1 backup; #backup表示熱備
}
###oldboy www web php server
server {
listen 80; #監聽(tīng)的端口,也可以是172.16.1.7:80形式
server_name www.oldboyedu.comoldboyedu.com; #域名
root html/blog; #站點(diǎn)根目錄,即網(wǎng)站程序放的目錄
location / { #默認訪(fǎng)問(wèn)的location標簽段
index index.php index.htmlindex.htm; #首頁(yè)排序
}
location ~.*.(php|php5)?$ { #符合php擴展名的請求調度到fcgi server
fastcgi_pass 127.0.0.1:9000; #拋給本機的9000端口(php fastcgi server)
fastcgi_index index.php; #設定動(dòng)態(tài)首頁(yè)
include fastcgi.conf; #設定和fastcgi交互的相關(guān)參數包含文件
}
#將符合靜態(tài)文件的圖片視頻流媒體等設定expries緩存參數,要求瀏覽器緩存。
location~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 10y; #客戶(hù)端緩存上述靜態(tài)數據10年
}
#將符合js,css文件的等設定expries緩存參數,要求瀏覽器緩存。
location~ .*\.(js|css)?$ {
expires 30d; #客戶(hù)端緩存上述js,css數據30天
}
access_log /app/logs/www_access.log main; #根據日志格式記錄用戶(hù)訪(fǎng)問(wèn)的日志
}
listen 80; #監聽(tīng)的端口,也可以是172.16.1.7:80形式
server_name blog.oldboyedu.com; #代理的服務(wù)域名
location / {
#將訪(fǎng)問(wèn)blog.oldboyedu.com的所有請求都發(fā)送到upstream定義的服務(wù)器節點(diǎn)池。
proxy_passhttp://blog.oldboyedu.com;
#在代理向后端服務(wù)器發(fā)送的http請求頭中加入host字段信息,用于當后端服務(wù)器配置有多個(gè)虛擬主機時(shí),可以識別代理的是哪個(gè)虛擬主機。這是節點(diǎn)服務(wù)器多虛擬主機時(shí)的關(guān)鍵配置。
proxy_set_headerHost $host;
#在代理向后端服務(wù)器發(fā)送的http請求頭中加入X-Forwarded-For字段信息,用于后端服務(wù)器程序、日志等接收記錄真實(shí)用戶(hù)的IP,而不是代理服務(wù)器的IP。
proxy_set_header X-Forwarded-For$remote_addr;
#設定反向代理與后端節點(diǎn)服務(wù)器連接的超時(shí)時(shí)間,即發(fā)起握手等候響應的超時(shí)時(shí)間。
proxy_connect_timeout60;
#設定代理后端服務(wù)器的數據回傳時(shí)間
proxy_send_timeout 60;
#設定Nginx從代理的后端服務(wù)器獲取信息的時(shí)間
proxy_read_timeout 60;
#設定緩沖區的大小
proxy_buffer_size 4k;
#設定緩沖區的數量和大小。nginx從代理的后端服務(wù)器獲取的響應信息,會(huì )放置到緩沖區。
proxy_buffers 4 32k;
#設定系統很忙時(shí)可以使用的proxy_buffers大小
proxy_busy_buffers_size 64k;
#設定proxy緩存臨時(shí)文件的大小
proxy_temp_file_write_size 64k;
#對于以上參數的詳細理解可見(jiàn)本文開(kāi)頭圖解。
}
access_log off; #反向代理如果并發(fā)大,務(wù)必要關(guān)閉日志,否則IO吃緊。
}
location /status {
stub_status on; #開(kāi)啟狀態(tài)功能
access_log off; #關(guān)閉記錄日志
auth_basic “Oldboy Server Status”; #設置基本認證提示
auth_basic_user_file conf/htpasswd; #校驗密碼文件
}
#Oldboy Bbs server
server {
listen 80; #監聽(tīng)的端口,也可以是172.16.1.7:80形式
server_name bbs.oldboyedu.com; #代理的域名
root html/bbs; #程序目錄
index index.php index.html index.htm;
#所有靜態(tài)文件由nginx服務(wù)處理
location ~.*.(htm|html|gif|jpg|jpeg|png|swf|flv)$ {
expires 3650d;
}
location ~ .*.(js|css)?$ {
expires 30d;
}
#所有java相關(guān)擴展名均交由tomcat或resin服務(wù)處理。
location ~ .(jsp|jspx|do)?$ {
#將訪(fǎng)問(wèn)blog.oldboyedu.com的所有請求都發(fā)送到upstream定義的服務(wù)器節點(diǎn)池。
proxy_pass http://127.0.0.1:8080;
#在代理向后端服務(wù)器發(fā)送的http請求頭中加入host字段信息,用于當后端服務(wù)器配置有多個(gè)虛擬主機時(shí),可以識別代理的是哪個(gè)虛擬主機。這是節點(diǎn)服務(wù)器多虛擬主機時(shí)的關(guān)鍵配置。
proxy_set_header Host $host;
#在代理向后端服務(wù)器發(fā)送的http請求頭中加入X-Forwarded-For字段信息,用于后端服務(wù)器程序、日志等接收記錄真實(shí)用戶(hù)的IP,而不是代理服務(wù)器的IP。
proxy_set_headerX-Forwarded-For $remote_addr;
}
access_log /app/logs/bbs_access.log main; #記錄日志
}
}
更多的參數,可參看《跟老男孩學(xué)linux運維:Web集群實(shí)戰》一書(shū),以及官方資料!
聯(lián)系客服