Stable version,這個表示穩(wěn)定版本,2016-03-22 最新版本是:nginx-1.8.1,這是一個 tar.gz 的文件鏈接。
- 傳統(tǒng)上基于進程或線程模型架構(gòu)的 Web 服務(wù)通過每進程或每線程處理并發(fā)連接請求,這勢必會在網(wǎng)絡(luò)和 I/O 操作時產(chǎn)生阻塞,其另一個必然結(jié)果則是對內(nèi)存或 CPU 的利用率低下。生成一個新的進程/線程需要事先備好其運行時環(huán)境,這包括為其分配堆內(nèi)存和棧內(nèi)存,以及為其創(chuàng)建新的執(zhí)行上下文等。這些操作都需要占用 CPU,而且過多的進程/線程還會帶來線程抖動或頻繁的上下文切換,系統(tǒng)性能也會由此進一步下降。
- 在設(shè)計的最初階段,Nginx 的主要著眼點就是其高性能以及對物理計算資源的高密度利用,因此其采用了不同的架構(gòu)模型。受啟發(fā)于多種操作系統(tǒng)設(shè)計中基于“事件”的高級處理機制,nginx采用了模塊化、事件驅(qū)動、異步、單線程及非阻塞的架構(gòu),并大量采用了多路復(fù)用及事件通知機制。在 Nginx 中,連接請求由為數(shù)不多的幾個僅包含一個線程的進程 Worker 以高效的回環(huán)(run-loop)機制進行處理,而每個 Worker 可以并行處理數(shù)千個的并發(fā)連接及請求。
- 如果負載以 CPU 密集型應(yīng)用為主,如 SSL 或壓縮應(yīng)用,則 Worker 數(shù)應(yīng)與 CPU 數(shù)相同;如果負載以 IO 密集型為主,如響應(yīng)大量內(nèi)容給客戶端,則 Worker 數(shù)應(yīng)該為 CPU 個數(shù)的 1.5 或 2 倍。
- Nginx會按需同時運行多個進程:一個主進程(Master)和幾個工作進程(Worker),配置了緩存時還會有緩存加載器進程(Cache Loader)和緩存管理器進程(Cache Manager)等。所有進程均是僅含有一個線程,并主要通過“共享內(nèi)存”的機制實現(xiàn)進程間通信。主進程以root用戶身份運行,而 Worker、Cache Loader 和 Cache manager 均應(yīng)以非特權(quán)用戶身份運行。
- 主進程主要完成如下工作:
- 1.讀取并驗正配置信息;
- 2.創(chuàng)建、綁定及關(guān)閉套接字;
- 3.啟動、終止及維護worker進程的個數(shù);
- 4.無須中止服務(wù)而重新配置工作特性;
- 5.控制非中斷式程序升級,啟用新的二進制程序并在需要時回滾至老版本;
- 6.重新打開日志文件,實現(xiàn)日志滾動;
- 7.編譯嵌入式perl腳本;
- Worker 進程主要完成的任務(wù)包括:
- 1.接收、傳入并處理來自客戶端的連接;
- 2.提供反向代理及過濾功能;
- 3.nginx任何能完成的其它任務(wù);
- Cache Loader 進程主要完成的任務(wù)包括:
- 1.檢查緩存存儲中的緩存對象;
- 2.使用緩存元數(shù)據(jù)建立內(nèi)存數(shù)據(jù)庫;
- Cache Manager 進程的主要任務(wù):
- 1.緩存的失效及過期檢驗;
開始安裝:
yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-develmkdir -p /usr/local/nginx /var/log/nginx /var/temp/nginx`wget http://nginx.org/download/nginx-1.8.1.tar.gztar zxvf nginx-1.8.1.tar.gzcd nginx-1.8.1/編譯配置:
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/local/nginx/nginx.pid \
--lock-path=/var/lock/nginx/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi
makemake install啟動 Nginx
先檢查是否在 /usr/local 目錄下生成了 Nginx 等相關(guān)文件:cd /usr/local/nginx;ll,正常的效果應(yīng)該是顯示這樣的:
drwxr-xr-x. 2 root root 4096 3月 22 16:21 conf
drwxr-xr-x. 2 root root 4096 3月 22 16:21 html
drwxr-xr-x. 2 root root 4096 3月 22 16:21 sbin
rm -rf /opt/setups/nginx-1.8.1service iptables stop
sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPTsudo service iptables savesudo service iptables restart/usr/local/nginx/sbin/nginx,啟動完成 shell 是不會有輸出的ps aux | grep nginx,正常是顯示 3 個結(jié)果出來 netstat -ntulp | grep 80 192.168.1.114,如果能看到:Welcome to nginx!,即可表示安裝成功/usr/local/nginx/sbin/nginx -t/usr/local/nginx/sbin/nginx -s reload/usr/local/nginx/sbin/nginx -s stopworker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
service iptables stop,防止出現(xiàn)特別干擾vim /usr/local/nginx/conf/nginx.confworker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 一個 server 代表一個虛擬主機
server {
listen 80;
server_name localhost;
location / {
# 虛擬機根目錄是 /usr/local/nginx/html 目錄
root html;
# 虛擬機首頁是 /usr/local/nginx/html 目錄下這兩個文件
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
# 第二個虛擬機的端口是 90,服務(wù)地址還是本地
listen 90;
server_name localhost;
location / {
root html90;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 一個 server 代表一個虛擬主機
server {
listen 80;
# 兩個虛擬主機都使用 80 端口,設(shè)置不同域名
server_name code.youmeek.com;
location / {
# 虛擬機根目錄是 /usr/local/nginx/html 目錄
root html;
# 虛擬機首頁是 /usr/local/nginx/html 目錄下這兩個文件
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
# 兩個虛擬主機都使用 80 端口,設(shè)置不同域名
server_name i.youmeek.com;
location / {
root html-i;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
最精簡的環(huán)境:一臺虛擬機
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 自己定義的兩個 tomcat 請求地址和端口
# 也就是當(dāng)瀏覽器請求:tomcat.youmeek.com 的時候從下面這兩個 tomcat 中去找一個進行轉(zhuǎn)發(fā)
upstream tomcatCluster {
server 192.168.1.114:8080;
server 192.168.1.114:8081;
# 添加 weight 字段可以表示權(quán)重,值越高權(quán)重越大,默認值是 1,最大值官網(wǎng)沒說,一般如果設(shè)置也就設(shè)置 3,5,7 這樣的數(shù)
# 官網(wǎng):https://www.nginx.com/resources/admin-guide/load-balancer/#weight
# server 192.168.1.114:8080 weight=2;
# server 192.168.1.114:8081 weight=1;
}
server {
listen 80;
server_name tomcat.youmeek.com;
location / {
proxy_pass http://tomcatCluster;
index index.html index.htm;
}
}
}
在配置文件中設(shè)置自定義緩存以限制緩沖區(qū)溢出攻擊的可能性 client_body_buffer_size 1K; client_header_buffer_size 1k; client_max_body_size 1k; large_client_header_buffers 2 1k;
將timeout設(shè)低來防止DOS攻擊 所有這些聲明都可以放到主配置文件中。 client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10;