nginx(發(fā)音同engine x)是一款由俄羅斯程序員Igor Sysoev所開(kāi)發(fā)輕量級(jí)的網(wǎng)頁(yè)服務(wù)器、反向代理服務(wù)器以及電子郵件(IMAP/POP3)代理服務(wù)器。起初是供俄國(guó)大型的門(mén)戶(hù)網(wǎng)站及搜索引擎Rambler(俄語(yǔ):Рамблер)使用。此軟件BSD-like協(xié)議下發(fā)行,可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系統(tǒng)中運(yùn)行。
nginx不單可以作為強(qiáng)大的web服務(wù)器,也可以作為一個(gè)反向代理服務(wù)器,而且nginx還可以按照調(diào)度規(guī)則實(shí)現(xiàn)動(dòng)態(tài)、靜態(tài)頁(yè)面的分離,可以按照輪詢(xún)、ip哈希、URL哈希、權(quán)重等多種方式對(duì)后端服務(wù)器做負(fù)載均衡,同時(shí)還支持后端服務(wù)器的健康檢查。
更新日志:
Nginx 1.7.7 發(fā)布了,下載地址:
改進(jìn)記錄包括:
*) Change: now nginx takes into account the "Vary" header line in a
backend response while caching.
*) Feature: the "proxy_force_ranges", "fastcgi_force_ranges",
"scgi_force_ranges", and "uwsgi_force_ranges" directives.
*) Feature: the "proxy_limit_rate", "fastcgi_limit_rate",
"scgi_limit_rate", and "uwsgi_limit_rate" directives.
*) Feature: the "Vary" parameter of the "proxy_ignore_headers",
"fastcgi_ignore_headers", "scgi_ignore_headers", and
"uwsgi_ignore_headers" directives.
*) Bugfix: the last part of a response received from a backend with
unbufferred proxy might not be sent to a client if "gzip" or "gunzip"
directives were used.
*) Bugfix: in the "proxy_cache_revalidate" directive.
Thanks to Piotr Sikora.
*) Bugfix: in error handling.
Thanks to Yichun Zhang and Daniil Bondarev.
*) Bugfix: in the "proxy_next_upstream_tries" and
"proxy_next_upstream_timeout" directives.
Thanks to Feng Gu.
*) Bugfix: nginx/Windows could not be built with MinGW-w64 gcc.
Thanks to Kouhei Sutou.
web服務(wù)器Nginx發(fā)布1.6.2。2014-09-16。上個(gè)版本2014-08-05的1.6.1 遺留穩(wěn)定版1.4.7/1.2.9/1.0.15.開(kāi)發(fā)版1.7.5 修正了一個(gè)SSL相關(guān)的安全漏洞(CVE-2014-3616),以及兩個(gè)DNS可能導(dǎo)致請(qǐng)求掛起B(yǎng)ug(1.5.8引入)。
nginx開(kāi)發(fā)團(tuán)隊(duì)還同步發(fā)布了nginx 1.7.0主線版本,新特性如下:
后端SSL證書(shū)驗(yàn)證
當(dāng)使用SSL后端時(shí),支持SNI(服務(wù)器名稱(chēng)標(biāo)識(shí)符)
Nginx頂級(jí)網(wǎng)站用量超越Apache位居第一
據(jù)W3Techs統(tǒng)計(jì)數(shù)據(jù)顯示,全球Alexa排名前100萬(wàn)的網(wǎng)站中的23.3%都在使用nginx,在排名前10萬(wàn)的網(wǎng)站中,這一數(shù)據(jù)為30.7%,而在前1000名的網(wǎng)站中,nginx的使用量超過(guò)了Apache,位居第1位。
Nginx負(fù)載均衡一些基礎(chǔ)知識(shí):
nginx 的 upstream目前支持 4 種方式的分配
1)、輪詢(xún)(默認(rèn))
每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除。
2)、weight
指定輪詢(xún)幾率,weight和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況。
2)、ip_hash
每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題。
3)、fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配。
4)、url_hash(第三方)
按訪問(wèn)的url的hash結(jié)果分配,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端為緩存服務(wù)器比較有效。
配置:
在http節(jié)點(diǎn)里添加:
#定義負(fù)載均衡設(shè)備的 Ip及設(shè)備狀態(tài)
upstream myServer {
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用負(fù)載的Server節(jié)點(diǎn)下添加
proxy_pass http://myServer;
upstream 每個(gè)設(shè)備的狀態(tài):
down 表示單前的server暫時(shí)不參與負(fù)載
weight 默認(rèn)為1.weight越大,負(fù)載的權(quán)重就越大。
max_fails :允許請(qǐng)求失敗的次數(shù)默認(rèn)為1.當(dāng)超過(guò)最大次數(shù)時(shí),返回proxy_next_upstream 模塊定義的錯(cuò)誤
fail_timeout:max_fails 次失敗后,暫停的時(shí)間。
backup: 其它所有的非backup機(jī)器down或者忙的時(shí)候,請(qǐng)求backup機(jī)器。所以這臺(tái)機(jī)器壓力會(huì)最輕。
Nginx還支持多組的負(fù)載均衡,可以配置多個(gè)upstream 來(lái)服務(wù)于不同的Server.
配置負(fù)載均衡比較簡(jiǎn)單,但是最關(guān)鍵的一個(gè)問(wèn)題是怎么實(shí)現(xiàn)多臺(tái)服務(wù)器之間session的共享
windows和Linux下配置Nginx負(fù)載的寫(xiě)法一樣,故不分開(kāi)介紹.
啟動(dòng)
綠色文件,無(wú)須安裝,直接即可啟動(dòng)。
據(jù)我所知,3種啟動(dòng)途徑,其實(shí)都類(lèi)似:
一、雙擊nginx.exe圖標(biāo),可見(jiàn)黑窗口一閃而過(guò),啟動(dòng)完畢。
二、命令行到nginx目錄,輸入nginx啟動(dòng)。(注,此方式命令行窗口無(wú)任何提示,且被鎖定)
三、命令行到nginx目錄,輸入start nginx啟動(dòng),此方式不鎖定
啟動(dòng)后,默認(rèn)情況下(無(wú)修改配置),可見(jiàn)到有兩個(gè)nginx的進(jìn)程,一個(gè)是master process,一個(gè)是worker processes。
測(cè)試
默認(rèn)nginx部署了些靜態(tài)內(nèi)容,我們可通過(guò)它測(cè)試nginx是否在工作。
默認(rèn)的配置文件(NGINX_HOME/conf/nginx.conf)如下:
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
通過(guò)觀察配置文件的非注釋項(xiàng)(參考Nginx配置文件nginx.conf中文詳解),大概可知:
1、啟動(dòng)了1個(gè)worker processes
2、worker_connections,最大并發(fā)數(shù)為1024
3、include mime.types,引入mime.types文件所聲明的文件擴(kuò)展名與文件類(lèi)型映射
4、application/octet-stream,默認(rèn)使用application/octet-stream
5、sendfile,開(kāi)啟高效文件傳輸模式
6、監(jiān)聽(tīng)本機(jī)“l(fā)ocalhost”的80端口
7、映射目錄為“當(dāng)前目錄的html目錄”
8、出現(xiàn)500、502、503、504錯(cuò)誤,則映射到50x.html
瀏覽地址http://localhost,即可訪問(wèn)其默認(rèn)頁(yè)面,即映射到NGINX_HOME/html/index.html
其他靜態(tài)內(nèi)容,如html、圖片,可自行添加測(cè)試。
日志
日志默認(rèn)位于NGINX_HOME/logs/,可見(jiàn):
1、access.log,訪問(wèn)日志
2、error.log,異常日志
3、nginx.pid,進(jìn)程(僅在啟動(dòng)nginx后才有此日志)