Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行的数据密集型的实时应用,如实时聊天等等。然而对于gzip编码,静态文件,HTTP缓存,SSL处理,负载平衡和反向代理等,都可以通过nginx来完成,从而减小node.js的负载,并通过nginx强大的缓存来节省网站的流量从而提高网站的加载速度。
流程图
nginx配置如下:
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m; |
proxy_temp_path /var/tmp; |
default_type application/octet-stream; |
gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; |
ssl_certificate /some/location/sillyfacesociety.com.bundle.crt; |
ssl_certificate_key /some/location/sillyfacesociety.com.key; |
ssl_protocols SSLv3 TLSv1; |
ssl_ciphers HIGH:!aNULL:!MD5; |
upstream silly_face_society_upstream { |
server_name sillyfacesociety.com; |
return 301 $scheme://www.sillyfacesociety.com$request_uri; |
server_name www.sillyfacesociety.com; |
error_page 502 /errors/502.html; |
location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { |
root /usr/local/silly_face_society/node/public; |
alias /usr/local/silly_face_society/node/public/errors; |
proxy_set_header X-Real-IP $remote_addr; |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
proxy_set_header X-Forwarded-Proto $scheme; |
proxy_set_header Host $http_host; |
proxy_set_header X-NginX-Proxy true; |
proxy_set_header Connection ""; |
proxy_cache_key sfs$request_uri$scheme; |
proxy_pass http://silly_face_society_upstream; |
配置段说明
upstream silly_face_society_upstream { |
nginx负载均衡多个nodo.js实例。keepalive 64 指示nginx在任何时候保持最少64个HTTP/ 1.1连接到代理服务器。如果有更多的流量nginx将打开更多的连接。
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_pass http://silly_face_society_upstream; |
将符合哪些的请求发送到代理上。nginx的匹配规则可以取看看前面的文章。
nginx处理静态内容
location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt|favicon.ico) { |
root /usr/local/silly_face_society/node/public; |
设置缓存
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=one:8m max_size=3000m inactive=600m; |
proxy_temp_path /var/tmp; |
proxy_cache_key sfs$request_uri$scheme; |
缓存是通过HTTP头部来控制的。
参考:http://blog.argteam.com/coding/hardening-node-js-for-production-part-2-using-nginx-to-avoid-node-js-load/
(责任编辑:IT) |