nginx優點
除錯nginx
參考裝好gcc g++ 開發庫環境
ubunto
$ apt-get install build-essential
$ apt-get install libtool
centos
$ yum -y install gcc automake autoconf libtool make
$ yum install gcc gcc-c++
設定nginx安裝目錄
/usr/local/nginx/
解壓nginx後編譯安裝
$ sudo ./configure \
--prefix=/usr/local/nginx/nginx \
--with-pcre=/usr/local/opensoft/pcre-8.39 \
--with-zlib=/usr/local/opensoft/zlib-1.2.8 \
--with-openssl=/usr/local/opensoft/openssl-1.0.1t
執行
/usr/local/nginx/sbin/nginx
檢視80埠是否執行
netstat -ano | grep 80
訪問 localhost ,顯示welcome to nginx! 完成安裝。
編譯安裝需要自行建立nginx shell
配置介紹
user www www; #執行使用者和組
worker_processes number | auto; #worker程序數,cpu總核同數量,減少cpu排程成本。
worker_cpu_affinity 01 10; #多核繫結,位圖表示法,ps -f檢視,psr列對應cpu號
pid /usr/local/webserver/nginx/nginx.pid; #指定pid存放的路徑
worker_rlimit_nofile; #檔案描述符數量
master_process on | off; #啟動程序池機制,預設on,如果設定為off,將不會建立master程序,用乙個worker來處理。worker_processes也會失效。
daemon on | off; #是否守護程序,預設on。
#任意域可配
error_log file | level #debug | info | notice | warn | error | crit | alert | emerg 預設error,過濾前面包含後面,debug需要編譯--with-debug,debug按模組控制等級,例如debug_http。
#反向**時nginx需要訪問的上游伺服器和負載均衡策略
#加權輪詢,基礎策略,計算各個後端伺服器的當前權值,選擇得分最高的伺服器處理當前請求。
#ip雜湊,雜湊選擇失敗20以上或一台後端伺服器,採用加權。
#加權適用性強,不依賴客戶端任何資訊,能把客戶端請求合理均勻的分配,劣勢是同乙個客戶端多次請求會被分配到不同的後端伺服器處理,無法滿足會話保持。
#ip雜湊較好地把同一客戶端的多次請求分配到同一台後端伺服器,劣勢是某個ip位址請求特別多(大量使用者通過乙個nat**請求),會導致某台後端伺服器壓力非常大,其他伺服器很空閒的不均衡情況。
upstream back_end
#取$is_args的值,定義為$my_flag,預設值為0,如果是「?」,值為1
map $is_args $my_flag
#禁止使用者通過ip位址訪問伺服器,nginx未配置該網域名稱或通過伺服器ip來訪問採用。
server
#虛擬主機配置塊
server
# 例如 location /image/ 匹配 /image/001.jpg
# = : uri必須完全匹配
# ~ : 大小寫敏感匹配 location ~ \.(php)$ 大小寫敏感處理php請求
# ~* : 大小寫不敏感匹配 location ~* \.(png)$ 忽略大小寫,匹配所有的png檔案
# ^~ : 匹配前半部分即可 location ^~ /image/ 匹配/image/*.* 優先順序比上面低。
# @ : 用於內部子請求,外部無法訪問
#乙個**的location
location /passto /person")
#try_files寫法
try_files /person$uri /$uri =400;
}
location / ,返回/var/data/001.jpg
index index.php; #預設index檔案
auth_basic auth; #彈出資訊提示字元為auth
auth_basic_user_file /etc/ngx_passwd; #賬號密碼
autoindex on; #自動列出目錄,禁用index
autoindex_exact_size on; #設定索引檔案大小的單位
autoindex_localtime on; #開啟本地時間顯示檔案時間
}#增加websocket的支援
#下列檔案快取在本地瀏覽器30天
#下列檔案快取在本地瀏覽器1小時
location ~ .*\.(js|css)?$
error_page 500 502 503 504 /50x.html; #錯誤返回頁面
}}
事件驅動,nginx內部流程的向前推進基本都是靠各種事件觸發來驅動的,否則nginx將一直阻塞在函式epoll_wait()或sigsuspend()這樣的系統呼叫上。
nginx比apache更快是因為啟用了epoll模式(linux kenel 2.6+),它不會隨著被監控描述符數目的增長而導致效率急速下降。 而apache用的是select模式,採用遍歷掃瞄來判斷每個描述符是否有事件發生。監控的描述符數目越多,消耗也就越大。而且受系統預設限制,select模型最多只能同時監控1024個描述符。
首先,基於poll的epoll具有原生poll的優點,即同時監控的描述符個數不受限制(受程序可開啟檔案描述符個數限制,cat /proc/sys/fs/file-max),其次,epoll模型對事件的響應是觸發式的,無需列表掃瞄。
epoll
1、監控描述符不受限制(受程序可開啟檔案描述符個數限制)
2、i/o事件響應觸發(lt水平觸發,不做處理核心持續通知,et邊緣觸發,通知一次,更有優勢)
select
1、監控最大1024個描述符
2、i/o事件輪詢觸發
select 標準的i/o復用模型,unix系統都提供,效能較差,nginx可編譯中禁用。
poll 標準的i/o復用模型,理論上比select優,同select類似。
epoll linux 2.6+上正式提供的更為優秀的i/o復用模型
kqueue freebsd4.1+、openbsd2.9+、netbsd2.0、os x上特有的更優秀的i/o復用模型
eventport 系統solaris 10上可用的高效能i/o復用模型
/dev/poll 同上
rtsig 實時訊號模型(real time signals)
aio 非同步i/o
多路復用模型
例子:如果要監控10條高速公路堵車(是否可讀),需要10個人(10個執行緒,10處**)來做這件事,利用某種技術把10條馬路的情況統一傳達到某個中心,那麼只需要1個人在中心進行監控就行了。而select或epoll這樣的多路i/o復用機制好比攝像頭的功能,能把多個i/o埠的狀況反饋到一處,比如某個特定的檔案描述符上,這樣,應用程式只需要利用對應的select()或epoll_wait()系統呼叫阻塞關注一處即可。
遇到效能瓶頸(strace -t 跟蹤消耗時間)、啟動失敗、響應資料與預期不一致、莫名其妙的segment ation fault段錯誤。
ps aux | grep nginx
狀態為ts(s代表nginx程序為會話的首程序,session leader,t代表處在task_stopped狀態)
使用gdb | cgdb 除錯
1、編譯nginx的時候繫結gdb
2、修改nginx為乙個工作程序,關閉守護程序。
3、開始除錯gdb -q -p 4614
使用strace(系統呼叫)/pstack(內部函式)除錯
1、strace -p 4033
2、wget 127.0.0.1 函式
其他除錯
system tap/
nginx的安裝與配置
1 nginx 4 nginx的安裝 linux centos7 2 安裝相關依賴和庫檔案 yum y install gcc gcc c autoconf automake gcc gcc c 的庫檔案 yum y install pcre pcre devel 安裝nginx依賴包 yum y ...
Nginx 的安裝與配置
linux centos 7.3 64位 nginx nginx 1.13.1 安裝目錄 usr local 3 openssl 若需要支援 https 協議 yum y install openssl yum y install openssl devel 1 解壓安裝包 tar z xv f n...
nginx安裝與配置
1 安裝前,需要安裝的軟體包 yum y install gcc gcc c autoconf automake yum y install zlib zlib devel openssl openssl devel pcre pcre devel 2 安裝nginx 3 啟動與停止nginx 啟動...