Nginx簡介
1.1概述
-
Nginx是一個高性能的HTTP和反向代理服務器。
-
是一款輕量級的高性能的web服務器/反向代理服務器/電子郵件(IMAP/POP3)代理服務器
-
單臺物理服務器可支持30 000~50 000個并發請求。
1.2Nginx和Apache的優缺點
(1)nginx相對于apache的優點∶
輕量級,同樣起web服務,比apache占用更少的內存及資源
抗并發,nginx處理請求是異步非阻塞的,而apache是阻塞型的在高并發下,nginx能保持低資源低消耗高性能
高度模塊化的設計,編寫模塊相對簡
(2)apache相對于nginx的優點∶
Rewrite比nginx的rewrite強大 (rewrite的主要功能就是實現統一資源定位符URL的跳轉)
模塊多,基本想到的都可以找到
少bug, nginx的bug相對較多
超穩定
存在的理由:一般來說,需要性能的web服務,用nginx。若不需要性能只求穩定,就選用apache
1.3Nginx作為web服務器與Apache比較
相比apache,nginx使用更少的資源,支持更多的并發連接,體現更高的效率。
Nginx作為負載均衡服務器:nginx既可以在內部直接支持rails和php程序對外進行服務,也可以支持http代理服務器對外進行服務。
Nginx采用C進行編寫,不論是系統資源開銷還是CPU使用效率都比較好。
作為郵件代理服務器:最早開發這個產品的目的之一也是作為郵件代理服務器。
apache是同步多進程模型,一個連接對應一個進程,nginx是異步的,多個連接可以對應一個進程。
Nginx處理靜態文件好,耗費內存少,只適合靜態和反向。
Apache在處理動態有優勢,
nginx并發性比較好,CPU占用內存低,如果rewrite頻繁,選用apache最佳。
總的來說,apache依然是大部分公司的首選。
1.4nginx的工作原理
內核和模塊的組成
·Nginx 本身做的工作實際很少,當它接到一個 HTTP 請求時, 它僅僅是通過查找配置文件將此次請求映射到一個 location block,而此 location 中所配 置的各個指令則會啟動不同的模塊去完成工作,因此模塊可以看做 Nginx 真正的勞動工作者。 ·通常一個 location 中的指令會涉及一個 handler 模塊和多個 filter 模塊(當然,多個 location 可以復用同一個模塊)。handler 模塊負責處理請求,完成響應內容的生成,而 filter 模塊對響應內容進行處理。 用戶根據自己的需要所開發的模塊都屬于第三方模塊。正是有了這么多模塊的支撐, Nginx 的功能才會如此強大。
分為三種模塊
·核心模塊:HTTP 模塊、EVENT 模塊和 MAIL 模塊; ·基礎模塊:HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite 模塊; ·第三方模塊:HTTP Upstream Request Hash 模塊、Notice 模塊和 HTTP Access Key 模 塊。
nginx的模塊從功能
Handlers(處理器模塊) :此類模塊直接處理請求,并進行輸出內容和修改 headers 信息等操作。Handlers 處理器模塊一般只能有一個;
Filters(過濾器模塊) ::此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最后由 Nginx 輸出;
Proxies(代理類模塊) :此類模塊是 Nginx 的 HTTP Upstream 之類的模塊,這些模塊主要與后端一些服務比如 FastCGI 等進行交互,實現服務代理和負載均衡等功能。
2 Nginx的編譯安裝
2.1關閉防火墻,將安裝nginx所需軟件包傳到/data目錄下
2.2安裝軟件所需的依賴包
yum -y install pcre-devel zlib-devel openssl-devel gcc
2.3創建運行的用戶、組(Nginx 服務程序默認以 nobody 身份運行,建議為其創建專門的用戶賬號,以便更準確地控制其訪問權限)
useradd -M -s /sbin/nologin nginx
2.4編譯安裝nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \ #指定nginx的安裝路徑
--user=nginx \ #指定用戶名
--group=nginx \ #指定組名
--with-http_stub_status_module #啟用 http_stub_status_module 模塊以支持狀態統計
make && make install
3 Nginx的配置
3.1nginx的配置文件
vim /usr/local/nginx/sbin/nginx
3.2nginx服務基本應用
nginx -t 檢查配置文件是否配置正確
開啟:nginx
停止:cat /usr/local/nginx/logs/nginx.pid
kill -3 <PID號>
kill -s QUIT <PID號>
killall -3 nginx
killall -s QUIT nginx
重載:
kill -1 <PID號>
kill -s HUP <PID號>
killall -1 nginx
killall -s HUP nginx
平滑升級:
kill -USR2 <PID號>
tar -zxvf nginx-1.xx.xx.tar.gz
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
--with-http_ssl_module
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old
cp objs/nginx /usr/local/nginx/sbin/nginx
make upgrade #要保證當前 nginx 進程是通過 /usr/local/nginx/sbin/nginx 啟動的,而不是通過查找環境變量中那個 nginx 命令啟動的
或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
3.3添加nginx系統服務
vim /etc/init.d/nginx
給文件添加執行權限、添加為系統服務、啟動nginx服務
方法2:
vim /lib/systemd/system/nginx.service
添加權限并啟動服務
4 Nginx服務的主配置
4.1nginx服務的主配置文件
vim /usr/local/nginx/conf/nginx.conf
1、全局塊:全局配置,對全局生效; 2、events塊:配置影響 Nginx 服務器與用戶的網絡連接; 3、http塊:配置代理,緩存,日志定義等絕大多數功能和第三方模塊的配置; 4、server塊:配置虛擬主機的相關參數,一個 http 塊中可以有多個 server 塊; 5、location塊:用于配置匹配的 uri ; 6、upstream:配置后端服務器具體地址,負載均衡配置不可或缺的部分。
4.2nginx的全局配置
4.3I/O事件配置
如果需要提高每個進程的鏈接數還需要執行ulimit -n 65535 命令臨時修改本地的每個進程可以同時打開的最大文件數量。
永久修改本地的每個進程可以同時打開的最大文件數量/etc/security/limits.conf
可以使用ulimit -a查看系統允許當前用戶打開的文件數限制
在linux平臺上,在進行高并發tcp連接處理室,最高的并發數量都要受到系統對用戶單一進程同時可額打開的文件數量做限制(這是因為系統的每個tcp連接都要創建一個socket句柄,每個socket句柄同時也是一個文件句柄)
epoll時linux系統內核為處理大批句柄二改進的poll,是linux下多路復用IO接口select/poll的增強版本,阿能顯著的減少程序在大并發連接中只有少量的活躍的情況下的cpu系統利用率。
work_rpocesses的值和work_connections的值決定了最大并發數量,最大并發數的計算方式為:worker_processes*worker_connections。但在反向代理場景中計算方法不同,因為nginx機要維持和客戶端的連接,又要維持后后端服務器端連接,因此處理一次連接要占用兩個連接,
所以最大并發數計算方式為:worker_processes*worker_connections/2。
4.4HTTP配置
4.5日志格式設定
$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址; $remote_user:用來記錄客戶端用戶名稱; $time_local: 用來記錄訪問時間與時區; $request: 用來記錄請求的url與http協議; $status: 用來記錄請求狀態;成功是200, $body_bytes_sent :記錄發送給客戶端文件主體內容大小; $http_referer:用來記錄從哪個頁面鏈接訪問過來的; $http_user_agent:記錄客戶瀏覽器的相關信息;
通常web服務器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過$remote_add拿到的IP地址是反向代理服務器的iP地址。反向代理服務器在轉發請求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來客戶端的請求的服務器地址。
location常見配置指令:root、alias、proxy_pass root(根路徑配置):root /var/www/html 請求www.kgc.com/test/1.html,會返回文件/var/www/html/test/1.html
alias(別名配置):alias /var/www/html 請求www.kgc.com/test/1.html,會返回文件/var/www/html/1.html
proxy_pass(反向代理配置)
4.6訪問狀態統計配置
1.先使用命令/usr/local/nginx/sbin/nginx -V 查看已安裝的 Nginx 是否包含 HTTP_STUB_STATUS 模塊
--with-http_stub_status_module