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