在前面已經演示了Nginx的安裝以及常用命令,這一章節重點講解nginx的配置文件。
1. nginx配置文件路徑:
不同安裝方式,nginx的文件存放路徑也有所不同。
源碼編譯安裝方式:在安裝目錄下的conf目錄下,比如我的安裝目錄是/usr/local/nginx,那么他的配置文件就在/usr/local/nginx/conf目錄下。
yum安裝方式:在/etc/nginx/目錄(主配置文件)與/etc/nginx/conf.d目錄下。
2. nginx配置文件的結構:
通常源碼安裝的nginx的配置文件,會是下面這種結構,yum安裝的有細微差異(大致是一樣的,就是server是通過include引用的獨立配置文件)。
...
events {
...
}
http {
...
server {
....
location {
root html;
...
}
}
}
nginx的配置指令可以分為兩大類:指令塊與單個指令。
指令塊就是像events { },http { },server { }等,單獨指令就是像root html;這樣的。
nginx規定指令塊可以嵌套,如http塊中可以嵌套server指令,server塊中可以嵌套location指令,指令可以同時出現在不同的指令塊,如root指令可以同時出現在http、server和location指令塊,需要注意的是在location中定義的指令會覆蓋server,http的指令。
3. 代碼解析:
3.1 全局配置:
user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
user :指定nginx的工作進程的用戶及用戶組,默認是nobody用戶。
worker_processes :指定工作進程的個數,默認是1個。具體可以根據服務器cpu數量進行設置,
比如cpu有4個,可以設置為4。如果不知道cpu的數量,可以設置為auto。
nginx會自動判斷服務器的cpu個數,并設置相應的進程數。
error_log :設置nginx的錯誤日志路徑,并設置相應的輸出級別。
如果編譯時沒有指定編譯調試模塊,那么 info就是最詳細的輸出模式了。
如果有編譯debug模塊,那么debug時最為詳細的輸出模式。這里設置為默認就好了。
pid :指定nginx進程pid的文件路徑。
events :這個指令塊用來設置工作進程的工作模式以及每個進程的連接上限。
use :用來指定nginx的工作模式,通常選擇epoll,除了epoll,還有select,poll。
worker_connections :定義每個工作進程的最大連接數,默認是1024。
客戶端最大連接數,就要考慮有幾個工作進程了,兩者相乘就是的。
當nginx作反向代理時,需要除以2.
ps:進程的最大連接數受linux系統進程的最大打開文件數限制。
比如ulimit -n 默認時1024,如果不改變這個值,
即使修改工作進程為2048,也無法處理這么多連接。
http指令塊
3.2 http指令塊:
http {
include mime.types;
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"';
#access_log logs/access.log main;
client_max_body_size 20m;
client_header_buffer_size 32K;
large_client_header_buffers 4 32k;
Sendfile on;
tcp_nopush on;
tcp_nodelay on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
...
location {
root html;
...
}
}
}
include :主要是可以引用指定的配置文件。
default_type :設定默認類型為二進制流,也就是當文件類型未定義時使用這種方式,
例如在沒有配置php環境時,Nginx是不予解析的,
此時,用瀏覽器訪問PHP文件就會出現下載窗口。
log_format :定義日志文件格式,并默認取名為main,可以自定義該名字。
也可以通過添加,刪除變量來自定義日志文件的格式。
access_log :定義訪問日志的存放路徑,并且通過引用log_format所定義的main名稱設置其輸出格式。
sendfile :用于開啟高效文件傳輸模式。將tcp_nopush和tcp_nodelay兩個指令設置為on用于防止網絡阻塞;
keepalive_timeout :設置客戶端連接保持活動的超時時間。在超過這個時間之后,服務器會關閉該連接。
gzip on :開啟壓縮功能,減少文件傳輸大小,節省帶寬。
client_max_body_size :用來設置允許客戶端請求的最大的單個文件字節數
client_header_buffer_size :用于指定來自客戶端請求頭的header_buffer大小。
對于大多數請求,1K的緩沖區大小已經足夠,
如果自定義了消息頭或有更大的Cookie,可以增加緩沖區大小。這里設置為32K
large_client_header_buffers :用來指定客戶端請求中較大的消息頭的緩存最大數量和大小,
“4”為個數,“128K”為大小,最大緩存量為4個128K
client_header_timeout :設置客戶端請求頭讀取超時時間。如果超過這個時間,
客戶端還沒有發送任何數據,Nginx將返回“Request time out(408)”錯誤
client_body_timeout :設置客戶端請求主體讀取超時時間。
如果超過這個時間,客戶端還沒有發送任何數據,Nginx將返回“Request time out(408)”錯誤,默認值是60
send_timeout :指定響應客戶端的超時時間。這個超時僅限于兩個連接活動之間的時間,
如果超過這個時間,客戶端沒有任何活動,Nginx將會關閉連接。
3.3 server指令塊:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
index index.html index.htm;
location /
{
root html;
...
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#location ~ .php$ {
...
#}
#location ~ /.ht {
# deny all;
#}
}
server :用來定義虛擬主機。
listen :設置監聽端口,默認為80端口
server_name :域名,多個域名通過逗號隔開
Charset :設置網頁的默認編碼格式
access_log :指定該虛擬主機的獨立訪問日志,會覆蓋前面的全局配置。
index :設置默認的索引文件
location :定義請求匹配規則。
error_page :定義訪問錯誤返回的頁面,凡是狀態碼是500 502 503 504 都會返回這個頁面。
3.4 location指令塊:
#location ~ .php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /.ht {
# deny all;
#}
location ~ .php$ :凡是以php結尾文件,都會匹配到這條規則。
root :php文件存放的目錄
fastcgi_pass :指定php-fpm進程管理的ip端口或者unix套接字
fastcgi_index :指定php腳本目錄下的索引文件
fastcgi_param :指定傳遞給FastCGI服務器的參數
location ~ /.ht :凡是請求類似.ht資源,都拒絕。
這是比較基本的nginx配置,更加詳細的配置需要結合企業的生產需求,遇到了在加以說明。