Nginx
(“engine x”)是俄羅斯的程序設計師 Igor Sysoev 所開發高性能的 Web 和 反向代理 服務器,也是一個 IMAP/POP3/SMTP 代理服務器
在高連接併發的情況下,Nginx 是 Apache 服務器不錯的替代品
Nginx
進程
Nginx 採用了高度模塊化的設計思路,並且內部的進程主要有兩類
master 進程 和 worker 進程
其中 master 進程只有一個,worker 進程可以有多個
worker 進程纔是真正 working 的進程,纔是真正處理請求的進程。worker 進程全部都是 master 進程的子進程
worker 進程是以普通用戶的身份進行運行的,這樣就可以極大增加程序的安全性
就算是萬一有一個進程被劫持,那也不會有管理員權限
nginx 的熱部署和其併發模型有着密不可分的關係
因爲 master 進程的關係,當通知 ngnix 重讀配置文件的時候,master 進程會進行語法錯誤的判斷
如果存在語法錯誤的話,返回錯誤,不進行裝載;如果配置文件沒有語法錯誤,那麼 ngnix 也不會將新的配置調整到所有 worker 中
而是,先不改變已經建立連接的 worker,等待 worker 將所有請求結束之後
將原先在舊的配置下啓動的 worker 殺死,然後使用新的配置創建新的 worker
搭建環境
yum install gcc opensll-devel zlib-devel -y
yum install -y pcre-*
PCRE 作用是讓 Nginx 支持 Rewrite 功能
ll /root/Desktop/nginx-*.tar.gz
tar zxf nginx-*.tar.gz
cd nginx-*
mkdir ~/.vim
建立一個家目錄下的隱藏目錄
cp -r contrib/vim/* ~/.vim
讓這個虛擬機的vim可以自動檢測配置文件語法是否有錯誤
ls
configure
使用 ./configure 變編譯
./configure --help
--prefix=PATH
set installation prefix
--with-file-aio
enable file AIO support
vim /root/Desktop/nginx-*/auto/cc/gcc
註釋debug
172 CFLAGS="$CFLAGS -g"
vim /root/Desktop/nginx-*/src/core/nginx.h
關閉版本顯示
防止惡意攻擊
14 #define NGINX_VER "nginx/" NGINX_VERSION
刪除 NGINX_VERSION
cd /root/Desktop/nginx-*
./configure --prefix=/usr/local/nginx --with-file-aio
編譯
make && make install
安裝
/usr/local/nginx/sbin/nginx
開啓 nginx
netstat -antlup
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4809/nginx: master
通過 netstat 可查看到 nginx 開啓後的狀態
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC)
configure arguments: --prefix=/usr/local/nginx --with-file-aio