最近OurJS後臺已經從純node.js遷移到了Nginx+NodeJS上來了,感受性能提高了很多,特與你們分享。javascript
Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。css
儘管Node.JS的性能不錯,但處理靜態事務確實不是他的專長,如:gzip編碼,靜態文件,HTTP緩存,SSL處理,負載平衡和反向代理及多站點代理等,均可以經過nginx來完成,從而減少node.js的負載,並經過nginx強大的緩存來節省您網站的流量從而提升網站的加載速度。html
雖然node.js也有一些如http-proxy的代理模塊能夠實現一臺服務器上面架設多個網站(每一個域名映射到不一樣nodejs進程的端口),但這種基礎性的工做,其實更應該交給ngnix來完成。java
下面咱們能夠看一個多站點代理的例子, 假設你有一個node.js進程正在偵聽8080端口,你但願從domaina.com的進入的鏈接由node.js提供服務,從domainb.com進入的鏈接映射到另外一個靜態文件服務的網站,你可使用下面的ngix.confg(for 1.44),配置比較簡單,通常寫程序的人應該都能看懂,進行以後你輸入http://192.168.0.101, http://localhost會看到不一樣的結果.node
#user nobody;
worker_processes 2;
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css application/xml;
upstream node_app {
server 127.0.0.1:8080;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://node_app;
}
}
# static server
server {
listen 80;
server_name 192.168.0.101;
location / {
root D:\GitHub\areu\web;
index home.html;
}
}
}
這裏有一篇更加複雜的示例,因爲版本相對陳舊,僅供參考 Using Nginx To Avoid NodeJS Load nginx
簡單說明一下,各個部分的做用web
指明你網站運行的端口,由於支持http/https因此有兩個端口:json
http {
...
upstream silly_face_society_upstream {
server 127.0.0.1:61337;
server 127.0.0.1:61338;
keepalive 64;
}
...
}
靜態文件攔截器,將以images/js/img/css...開頭的地址映射到網站目錄,由ngnix直接提供服務:windows
http {
...
server {
...
location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) {
root /usr/local/silly_face_society/node/public;
access_log off;
expires max;
}
...
}
}
設置緩存緩存
http {
...
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m;
proxy_temp_path /var/tmp;
...
}
設置Gzip壓縮
http {
...
gzip on;
gzip_comp_level 6;
gzip_vary on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;
...
}
最後將非靜態文件交給nodejs進程去響應:
http {
...
server {
...
location / {
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
...
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_pass http://silly_face_society_upstream;
}
...
}
}
安裝nginx,使用apt-get 便可
apt-get install nginx
測試nginx配置文件
nginx -t -c /etc/nginx/nginx.conf
重啓nginx服務器
/etc/init.d/nginx restart
設置某腳本開機啓動
sudo chmod 755 /etc/init.d/foobar sudo update-rc.d foobar defaults #開機時啓動 sudo update-rc.d -f foobar remove #開機時不啓動
find / -name 'node' #在根目錄 '/' 查找 node的位置(某些場合會用到)
taskkill /F /IM nginx.exe > nul