1.基本結(jié)構(gòu)
worker_process 4; events{ worker_connections 1024; }; http{ server{ } server{ } }
2.相關(guān)命令
查看nginx進(jìn)程
tasklist /fi "imagename eq nginx.exe" 顯示如下圖:
nginx常用命令(一定要進(jìn)入nginx的安裝目錄才能執(zhí)行)
nginx -s stop 強(qiáng)制關(guān)閉
nginx -s quit 安全關(guān)閉
nginx -s reload 改變配置文件的時(shí)候,重啟nginx工作進(jìn)程,來時(shí)配置文件生效
nginx -s reopen 打開日志文件
3.配置詳解
**設(shè)置 用戶和用戶組 **
user www www;//nobody低權(quán)限用戶 安全
**nginx進(jìn)程數(shù),建議設(shè)置為等于CPU總核心數(shù)或者兩倍 **
worker_process 4
**設(shè)置錯(cuò)誤日志的存放文件,全局錯(cuò)誤日志定義類型,[ debug | info | notice | warn | error | crit ] **
error_log /usr/local/nginx/logs/error.log info;
**進(jìn)程pid文件的存放路徑(pid是控制系統(tǒng)的重要文件) **
pid /usr/local/nginx/logs/nginx.pid;
指定進(jìn)程可以打開的最大描述符:數(shù)目
工作模式與連接數(shù)上限
這個(gè)指令是指當(dāng)一個(gè)nginx進(jìn)程打開的最多文件描述符數(shù)目,理論值應(yīng)該是最多打開文件數(shù)(ulimit -n)與nginx進(jìn)程數(shù)相除,但是nginx分配請(qǐng)求并不是那么均勻,所以最好與ulimit -n 的值保持一致。
現(xiàn)在在linux 2.6內(nèi)核下開啟文件打開數(shù)為65535,worker_rlimit_nofile就相應(yīng)應(yīng)該填寫65535。
這是因?yàn)閚ginx調(diào)度時(shí)分配請(qǐng)求到進(jìn)程并不是那么的均衡,所以假如填寫10240,總并發(fā)量達(dá)到3-4萬時(shí)就有進(jìn)程可能超過10240了,這時(shí)會(huì)返回502錯(cuò)誤。
worker_rlimit_nofile 65535;
**設(shè)置最大連接數(shù) **
events{ worker_connections 1024; };
http指令處理http請(qǐng)求
# http {
# mime type映射
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
# server 表示一個(gè)虛擬主機(jī),一臺(tái)服務(wù)器可配置多個(gè)虛擬主機(jī)
server {
# 監(jiān)聽端口
listen 80;
# 識(shí)別的域名
server_name localhost;
# 一個(gè)關(guān)鍵設(shè)置,與url參數(shù)亂碼問題有關(guān)
charset utf-8;
#access_log logs/host.access.log main;
#location表達(dá)式:
#syntax: location [=|~|~*|^~|@] /uri/ { … }
#分為兩種匹配模式,普通字符串匹配,正則匹配
#無開頭引導(dǎo)字符或以=開頭表示普通字符串匹配
#以~或~* 開頭表示正則匹配,~*表示不區(qū)分大小寫
#多個(gè)location時(shí)匹配規(guī)則
#總體是先普通后正則原則,只識(shí)別URI部分,例如請(qǐng)求為/test/1/abc.do?arg=xxx
#1. 先查找是否有=開頭的精確匹配,即location = /test/1/abc.do {...}
#2. 再查找普通匹配,以 最大前綴 為規(guī)則,如有以下兩個(gè)location
# location /test/ {...}
# location /test/1/ {...}
# 則匹配后一項(xiàng)
#3. 匹配到一個(gè)普通格式后,搜索并未結(jié)束,而是暫存當(dāng)前結(jié)果,并繼續(xù)再搜索正則模式
#4. 在所有正則模式location中找到第一個(gè)匹配項(xiàng)后,以此匹配項(xiàng)為最終結(jié)果
# 所以正則匹配項(xiàng)匹配規(guī)則受定義前后順序影響,但普通匹配不會(huì)
#5. 如果未找到正則匹配項(xiàng),則以3中緩存的結(jié)果為最終結(jié)果
#6. 如果一個(gè)匹配都沒有,返回404
#location =/ {...} 與 location / {...} 的差別
#前一個(gè)是精確匹配,只響應(yīng)/請(qǐng)求,所有/xxx類請(qǐng)求不會(huì)以前綴匹配形式匹配到它
#而后一個(gè)正相反,所有請(qǐng)求必然都是以/開頭,所以沒有其它匹配結(jié)果時(shí)一定會(huì)執(zhí)行到它
#location ^~ / {...} ^~意思是非正則,表示匹配到此模式后不再繼續(xù)正則搜索
#所有如果這樣配置,相當(dāng)于關(guān)閉了正則匹配功能
#因?yàn)橐粋€(gè)請(qǐng)求在普通匹配規(guī)則下沒得到其它普通匹配結(jié)果時(shí),最終匹配到這里
#而這個(gè)^~指令又相當(dāng)于不允許正則,相當(dāng)于匹配到此為止
location / {
root html;
index index.html index.htm;
# deny all; 拒絕請(qǐng)求,返回403
# allow all; 允許請(qǐng)求
}
location /test/ {
deny all;
}
location ~ /test/.+\.jsp$ {
proxy_pass http://192.168.1.62:8080;
}
location ~ \.jsp$ {
proxy_pass http://192.168.1.61:8080;
}
# 定義各類錯(cuò)誤頁
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;
}
# @類似于變量定義
# error_page 403 http://www.jikexueyuan.com這種定義不允許,所以利用@實(shí)現(xiàn)
error_page 403 @page403;
location @page403 {
proxy_pass http://http://www.jikexueyuan.com;
}
}
4.Nginx虛擬主機(jī)的配置
為了使一個(gè)服務(wù)器可以供更多的用戶使用,可以將服務(wù)器氛圍多個(gè)虛擬的自服務(wù)器,每個(gè)子服務(wù)器都是獨(dú)立的,這些服務(wù)器是根據(jù)虛擬化技術(shù)分出來的,這樣一臺(tái)服務(wù)器就可以虛擬成很多臺(tái)子服務(wù)器,我們把子服務(wù)器叫做虛擬主機(jī)
第一種:基于域名的虛擬主機(jī),通過域名來區(qū)分虛擬主機(jī)——應(yīng)用:外部網(wǎng)站
1.需要建立/data/www /data/bbs目錄,windows本地hosts添加虛擬機(jī)ip地址對(duì)應(yīng)的域名解析;對(duì)應(yīng)域名網(wǎng)站目錄下新增index.html文件; 127.0.0.1 www.mingyipc.com 127.0.0.1 www.mingyiwap.com 2.nginx.conf配置文件新增 server{ listen:80;//監(jiān)聽端口號(hào) server_name: www.mingyiipc.com;//虛擬主機(jī)名稱 accsess_log logs/mingyipc.log combined;//日志文件,默認(rèn)格式 必須 location / 虛擬主機(jī)本機(jī)根目錄 { index index.html index.htm;//默認(rèn)首頁 root html/mingyipc.html;//綁定的目錄(安裝nginx的目錄) } } server{ listen:80;//監(jiān)聽端口號(hào) server_name: www.mingyiwap.com;//虛擬主機(jī)名稱 accsess_log logs/mingyipc.log combined;//日志文件,默認(rèn)格式 必須 location / 虛擬主機(jī)本機(jī)根目錄 { index index.html index.htm;//默認(rèn)首頁 root html/mingyiwap.html;//綁定的目錄(安裝nginx的目錄) } } 訪問: www.mingyiipc.com www.mingyiwap.com
第二種:基于端口的虛擬主機(jī),通過端口來區(qū)分虛擬主機(jī)——應(yīng)用:公司內(nèi)部網(wǎng)站,外部網(wǎng)站的管理后臺(tái)
nginx.conf配置文件新增 server{ listen:8000;//監(jiān)聽端口號(hào) server_name: www.mingyi.com;//虛擬主機(jī)名稱 accsess_log logs/mingyi.log combined;//日志文件,默認(rèn)格式 必須 location / 虛擬主機(jī)本機(jī)根目錄 { index index.html index.htm;//默認(rèn)首頁 root html/mingyipc.html;//綁定的目錄(安裝nginx的目錄) } } server{ listen:8001;//監(jiān)聽端口號(hào) server_name: www.mingyi.com;//虛擬主機(jī)名稱 accsess_log logs/mingyi.log combined;//日志文件,默認(rèn)格式 必須 location / 虛擬主機(jī)本機(jī)根目錄 { index index.html index.htm;//默認(rèn)首頁 root html/mingyi.html;//綁定的目錄(安裝nginx的目錄) } } 訪問: www.mingyi.com:8000 www.mingyi.com:8001
第三種:基于ip的虛擬主機(jī),幾乎不用
1.配置多個(gè)ip ifconfig eth0 192.168.1.0 netmask 255.255.255.0 ifconfig eth0:1 192.168.1.7 broadcast 19.168.1.255 netmask 255.255.255.0 2.配置nginx server{ listen:192.168.1.7:80;//監(jiān)聽I(yíng)P地址 server_name:192.168.1.7;//虛擬主機(jī)名稱 accsess_log logs/mingyipc.log combined;//日志文件,默認(rèn)格式 必須 location / 虛擬主機(jī)本機(jī)根目錄 { index index.html index.htm;//默認(rèn)首頁 root html/mingyipc.html;//綁定的目錄(安裝nginx的目錄) } }