本篇來(lái)學(xué)習(xí)一下nginx的相關(guān)配置敷鸦。
#user? nobody? ;指定用戶(hù)。如不指定就是nobody。指定用戶(hù)有什么意義呢重绷?主要是指定nginx worker process的用戶(hù)。linux中所有程序都是文件纵寝,都具有權(quán)限問(wèn)題论寨。這個(gè)指定的用戶(hù)對(duì)特定的文件有沒(méi)有權(quán)限訪問(wèn)或執(zhí)行星立,就是這個(gè)用戶(hù)的意義爽茴。
worker_processes? 1; ?工作進(jìn)程的數(shù)量,根據(jù)硬件設(shè)置绰垂,通常是CPU的個(gè)數(shù)或2倍于CPU
#error_log? logs/error.log; ?錯(cuò)誤日志的存放路徑
#pid logs/nginx.pid ?pid(進(jìn)程標(biāo)識(shí)符)的存放路徑
events {
worker_connections? 1024;
} 事件類(lèi)型? 這里面會(huì)有很大選項(xiàng)室奏,比如:use epoll,使用epoll的IO模型劲装,linux推薦使用這種胧沫。FreeBSD建議采用kqueue,window下不指定占业;
worker_connections 204800 每個(gè)進(jìn)程的最大連接數(shù)绒怨,根據(jù)硬件調(diào)整
open_file_cache max=65535 inactive=60s;? 這個(gè)將為打開(kāi)文件指定緩存,默認(rèn)是沒(méi)有啟用的谦疾,max指定緩存數(shù)量南蹂,建議和打開(kāi)文件數(shù)一致,inactive是指經(jīng)過(guò)多長(zhǎng)時(shí)間文件沒(méi)被請(qǐng)求后刪除緩存念恍。
open_file_cache_valid 80s;
這個(gè)是指多長(zhǎng)時(shí)間檢查一次緩存的有效信息
##設(shè)定http服務(wù)器六剥,利用它的反向代理功能提供負(fù)載均衡支持
http
{
include mime.types; ?設(shè)定mime類(lèi)型,類(lèi)型由mime.type文件定義
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"';
log_format?log404 '$status?[$time_local]?$remote_addr?$host$request_uri?$sent_http_location';
$remote_addr與$http_x_forwarded_for用以記錄客戶(hù)端的ip地址;
$remote_user:用來(lái)記錄客戶(hù)端用戶(hù)名稱(chēng)峰伙;
$time_local:?用來(lái)記錄訪問(wèn)時(shí)間與時(shí)區(qū)疗疟;
$request:?用來(lái)記錄請(qǐng)求的url與http協(xié)議;
$status:?用來(lái)記錄請(qǐng)求狀態(tài)瞳氓;成功是200策彤,
$body_bytes_sent?:記錄發(fā)送給客戶(hù)端文件主體內(nèi)容大小匣摘;
$http_referer:用來(lái)記錄從那個(gè)頁(yè)面鏈接訪問(wèn)過(guò)來(lái)的店诗;
$http_user_agent:記錄客戶(hù)瀏覽器的相關(guān)信息;
通常web服務(wù)器放在反向代理的后面恋沃,這樣就不能獲取到客戶(hù)的IP地址了必搞,通過(guò)$remote_add拿到的IP地址是反向代理服務(wù)器的iP地址。反向代理服務(wù)器在轉(zhuǎn)發(fā)請(qǐng)求的http頭信息中囊咏,可以增加x_forwarded_for信息恕洲,用以記錄原有客戶(hù)端的IP地址和原來(lái)客戶(hù)端的請(qǐng)求的服務(wù)器地址塔橡。
access_log? logs/host.access.log? main;
access_log??logs/host.access.404.log??log404;
用了log_format指令設(shè)置了日志格式之后,需要用access_log指令指定日志文件的存放路徑
client_max_body_size 300m;
設(shè)定通過(guò)nginx上傳文件的大小
sendfile on;
sendfile指令指定?nginx?是否調(diào)用sendfile?函數(shù)(zero?copy?方式)來(lái)輸出文件霜第,對(duì)于普通應(yīng)用葛家,必須設(shè)為on。如果用來(lái)進(jìn)行下載等應(yīng)用磁盤(pán)IO重負(fù)載應(yīng)用泌类,可設(shè)置為off癞谒,以平衡磁盤(pán)與網(wǎng)絡(luò)IO處理速度,降低系統(tǒng)uptime刃榨。
tcp_nopush on;
此選項(xiàng)允許或禁止使用socke的TCP_CORK的選項(xiàng)弹砚,此選項(xiàng)僅在使用sendfile的時(shí)候使用
proxy_send_timeout 180;
后端服務(wù)器數(shù)據(jù)回傳時(shí)間_就是在規(guī)定時(shí)間之內(nèi)后端服務(wù)器必須傳完所有的數(shù)據(jù)
proxy_cache_path /data0/proxy_cache_dir levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
#設(shè)置內(nèi)存緩存空間大小為200MB,1天沒(méi)有被訪問(wèn)的內(nèi)容自動(dòng)清除枢希,硬盤(pán)緩存空間大小為30GB桌吃。
keepalive_timeout?120;
keepalive超時(shí)時(shí)間。
client_body_buffer_size 512k;
如果把它設(shè)置為比較大的數(shù)值苞轿,例如256k茅诱,那么,無(wú)論使用firefox還是IE瀏覽器搬卒,來(lái)提交任意小于256k的圖片瑟俭,都很正常。如果注釋該指令契邀,使用默認(rèn)的client_body_buffer_size設(shè)置摆寄,也就是操作系統(tǒng)頁(yè)面大小的兩倍,8k或者16k蹂安,問(wèn)題就出現(xiàn)了椭迎。
無(wú)論使用firefox4.0還是IE8.0,提交一個(gè)比較大田盈,200k左右的圖片畜号,都返回500?Internal?Server?Error錯(cuò)誤
proxy_intercept_errors?on;
表示使nginx阻止HTTP應(yīng)答代碼為400或者更高的應(yīng)答。
##配置虛擬機(jī)
server
{
listen?80;
配置監(jiān)聽(tīng)端口
server_name?image.***.com;
配置訪問(wèn)域名
location?~*?\.(mp3|exe)$?{
對(duì)以“mp3或exe”結(jié)尾的地址進(jìn)行負(fù)載均衡
proxy_pass http://img_relay$request_uri;
設(shè)置被代理服務(wù)器的端口或套接字允瞧,以及URL
proxy_set_header?Host?$host;
proxy_set_header?X-Real-IP?$remote_addr;
proxy_set_header?X-Forwarded-For?$proxy_add_x_forwarded_for;
以上三行简软,目的是將代理服務(wù)器收到的用戶(hù)的信息傳到真實(shí)服務(wù)器上
}
}