前言
之前的文章講解了Nginx的安裝,介紹等,可以看下我之前的文章,接下來講解nginx的配置和指令的使用。
全局屬性配置
- #user nobody,user是個主模塊指令,指定Nginx Worker進程運行用戶以及用戶組,默認由nobody賬號運行。
- error_log是個主模塊指令,用來定義全局錯誤日志文件。日志輸出級別有debug、info、notice、warn、error、crit可供選擇,其中,debug輸出日志最為最詳細,而crit輸出日志最少。
- pid是主模塊指令,用來指定進程id的存儲文件位置
- worker_processes 1; #啟動進程數(shù),根據(jù)你的電腦CPU數(shù),1個,4個或8個
events:工作模式及連接數(shù)上限
- use是個事件模塊指令,用來指定Nginx的工作模式。Nginx支持的工作模式有select、poll、kqueue、epoll、rtsig和/dev/poll。其中select和poll都是標準的工作模式,kqueue和epoll是高效的工作模式,不同的是epoll用在linux平臺上,而kqueue用在BSD系統(tǒng)中。對于Linux系統(tǒng),epoll工作模式是首選。
- worker_connections也是個事件模塊指令,用于定義Nginx每個進程的最大連接數(shù),默認是1024.最大客戶端連接數(shù)由worker_processes和worker_connections決定,即Max_client=worker_processes*worker_connections,在作為反向代理時,max_clients變?yōu)椋簃ax_clients = worker_processes * worker_connections/4。
進程的最大連接數(shù)受Linux系統(tǒng)進程的最大打開文件數(shù)限制,在執(zhí)行操作系統(tǒng)命令“ulimit -n 65536”后worker_connections的設(shè)置才能生效。
http:處理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;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the php scripts to Apache listening on 127.0.0.1:80
#
#location ~ .php$ {
# proxy_pass http://127.0.0.1;
#}
# 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;
# 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 {
}
- include mime.types;引用mime.types,這個類型定義了很多,當web服務器收到靜態(tài)的資源文件請求時,依據(jù)請求文件的后綴名在服務器的MIME配置文件中找到對應的MIME Type,根據(jù)MIME TYPE設(shè)置并response響應類型(Content-type)。
常見的mime.types:
default_type application/octet-stream;定義的數(shù)據(jù)流,有的時候默認類型可以指定為text,這跟我們的網(wǎng)頁發(fā)布還是資源下載是有關(guān)系的。
log_format main...;用于指定Nginx日志的輸出格式。main為此日志輸出格式的名稱,可以在下面的access_log指令中引用。
$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"',
遠程ip – 遠程用戶/用戶時間 請求方法(get/post) 狀態(tài) 請求body長度 referer來源信息 http-user-agent 用戶代理 被轉(zhuǎn)發(fā)的原始請求IP,由這些屬性組成日志格式。
系統(tǒng)日志默認配置
sendfile on;指定NGINX是否調(diào)用這個函數(shù)來輸出文件,對于普通的文件我們必須設(shè)置為ON,如果NGINX專門做為一個下載端的話可以關(guān)掉,好處是降低磁盤與網(wǎng)絡(luò)的IO處理數(shù)及系統(tǒng)的UPTIME。
tcp_nopush on; 防止網(wǎng)絡(luò)阻塞
autoindex on;開啟目錄列表訪問,適合下載服務器
tcp_nodelay on;提高數(shù)據(jù)的實時響應性
keepalive_timeout;根據(jù)實際情況設(shè)置值,超時時間,客戶端到服務端的連接持續(xù)有效時間,60秒內(nèi)可避免重新建立連接,時間也不能設(shè)太長,太長的話,若請求數(shù)10000,都占用連接會把服務托死。
gzip on;NGINX可以壓縮靜態(tài)資源,比例我的靜態(tài)資源有10M,壓縮后只有2M,那么瀏覽器下載的就少了。
其他屬性配置:
gzip_min_length 1k;設(shè)置允許壓縮的頁面最小字節(jié)數(shù),頁面字節(jié)數(shù)從header頭的Content-Length中獲取。默認值是0,不管頁面多大都進行壓縮。建議設(shè)置成大于1K的字節(jié)數(shù),小于1K可能會越壓越大。
gzip_buffers 4 16k;表示申請4個單位為16K的內(nèi)存作為壓縮結(jié)果流緩存,默認值是申請與原始數(shù)據(jù)大小相同的內(nèi)存空間來存儲gzip壓縮結(jié)果
gzip_http_version 1.1;于設(shè)置識別HTTP協(xié)議版本,默認是1.1,目前大部分瀏覽器已經(jīng)支持GZIP解壓,使用默認即可。
gzip_comp_level 2;#壓縮級別大小,最小1,最大9,值越小,壓縮后比例越小,CPU處理更快,為1時,原10M壓縮完后8M,但設(shè)為9時,壓縮完可能只有2M了
gzip_types text/plain application/x-JAVAscript text/css application/xml; 壓縮類型:text,js css xml 都會被壓縮
gzip_vary on; #作用是在http響應中增加一行目的是改變反向代理服務器的緩存策略
server虛擬主機配置
- listen:用于指定虛擬主機的服務端口。
- server_name:用來指定IP地址或者域名,多個域名之間用空格分開。
- index:用于設(shè)定訪問的默認首頁地址,root指令用于指定虛擬主機的網(wǎng)頁根目錄,這個目錄可以是相對路徑,也可以是絕對路徑。
- Charset:用于設(shè)置網(wǎng)頁的默認編碼格式。
- access_log logs/www.ixdba.net.access.log main:access_log用來指定此虛擬主機的訪問日志存放路徑,最后的main用于指定訪問日志的輸出格式。
在實際應用可以做如下配置。基于域名,端口,IP的虛擬主機。
1.基于域名的虛擬主機
2.基于端口的虛擬主機
3.基于Ip地址的虛擬主機
location段配置
Location主要做定位功能,根據(jù)uri來進行不同的定位。
語法:location [=|~|~*|^~] /uri/ { …}
= 開頭表示精確匹配
^~ 表示uri以某個常規(guī)字符串開頭,相當于匹配uri路徑
~ 區(qū)分大小寫的正則匹配
!~ 區(qū)分大小寫不匹配
!~* 不區(qū)分大小不匹配
~* 不區(qū)分大小寫的正則匹配
/ 通用匹配
匹配優(yōu)先級
1. 首先匹配精準路徑
2. 如果兩個location都是一般匹配規(guī)則,那么會按照最長路徑匹配
3. 一般匹配和正則匹配的過程是:首先會選擇一般匹配過程中的大前綴匹配,但是匹配過程不會停止,最大前綴匹配只是一個臨時結(jié)果,nginx還會繼續(xù)檢查正則location。
按照正則location在配置文件的物理順序做匹配,如果匹配到一條正則location,就不會考慮后面的規(guī)則
以下這段設(shè)置是通過location指令來對網(wǎng)頁URL進行分析處理,所有擴展名以.gif、.jpg、.jpeg、.png、.bmp、.swf結(jié)尾的靜態(tài)文件都交給nginx處理,而expires用來指定靜態(tài)文件的過期時間,這里是30天。
location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$ {
root /web/wwwroot/www.ixdba.net;
expires 30d;
}
以下這段設(shè)置是將upload和html下的所有文件都交給nginx來處理,當然,upload和html目錄包含在/web/wwwroot/www.ixdba.net目錄中。
location ~ ^/(upload|html)/ {
root /web/wwwroot/www.ixdba.net;
expires 30d;
}
在最后這段設(shè)置中,location是對此虛擬主機下動態(tài)網(wǎng)頁的過濾處理,也就是將所有以.jsp為后綴的文件都交給本機的8080端口處理。
location ~ .*.jsp$ {
index index.jsp;
proxy_pass http://localhost:8080;
}
參考文獻:https://blog.51cto.com/ixdba/790611






