IO模型 php
阻塞html
非阻塞node
IO複用(select,poll) linux
信號驅動的IO (前半段異步 epoll,kqueue,/dev/poll) nginx
AIOc++
nginx特性:支持epoll , 文件的aio,內存映射 mmapweb
master/worker 模型 master加載分享配置文件,啓動worker.支持平滑升級 worker響應用戶請求正則表達式
nginx安裝能夠採用編譯安裝 如今地址參考官網 http://nginx.org/en/download.html算法
必要的編譯環境 yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel瀏覽器
進入下載的安裝包的解壓文件
[root@pomme nginx-1.10.3]# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid \\能夠根據 --help查看需求
--prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_gzip_static_module --without-mail_pop3_module --without-mail_imap_module --without-mail_smtp_module --without-http_uwsgi_module --without-http_scgi_module
--with-http_stub_status_module (監控模塊)
[root@pomme nginx-1.10.3]# echo $?
0
安裝 make && make install
配置文件在 --conf-path路徑下
主要組成:
主配置文件:nginx.conf
include conf.d/*.conf 擴展的獨立的配置加載文件位置
\\
http {
include mime.types; \\
/etc/nginx/conf.d/*.conf
fastcgi的配置文件 fastcgi.conf uwsgi_params
配置指令:(必須分號結尾)
Directive value1 [value2...];
支持使用變量
內置變量 由模塊引入:
自定義變量
set variable value;
引用變量 $variable
配置文件組織結構
main block \\全局模塊 根目錄
event { \\events模塊中包含nginx中全部處理鏈接的設置
worker_connections 1024; \\單個worker進程的最大併發鏈接數
.... \\獨立與http和mail的 獨立模塊
use epoll; \\設置用於複用客戶端線程的輪詢方法
}
http {
和http訪問的必須在內
}
http 配置段:
http{
....
upstream{ \\負載均衡模塊
}
server{ \\虛擬主機模塊
....
server_name \\虛擬主機主機名
root \\根文檔路徑
alias \\路徑別名
location /usr/ {
} \\指明多個特定的 url 訪問映射何處 能夠多個
}
server{
...
}
}
main 配置段
類別
一. 正常運行必備的配置;
二. 優化性能相關的配置;
三. 用於調試以及定位問題的配置;
一 1. user #user nobody; 指定用於運行work進程的用戶和用戶組
2. pid #pid logs/nginx.pid; 指定進程的pid路徑
3. worker_rlimit_nofile #; 指定一個worker進程可以打開的最大文件描述符數
4. worker_rlimit_sigpending # 指定每一個用戶所能發往worker進程的最大信號數
二 1.worker_processes #; worker進程的個數一般爲物理cpu個數 ~ n-2
能夠定義爲 auto 實現自動設定 =cpu個數
2.worker_cpu_affinity CPUMASK ...; 指明CPU掩碼綁定
CPUMASK: 0001 0010 0100 1000
worker_cpu attinity 0000001 00000010 00000100;
3.worker_priority nice; [-20,19] 設置優先級
查看ps axo comm,nice 默認是0
三 1.daemon [off|on] 是否以守護進程方式啓動nginx
2.master_process on|off ; 是否以master/worker模型運行nginx;
3.error_log /PATH/ERROR_LOG level; 錯誤日誌文件及其級別 ;用於調試設置debug;但debug僅在編譯時候使用了「--with-debug」纔有效
event經常使用配置 參考官方wiki文檔
1.worker_connections #; 每一個worker進程所能響應的最大數量 worker_process * worker_connections
2.use [epoll|rgsig|select|poll]; 定義使用的事件模型 默認自動選擇
3.accept_mutex[on|off]; 個worker接收用戶請求的負載均衡鎖的內部機制;啓用時 表示讓多個worker輪流的序列化的響應請求
4.lock_file 鎖文件
經常使用配置以下
http配置段
socket或主機相關的指令
1.server {} 定義 server虛擬主機
server{
listen PORT;
server_name NAME;
root /PATH/...;
}
注意: (1)基於port; listen指令監聽不一樣的端口;
(2)基於hostname server_name 指令指向不一樣的主機名
2.listen
listen address
[:port
] [default_server
] [ssl
] [http2
| spdy
]
listen port
[default_server
] [ssl
] [http2
| spdy
]
default_server: 設置默認虛擬主機;用於基於ip地址,或使用了任意不能對應任意一個server的name是返回站點;
默認第一個 或者
server {
listen 80 default;
ssl;用於限制只能經過SSL連接提供服務;既HTTPS
spdy:SPDY protocl (speedy),在編譯時用了spdy模塊的狀況下,用於支持spdy協議
http2: http version 2
3.server_name NAME[....]; 後可跟一個或多個主機名,名稱還可使用通配符和正則表達式;
(1)先檢查精確匹配 www.aa.com
(2)左側通配符 *.aa.com
(3)右側通配符 www.aa.*
(4)正則表達式 -^.*\aa\.com$
(5)default_server
4.tcp_nodelay on|off; 控制tcp的報文控制 默認off 對keepalive模式下的鏈接是否使用TCP_NODELAY選項
5.tcp_nopush on|off; 是否啓用TCP_NOPUSH(FREEBSE)或TCP_CORK(linux);僅在sendfile爲on時有用
6.sendfile on|off ;是否啓用sendfile功能 ; 直接在內核空間封裝文件
和路徑相關的
7.root 指明根文檔路徑 設置web資源的路徑映射; 能夠在location 和server中 用於指明請求的URL所對應的URL對應的文檔
8.location 功能:容許根據用戶請求的url匹配定義的location,即爲專用配置的url提供特定配置
location [
=
| ~
| ~*
| ^~
] uri
{ ... }location
@
name
{ ... }
=:URL的精確匹配;
~:作正則表達式匹配,區分字符大小寫;
-*:作正則表達式匹配,不區分大小寫;
^-:URL的左邊部分匹配,不區分大小寫;
匹配優先級:精確匹配= > ^->~或-* > 不帶符號的URL 默認;
9.alise
只能用於location配置段,定義別名
location /images/{
root /data/imgs/;
}
location /images/{
alias /data/imgs/;
}
root指令 :路徑爲對應的location的‘/’這個URL;
images/1.jpg ---->/data/imgs/images/1.jpg
alias指令:路徑爲對應的location的'/url'這個URL;
images/1.jpg ---->/data/imgs/1.jpg
10.error_page cod ...[=[response]] url; 根據http的狀態嗎重定向錯誤頁面
error_page 404 =200 /404.html 以指定的狀態碼響應
11.try_files file ... url;
try_files file ...=code; 嘗試查找第一個至N-1個文件,第一個即爲返回給請求者的資源;若1 至 N-1都不存在,必須不能匹配至當前location 必須由其餘location定義的跳轉 不然死循環!!!
客戶端請求相關的配置:
12.keepalive_timeout timout [header_timeout]; 設定keepalive連接的超時時常,默認 75秒 0表示禁止;
13.keepalive_requests number; 在keepalive鏈接上所容許請求的最大資源數量 默認100;
14.keepalive_disable none |browser... 禁止爲某種瀏覽器使用keepalive功能
15.send_timeout #; 發送響應報文的超時時間,默認爲60S
16.client_body_buffer_size size ; 服務端接收客戶端請求報文body的緩衝區大小 默認16K;超出此指定大小時。將移存到磁盤上
client_body_temp_path path [level1[level2|[level3]]] 設定用於存儲客戶端請求body的臨時存儲路徑及數量 level1表示1級 $2 2級別
client_body_temp_path /var/tmp/client_body 2 2; 一級目錄2個字符表示 二級也用2個字符表示。 256個1級子目錄 256*256個2級
對客戶端請求的限制
17. limit_excpet METHOD {...} 對指定範圍以外的其餘方法進行訪問控制;
18.limit_rate speed 限制客戶端每分鐘鎖傳輸的字節數 默認爲0
文件操做優化的相關配置
19 aio on|off; 是否啓用異步io模式
20 directio on|off; 是否啓用直接io操做
21 open_file_cache ;對打開的文件執行緩存
open_file_cache off;
open_file_cache max=N [inactive=time]; 能夠緩存三種信息
(1)文件的描述符、文件的大小和最近一次的修改時間;
(2)打開的目錄結構;
(3)沒有找到的或者沒有權限的操做的文件的相關信息
max=N 表示可緩存的最大條目上限; 一旦達到上限,則會使用LRU算法從緩存中刪除最近最少使用的緩存項
inactive=time ; 在此處指定的時常內沒有被訪問過的緩存項爲活動緩存項,所以直接刪除
22.open_file_cache_errors on |off; 是否緩存找不到路徑的文件,或沒有權限沒有權限訪問的文件先關信息
23.open_file_cache_valid time; 每一個多久檢查一次緩存中的緩存項的有效期 默認60S
24.open_file_cache_min_uses number; 緩存項在非活動期限內最少應該被訪問的次數;
ngx_http_access_module 模塊的配置 基於IP
ngx_http_auth_basic_module 模塊的配置 basic認證
ngx_http_log_module模塊的配置 日誌訪問
訪問日誌文件路徑,格式名稱以及緩存大小和刷寫時間間隔;建議定義緩衝提高性能,可能會致使崩潰性日誌丟失
ngx_http_stub_status_module模塊配置
ngx_http_referer_module模塊配置(基於請求報文中的referer首部的值作訪問控制 防盜鏈)
nginx 讀取php 須要插件支持
php-cgi
location ~ .*\.php$
{
fastcgi_pass unix:/dev/shm/php-cgi.sock; fastcgi_index index.php; include fcgi-host.conf; fastcgi_param DOCUMENT_ROOT /home/wwwroot/xym/web ; fastcgi_param SCRIPT_FILENAME /home/wwwroot/xym/web$fastcgi_script_name; }