最近老是有朋友問我nginx方面的問題,其實我nginx在如今的公司就是作作安裝,建立虛擬主機,作作優化,有時候對於朋友問個人問題,我也無能爲力,感受本身超沒面子,沒辦法只能本身惡補惡補下nginx的理論知識了,像我這樣的人理論真心的不好啊,面試很吃虧啊,哈哈哈哈,因此我決定之後好好看看平時用到的東西的理論知識。php
下面就給你們,說說我對nginx理解,多多給於意見,謝謝:html
nginx 特性:node
1. nginx是模塊化設計的,有較好的擴展性;nginx
2. 高可靠性web
master/worker 的設計模式面試
加載並分析配置文件是由master來實現的正則表達式
worker是nginx響應客戶請求的apache
在nginx中master進程只能有一個,可是worker進程能夠根據cpu來調整設計模式
3. 支持熱部署瀏覽器
不停機(不中止服務)更新配置文件,更換日誌文件,更新服務器程序版本,在服務不停機的狀況下將老版本更新成新版本是徹底沒有問題的能夠稱之爲平滑升級;
4. 低內存消耗
例如:10000個keep-alive的鏈接模式下的非活動鏈接,僅消耗2.5M內存
5. 支持event-driven,aio,mmap等較新型的IO技術
nginx的基本功能:
1. 首先你們要知道,nginx是一個靜態資源的web服務器,它自身只能接受http請求並返回;
2. 能夠作http協議的反向代理服務;
3. 同時nginx仍是pop3,smtp,imap4等郵件服務的反向代理,這個不多用到,反正我是沒有用到過
4. 能緩存打開的文件(僅限於元數據)、支持FastCHI(和php-fpm交互)等協議
5. 模塊化(非DSO機制的),過濾器zip,ssi,ssl;
web服務相關的功能:
1. 虛擬主機(server),作過apache的人知道,apache有一個虛擬主機的功能,能夠根據不一樣的端口,主機名,域名來實現,一樣nginx也有這個功能
2. keepalive,長連接,多數和keepalive軟件相結合來實現的,多用於負載均衡
5. 路徑別名,能夠在配置文件來使用alias來設置路徑訪問別名
6. 基於IP及用戶的訪控制
7. 支持速率限制及併發數控制等等,在優化的時候會修改這兩項配置
還有許多,就不在這裏一一介紹了
...
nginx 的基本架構:
1. master/worker模型
一個master進程,可生成一個或者多個worker進程;
經過nginx事件驅動來響應用戶請求,例如:epoll,/dev/poll
消息通知功能:select,poll
支持sendfile,sendfile64
支持AIO,mmap
master:加載配置文件,管理worker進程、平滑升級
worker:http服務,http代理
模塊類型:
1. 核心模塊:core,module 標準的
2. Standard HTTP modules 標準的
3. Optional HTTP modules 可選的,編譯的時候可選擇加不加入編譯
4. Mail modules 可選的,編譯的時候可選擇加不加入編譯
5. 3rd party modules 可選的,編譯的時候可選擇加不加入編譯
用來作什麼?
1. 靜態資源服務器
通常結合apache來使用,由於nginx只能處理靜態資源,配合apache的話,動態訪問apache靜態訪問nginx,更加有效的提升了訪問速度;
2. HTTP服務器的反向代理
下面來簡單說下源碼安裝nginx吧
nginx 安裝配置
1. nginx在redhat是沒有被收錄進官方的發行版本的,因此要epl源來安裝,前提是能鏈接互聯網,直接在nginx.org官網中就有epl的yum倉庫源
2. nginx有三種版本
nginx stable 穩定版本
穩定版本是nginx官方不斷的修改bug的版本
nginx mainline 主線版本 不建議在生產上使用
主線版本是nginx官方不斷在添加新功能,知道肯定穩定好纔會發行的
次版本號爲偶數的, 多爲傳統版本
3. 編譯安裝nginx
1). yum -y groupinstall "Development Tools" "Server Platform Development"
2). nginx源碼包安裝通常依賴於如下幾個組件(必須保證這三個報的開發包是安裝好的)
PCRE library 主要是在url從新的時候支持poll擴展字符設定的
zlib library 傳輸壓縮的
openssl
yum -y install openssl-devel pcre-devel zlib-devel
3). 源碼包解壓出來後文件介紹
*重點
*core 核心模塊
*event 事件驅動模塊
*http web服務模塊
mail 郵件模塊
misc 不變規則的雜項
os 系統自己相關的專用代碼
4) ./configure --help 查詢幫助
必定要使用普通用戶來運維worker進程
./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-debug
--conf-path=/etc/nginx/nginx.conf 指明配置文件
--user=nginx 指明用戶
--group=nginx 用戶所在組
--error-log-path=/var/log/nginx/error.log 錯誤日誌
--http-log=/var/log/nginx/access.log 訪問日誌
--pid-path=/var/run/nginx/nginx.pid pid文件
--lock-path=/var/lock/nginx.lock lock文件
--with-http_ssl_module 默認沒有啓用,須要起來
--with-http_stub_status_module 啓動狀態頁面
--with-http_gzip_static_module 支持gzip壓縮
--with-debug 有必要的話,啓用debug
編譯完成後必定要確認epoll這個模塊是被編譯進去的,默認就在編譯列表中的,要是沒有編譯成功爲有大問題
5) .make && make install
4. 啓動nginx服務
1). /usr/local/nginx/sbin/nginx -t 測試語法
2). /usr/local/nginx/sbin/nginx 啓動nginx服務
3). /usr/local/nginx/sbin/nginx -s stop 平滑關閉服務
下面來簡單說下nginx配置文件吧
nginx.conf配置文件參數介紹:
main配置段:
1. worker_connections #;
每一個worker進程所可以響應的對打的併發請求數量;
worker_processes * worker_connections
請求的最大數
2. use [epoll|rgisg|select|poll]
定義使用的事件模型,建議讓nginx自動選擇
3. accept_mutex [on|off]
各worker接受用戶的請求的負載均衡鎖;啓用時,表示用於讓多個worker輪流序列化的響應新請求
4. lock_file /PATH/TO/LOCK_FILE;
event{
...
}
http{
...
1. server{}
定義一個虛擬主機
---基於端口,ss -tnl ---
server{
listen POST;
server_name www.b.com;
root /PATH/TO/DOCUMENTROOT
}
---基於主機名,ss -tnl ---
server{
listen POST;
server_name www.a.com;
root /PATH/TO/DOCUMENTROOT
}
2. listen指令
listen address:[post]
listen post
default_server: 默認虛擬主機,如果沒有定義的話,就選擇第一個虛擬主機來做爲默認的虛擬主機
ssl:用於限制只能經過ssl鏈接提供服務
http2: http version 2;
3. server_name NAME[....];
server_name能夠跟一個或者多個,還可使用通配符和正則表達式,可是二者要分開使用
(1). 首先作精確匹配 :www.lanyulei.com;
(2). 左側通配符 *.lanyulei.com;
(3). 右側統配符 www.lanyulei.*
(4). 正則表達式 !\^\$
(5). default_server
4. tcp_nodelay on|off;
在keepalive模式下的鏈接是否使用TCP_NODELAY;推薦不使用
5. tcp_nopush on|off
6. alias
定義路徑別名的,只能用於location中
7. index
index file...;
8. error_page code .. url;
根據http的狀態碼重定向錯誤頁面
error_page 404 404.html
9. try_file ... ... ... ...;
設置多個主頁
客戶端請求相關的配置
10. keepalive_timeout 默認是75秒
設定keepalive鏈接的超時時長;0表示禁止長鏈接
11. keepalive_requests number;
在keepalive鏈接上所容許請求的最大資源數量:默認是100個
12. keepalive_disable
指明禁止何種瀏覽器使用keepalive功能
13. send_timeout 默認是60秒
當服務器發送給客戶端請求的資源的時候客戶端沒有任何響應,就在設置的超時時間
}