一.nginx主配置文件目錄:
1.win-utf, koi-utf,koi-win
這三個文件都是與編碼轉(zhuǎn)換映射文件喷市,用于在輸出內(nèi)容到客戶端時相种,將一種編碼轉(zhuǎn)換到另一種編碼。
koi-win:?charset_map??koi8-r < -- > windows-1251
koi-utf:?charset_map??koi8-r < -- > utf-8
win-utf:?charset_map??windows-1251 < -- > utf-8
koi8-r是斯拉夫文字8位元編碼品姓,供俄語及保加利亞語使用寝并。在Unicode未流行之前,KOI8-R?是最為廣泛使用的俄語編碼腹备,使用率甚至起ISO/IEC 8859-5還高衬潦。這3個文件存在是因為作者是俄國人的原因。
2.mine.type?
?文件擴展名與文件類型映射表馏谨,nginx根據(jù)映射關(guān)系别渔,設(shè)置http請求響應(yīng)頭的Content-Type值。當(dāng)文件類型映射表中查找不到的時候使用nginx.conf中http模塊中配置了default-type指定的默認值惧互。
例如哎媚,默認配置中的指定的default-type為application/octet-stream。
? ? include???????mime.types;
????default_type??application/octet-stream;
3.fastcgi.conf(新)是nginx 0.8.30 (released: 15th of December 2009)才引入的
nginx配置Fastcgi解析時會調(diào)用fastcgi_params配置文件來傳遞服務(wù)器變量喊儡,這樣CGI中可以獲取到這些變量的值拨与。默認傳遞以下變量:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #腳本文件請求的路徑
fastcgi_param??QUERY_STRING???????$query_string;? ? ? ? ? ? ?#請求的參數(shù);如?app=123
fastcgi_param??REQUEST_METHOD?????$request_method;? ?#請求的動作(GET,POST)
fastcgi_param??CONTENT_TYPE???????$content_type;? ? ? ?#請求頭中的Content-Type字段
fastcgi_param??CONTENT_LENGTH?????$content_length;? ? #請求頭中的Content-length字段。
fastcgi_param??SCRIPT_NAME????????$fastcgi_script_name;? ? #腳本名稱
fastcgi_param??REQUEST_URI????????$request_uri;? ? ? ? ? ?#請求的地址不帶參數(shù)
fastcgi_param??DOCUMENT_URI???????$document_uri;? ? ?#與$uri相同艾猜。
fastcgi_param??DOCUMENT_ROOT??????$document_root;? ?#網(wǎng)站的根目錄买喧。在server配置中root指令中指定的值
fastcgi_param??SERVER_PROTOCOL????$server_protocol;? ?#請求使用的協(xié)議,通常是HTTP/1.0或HTTP/1.1匆赃。
fastcgi_param??GATEWAY_INTERFACE??CGI/1.1;? ? ? ? ? ? ?#cgi?版本
fastcgi_param??SERVER_SOFTWARE????nginx/$nginx_version;? ?#nginx?版本號淤毛,可修改、隱藏
fastcgi_param??REMOTE_ADDR????????$remote_addr;?#客戶端IP
fastcgi_param??REMOTE_PORT????????$remote_port;?#客戶端端口
fastcgi_param??SERVER_ADDR????????$server_addr;?#服務(wù)器IP地址
fastcgi_param??SERVER_PORT????????$server_port;?#服務(wù)器端口
fastcgi_param??SERVER_NAME????????$server_name;?#服務(wù)器名算柳,域名在server配置中指定的server_name
#fastcgi_param??PATH_INFO?????????$path_info;#可自定義變量
#?PHP?only,?required?if?PHP?was?built?with?–enable-force-cgi-redirect? ? ?#php編譯時候需要添加參數(shù)--enable-force-cgi-redirect
fastcgi_param??REDIRECT_STATUS????200; 〉偷#返回碼
自定義的變量例如:
#?用一個文件或狀態(tài)碼(404)作為最后一個參數(shù),如果是最后一個參數(shù)是文件,那么這個文件必須存在
try_files? $fastcgi_script_name?=?404;
#可以自定義值,比如區(qū)分開發(fā)(dev)和生成環(huán)境(product)瞬项,在php中用getenv('MY_ENV')或$_SERVER['MY_ENV']獲取
fastcgi_param?MY_ENV?"product";
#防跨站設(shè)置
fastcgi_param?PHP_ADMIN_VALUE?"open_basedir=$document_root/:/data/tmp/php/upload/:/proc/";
4.fastcgi_param
與fastcgi.conf的作用是一樣的蔗蹋,只不過fastcgi_param已經(jīng)被棄用了
兩者的區(qū)別就是(fastcgi.conf 比fastcgi_param多一行):
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #腳本文件請求的路徑
a.原本Nginx只有fastcgi_params,后來發(fā)現(xiàn)很多人在定義SCRIPT_FILENAME時使用了硬編碼的方式囱淋。例如猪杭,fastcgi_param SCRIPT_FILENAME?/var/www/foo$fastcgi_script_name。于是為了規(guī)范用法便引入了fastcgi.conf妥衣。
b.不過這樣的話就產(chǎn)生一個疑問:為什么一定要引入一個新的配置文件皂吮,而不是修改舊的配置文件戒傻?這是因為fastcgi_param指令是數(shù)組型的,和普通指令相同的是:內(nèi)層替換外層涮较;和普通指令不同的是:當(dāng)在同級多次使用的時候稠鼻,是新增而不是替換冈止。換句話說狂票,如果在同級定義兩次SCRIPT_FILENAME,那么它們都會被發(fā)送到后端熙暴,這可能會導(dǎo)致一些潛在的問題闺属,為了避免此類情況,便引入了一個新的配置文件周霉。
c.因此不再建議大家使用以下方式:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
而使用最新的方式:
include fastcgi.conf;
5.uwsgi_param
與fastcgi_params一樣掂器,傳遞哪些服務(wù)器變量,只有前綴不一樣俱箱,以uwsgi_param開始而非fastcgi_param国瓮。
6.uwsgi_param
與fastcgi_params一樣,傳遞哪些服務(wù)器變量狞谱,只有前綴不一樣乃摹,以uwsgi_param開始而非fastcgi_param
7.nginx.conf? ? nginx的主配置文件,其余配置文件跟衅,一般只需要使用默認提供即可
配置文件主要由四部分組成:main(全區(qū)設(shè)置)孵睬,event事件,http常量配置伶跷,server(主機配置)掰读。#代表默認參數(shù)
?1)main全局設(shè)置
#Nginx的worker進程運行用戶以及用戶組
#user nobody nobody;
#Nginx開啟的進程數(shù)
worker_processes?1;
#worker_processes auto;
#以下參數(shù)指定了哪個cpu分配給哪個進程,一般來說不用特殊指定叭莫。如果一定要設(shè)的話蹈集,用0和1指定分配方式.
#這樣設(shè)就是給1-4個進程分配單獨的核來運行,出現(xiàn)第5個進程是就是隨機分配了雇初。
eg:
#worker_processes 4 #4核CPU
#worker_cpu_affinity 0001 0010 0100 1000
#定義全局錯誤日志定義類型拢肆,日志級別([debug|info|notice|warn|crit])
#error_log logs/error.log info;
錯誤日志 日志存放位置 日志級別
#指定進程ID存儲文件位置
#pid logs/nginx.pid;
#一個nginx進程打開的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開文件數(shù)(ulimit -n)與nginx進程數(shù)相除抵皱,但是nginx分配請求并不是那么均勻善榛,所以最好與ulimit -n的值保持一致(文件描述符默認大小是1024)。
#vim /etc/security/limits.conf(如修改它需要重新啟動)
# * soft nproc 65535
# * hard nproc 65535
# * soft nofile 65535
# * hard nofile 65535
worker_rlimit_nofile 65535;
2)event事件配置
events?{
#use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
epoll模型是Linux 2.6以上版本內(nèi)核中的高性能網(wǎng)絡(luò)I/O模型呻畸,如果跑在FreeBSD上面移盆,就用kqueue模型。
use epoll;
#每個進程可以處理的最大連接數(shù)伤为,理論上每臺nginx服務(wù)器的最大連接數(shù)為worker_processes*worker_connections咒循。
理論值:worker_rlimit_nofile/worker_processes
#注意:最大客戶數(shù)也由系統(tǒng)的可用socket連接數(shù)限制(~ 64K)据途,所以設(shè)置不切實際的高沒什么好處
worker_connections?65535;? (默認設(shè)置為1024)
#worker工作方式:串行(一定程度降低負載,但服務(wù)器吞吐量大時叙甸,關(guān)閉使用并行方式)
#multi_accept on;
}
3)http時間配置
#文件擴展名與文件類型映射表
include mime.types;
#當(dāng)文件類型映射表中查找不到的時候使用默認文件類型
default_type application/octet-stream;
#日志相關(guān)定義
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#定義日志的格式颖医,定義要輸出的內(nèi)容及介紹。
#a.$remote_addr 與$http_x_forwarded_for 用以記錄客戶端的ip地址裆蒸;
#b.$remote_user :用來記錄客戶端用戶名稱熔萧;
#c.$time_local :用來記錄訪問時間與時區(qū);
#d.$request :用來記錄請求的url與http協(xié)議僚祷;
#e.$status :用來記錄請求狀態(tài)佛致;
#f.$body_bytes_sent :記錄發(fā)送給客戶端文件主體內(nèi)容大小辙谜;
#g.$http_referer :用來記錄從那個頁面鏈接訪問過來的俺榆;
#h.$http_user_agent :記錄客戶端瀏覽器的相關(guān)信息
#連接訪問日志的路徑,指定的日志級別放在最后装哆。
#access_log logs/access.log main;
#只記錄更為嚴(yán)重的錯誤日志罐脊,減少IO壓力
error_log logs/error.log crit;
#關(guān)閉日志
#access_log off;
#默認編碼
#charset utf-8;
#服務(wù)器名字的hash表大小
server_names_hash_bucket_size?128;
#客戶端請求單個文件的最大字節(jié)數(shù)
client_max_body_size?8m;
#指定來自客戶端請求頭的headerbuffer大小
client_header_buffer_size?32k;
#指定客戶端請求中較大的消息頭的緩存最大數(shù)量和大小。
large_client_header_buffers?4?64k;
#開啟高效傳輸模式蜕琴。
sendfile on;
#防止網(wǎng)絡(luò)阻塞
tcp_nopush on;
tcp_nodelay on;?
#客戶端連接超時時間萍桌,單位是秒
keepalive_timeout?60;
#客戶端請求頭讀取超時時間,單位是秒
? ?client_header_timeout 10;
#設(shè)置客戶端請求主體讀取超時時間奸绷,單位是秒
? ?client_body_timeout 10;
#響應(yīng)客戶端超時時間梗夸,單位是秒
? send_timeout 10;
#FastCGI相關(guān)參數(shù)是為了改善網(wǎng)站的性能:減少資源占用,提高訪問速度号醉。
fastcgi_connect_timeout?300;
fastcgi_send_timeout?300;
fastcgi_read_timeout?300;
fastcgi_buffer_size?64k;
fastcgi_buffers?4?64k;
fastcgi_busy_buffers_size?128k;
fastcgi_temp_file_write_size?128k;
#gzip模塊設(shè)置反症,開啟gzip壓縮輸出
gzip on;
#最小壓縮文件大小
gzip_min_length?1k;
#壓縮緩沖區(qū)個數(shù)和大小
gzip_buffers?4?16k;
#壓縮版本(默認1.1,前端如果是squid2.5請使用1.0)
gzip_http_version?1.0;
#壓縮等級 1-9 等級越高畔派,壓縮效果越好铅碍,節(jié)約寬帶,但CPU消耗大
gzip_comp_level?2;
#壓縮類型线椰,默認就已經(jīng)包含text/html胞谈,所以下面就不用再寫了,寫上去也不會有問題憨愉,但是會有一個warn烦绳。
#gzip_types text/plain application/x-javascript text/css application/xml;
#前端緩存服務(wù)器緩存經(jīng)過壓縮的頁面
?gzip_vary on;
4)server虛擬主機基本設(shè)置:
#虛擬主機定義
server?{
? ? ? ?listen?80;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #監(jiān)聽端口
? ? ? ?server_name localhost;? ? ? ? ? ? #訪問域名
? ? ? ??#charset koi8-r;#編碼格式,若網(wǎng)頁格式與此不同配紫,將被自動轉(zhuǎn)碼
? ? ? ?#虛擬主機訪問日志定義及日志級別
? ? ? #access_log logs/host.access.log main;
? ? ? ?#對URL進行匹配
? ? ? ? location?/?{?
? ? ? ? ? ?root html; #訪問路徑径密,可相對也可絕對路徑
? ? ? ? ? ? index index.html index.htm index.php;?#首頁文件。以下按順序匹配
? ? ? ? ? }
#error_page 404 /404.html;? ? ? ? ??#錯誤信息返回頁面
# redirect server error pages to the static page /50x.html? #服務(wù)器錯誤返回頁面
error_page?500?502?503?504?/50x.html;
location?=?/50x.html?{
root html;
}
#訪問URL以.php結(jié)尾則自動轉(zhuǎn)交給127.0.0.1
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
#php腳本請求全部轉(zhuǎn)發(fā)給FastCGI處理
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# include fastcgi.conf;
#}
#禁止訪問.ht頁面 (需ngx_http_access_module模塊)
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#location ~ /\.ht {
# deny all;
#}
}
#ip加端口和域名加端口虛擬機配置
another virtual host using mix of IP-, name-, and port-based configuration
? ? #server {
? ? #? ? listen? ? ? 8000;
? ? #? ? listen? ? ? somename:8080;
? ? #? ? server_name? somename? alias? another.alias;
? ? #? ? location / {
? ? #? ? ? ? root? html;
? ? #? ? ? ? index? index.html index.htm;
? ? #? ? }
? ? #}
#HTTPS虛擬主機定義
# HTTPS server
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}