OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

NodeJS on Nginx: 使用nginx反向代理处理静态页面


分享到
分类 编程技巧   关键字 OurJS   发布 ourjs  1384696333000
注意 转载须保留原文链接,译文链接,作者译者等信息。  

最近OurJS后台已经从纯node.js迁移到了Nginx+NodeJS上来了,感觉性能提升了不少,特与大家分享。

node_on_ngix

Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

尽管Node.JS的性能不错,但处理静态事务确实不是他的专长,如:gzip编码,静态文件,HTTP缓存,SSL处理,负载平衡和反向代理及多站点代理等,都可以通过nginx来完成,从而减小node.js的负载,并通过nginx强大的缓存来节省您网站的流量从而提高网站的加载速度。

虽然node.js也有一些如http-proxy的代理模块可以实现一台服务器上面架设多个网站(每个域名映射到不同nodejs进程的端口),但这种基础性的工作,其实更应该交给ngnix来完成。

下面我们可以看一个多站点代理的例子, 假设你有一个node.js进程正在侦听8080端口,你希望从domaina.com的进入的连接由node.js提供服务,从domainb.com进入的连接映射到另一个静态文件服务的网站,你可以使用下面的ngix.confg(for 1.44),配置比较简单,一般写程序的人应该都能看懂,进行之后你输入http://192.168.0.101, http://localhost会看到不同的结果.

#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 

 

简单说明一下,各个部分的作用

指明你网站运行的端口,因为支持http/https所以有两个端口:

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直接提供服务:

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调试命令: Debian Linux

安装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的位置(某些场合会用到)


有时侯nginx在windows下面怎么杀也杀不死,可以使用此脚本 (Windows 2003 测试有效)

taskkill /F /IM nginx.exe > nul


更新


OurJS已经开源: https://github.com/newghost/ourjs

原文地址: 点此
社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 理想和现实之间不是一条直线
  2. 前Google员工们的吐槽:在Google打工所能遇到的最坏事
  3. 心情随笔:半夜无眠,写于自己共勉
  4. 他们为什么说面向对象有问题,探讨面向对象的一些缺陷
  5. 够用即可:简单之美(Worse Is Better)
  6. 工作:大家也可以考虑下国外[美国]
  7. 程序猿的段子:该如何优雅地黑C++? 回复:C艹
  8. 一个初次创业的互联网P民是这样被投资人拒绝的
  9. 谁说码农在吃青春饭:编程能力与编程年龄
  10. 微软宣布废除员工排名考核
  11. AirJD-简单好用的免费建站工具

 相关阅读 - 编程技巧
  1. 技术干货:Nginx 战斗准备 — 优化指南
  2. 高级JavaScript调试—— console.table()
  3. NodeJS on Nginx: 使用nginx反向代理处理静态页面
  4. 优秀工具推荐:超实用的 CSS 库,样板和框架
  5. 写给 Node.js 学徒的 7 个建议
  6. 一些达成共识的JavaScript编码风格约定
  7. 十大关系数据库SQL注入工具一览
  8. PHP开发者常犯的10个MySQL错误

 关键字 - OurJS
  1. Bootstrap vs Foundation如何选择靠谱前端框架
  2. OurJS-免费开源的博客引擎,论坛系统,网站模板和轻量级的CMS
  3. 等待已久的jQuery 3.0带来了更精简的编译
  4. NodeJS on Nginx: 使用nginx反向代理处理静态页面
  5. 拿什么守护你的Node.JS进程: Node出错崩溃了怎么办?
  6. 在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
  7. 各大邮件群发/订阅代理服务商比较
  8. WebSvr匹配首页问题
  9. 在OurJS开源博客网站中添加自定义缩略图片

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号