# nginx.conf文件示例
user nobody; worker_processes 8; error_log varlog/nginx/error.log error; #pid logs/nginx.pid events { use epoll; worker_connections 50000; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr [$time_local] "$request" '; access_log logs/access.log main buffer=32k; ... }
全部的事件類配置都要在events中nginx
events {...web
}正則表達式
http {服務器
upstream backend {網絡
server 127.0.0.1:8080;app
}優化
gzip on;spa
server {debug
...日誌
location /webstatic {
gzip off;
}
}
}
塊配置項能夠嵌套。內層塊 直接繼承外層塊 ,當發生衝突時,之內層爲準,如上面的gzip 在外層爲 on ,到location內層時 gzip爲off
塊配置項由一個塊配置項名和一對大括號組成
基本的配置項語法格式爲:
配置項名 配置項值1 配置項值2 ...;
在行首的是配置名,這些配置名必須是nginx的某一個模塊須要處理的,不然nginx會認爲配置文件出現裏非法配置名
配置項名結束後以空格做爲分隔符
配置項值能夠是數字,字符串,正則表達式,能夠只有一個值或多個值, 每行配置的結尾須要加上分號
若是配置項值中包括語法符號如空格,須要使用單/雙 引號括住配置項值
nginx.conf中的註釋以 #開頭
配置項的單位
指定空間大小時可以使用 : K/k 表示KB M/m 表示 MB
時間單位可以使用: ms(毫秒) s(秒) m(分鐘) h(小時) d(天) w(周,7天) M(月,30天) y(年,365天)
配置項中使用變量(只有某些模塊支持這種 使用變量的寫法)
log_format main '$remote_addr- $remote_user [$time_local] "$request" ' ;
上例中 $remote_addr表示一個變量 remote_addr
nginx服務的基本配置
daemon on|off; 默認 daemon on; 設置nginx是否以守護進程(脫離終端在後臺運行的進程)方式運行
master_process on|off; 默認master_process on; 生產環境中nginx都是以一個master進程管理多個worker進程的方式運行;
若是關閉 ,則不會fork出worker子進程,而是master進程自身來處理請求
error_log pathfile level ; 默認爲 logs/error.log error; 設置nginx err日誌的位置與等級 ,級別有debug,info,notice,warn error,crit,alert,emerg
debug_connection[IP|CIDR] 改配置屬於事件配置,必須放在events{...}中才有效,能夠是ip地址或cidr地址。需確保編譯執行congfigure時是使用了--with-debug參數。
如
events {
debug_connection 10.224.66.14;
debug_connection 10.224.57.0/24;
}
這樣只有來自上面IP地址的請求才會輸出debug級別的日誌,其餘請求仍然沿用error_log中配置的日誌級別
worker_rlimit_core size; 限制core dump核心轉儲文件的大小
working_directory path; worker進程的工做目錄,用於設置coredump文件的存儲目錄,需確保worker進程有權限向working_directory指定的目錄寫入文件
include pathfile; 導入其餘配置文件中的配置 ,pathfile能夠是絕對路徑 也能夠是相對路徑(相對於nginx.conf所在的目錄)如
include mime.types;
include vhost/*.conf;
參數值能夠是一個明確的文件名,也能夠是含有通配符*的文件名,同時能夠一次嵌入多個配置文件
pid pathfile; 默認pid logs/nginx.pid; 需確保nginx有權在相應的目標中建立pid文件
user username[ groupname]; 默認 user nobody nobody; 設置master進程啓動後,fork出的worker進程運行在哪一個用戶和用戶組下,不設置用戶組時,用戶組與用戶名相同
worker_processes number; 默認worker_processes 1 ;在master/worker運行方式下,定義worker進程的個數
use [ kqueue|rtsig|epoll|/dev/poll|select|poll|eventport]; 默認nginx會自動使用最合適的事件模型
worker_connections number; 定義每一個worker進程能夠同時處理的最大鏈接數
靜態web服務器
一個典型的靜態web服務器還會包含多個server塊和location塊
http { gzip on; upstream { ... } ... server { listen localhost:80; ... location /webstatic { if ... { ... } root opt/web/resource; ... } location ~* .(jpg|jpeg|png|jpe|gif)$ { ... } } server { ... } }
全部的http配置項都必須直屬於 http塊,server塊,location塊,upstream塊或 if塊等
有些配置項能夠任意地出如今某一個塊中,有些配置項只能出如今特定的塊中。
靜態的web服務器提供了許多功能: 虛擬主機與請求的分發,文件路徑的定義,內存及磁盤資源的分配,網絡鏈接的設置,MIME類型設置,客戶端請求的限制,文件操做的優化,客戶端請求的特殊處理。
虛擬主機與請求的分發
一般存在多個主機域名對應同一個IP地址,每一個server塊就是一個虛擬機,它只處理與之相對應的主機域名請求
這樣一臺服務器上的nginx就能以不一樣的方式處理訪問不一樣主機域名的http請求了
server{
listen address:port
}
默認爲listen 80; listen參數決定nginx如何監聽端口,在listen後能夠只加IP地址,端口或主機名
例:
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
若是是IPV6地址,能夠寫成
listen [::]:8000;
listen [fe80::1];
listen [:::a8c9:1234]:80;
地址和端口後還能夠加上其餘參數,如:
listen 43 default_serer ssl;
listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
default/default_server :將所在server塊做爲整個web服務的默認server塊,若是沒有設置,則以第一個server塊爲默認server塊。
沒法匹配配置文件中的任何主機域名的請求,會由默認server處理