前端开发用得着的nginx配置

前端的工作过程里,本地开发、提供测试环境,总得有个用着顺手的服务器软件,这个场景里nginx很流行。

介绍两个好用的配置项:rewrite  try_files  @xxxx

rewrite

比较常见,主要用于将带版本号的静态文件路径替换成本地文件路径

例如人人网发布文件路径里面包含一个a0000的版本号,通过下面这句配置就能将http://xnimg.cn/a0001/js/base.js换成http://xnimg.cn/js/base.js直接影射到本地目录结构中。

rewrite "^/a?([0-9]+)/(.*)" /$2 last;

try_files

尝试在本地的多个路径中查找需要的文件,如果依然没找到才会返回404。下面配合@xxx配置实现一个更方便的功能。

location @xxx

这样定义了一个可以供其他配置调用的“请求处理方法”(handler),结合try_files如果本地没找到自动去线上取回指定文件。


if ( $document_uri ~*"^/[ab]?([0-9]+)/(.*)"){
    set $no_version_path /$2;
}

location / {
    try_files $document_uri $no_version_path =404;
    error_page 404 = @online;
    log_not_found off;
}

location @online{
    proxy_pass http://$host:80/$request_uri
}

第一个if语句是一个匹配,把$2第二个分组值(去掉版本号的路径)保存到变量$no_version_path;

try_files的顺序:有版本号的路径、没有版本号的路径、如果404 调用@online;

@online中用$host,$request_uri这两个nginx变量拼出请求的文件路径直接代理请求到线上。

这样配置的服务器,只需要在本地存放你所关心的几个静态文件,其他不需要调试的文件全部代理到线上,省得每次花时间更新自己不关心的工程代码。

Dproxy发布一个可用版本

Dproxy是用nodejs编写的一个web调试代理。
项目托管在Github上: http://github.com/deemstone/dproxy

缘起

主要有两个原因促使我决定开发Dproxy:

1. Mac平台下没有像Fiddler一样好用的调试代理;

Fiddler在前端开发方面的作用主要有两个:比绑host更方便管理;可以提供更灵活的开发环境.

多个人协作开发的情况,这种便利就很明显了.(用代理,将不同的文件请求转发到不同的服务器上).

2. 基于一个灵活的”代理软件”,定制的开发一些扩展功能,可以用来解决工程管理方面碰到的一些问题.

比如,接口模拟器.前后端独立开发的情况下,可以使用它提供一个临时的开发环境,方便直观.

功能设计原则:

  • 专注提供一个灵活配置的代理软件;
  • 让开发环境变得简单(丢弃nginx);
  • 方便分享代理配置;
  • 提供扩展机制;
  • 跨平台,支持第三方GUI外壳;

现状:

已经是v0.2版了,之前有过一个Demo版本,0.2版是完全重写的一个新版本,各项基本功能可用(难免有些小bug).可以替代nginx做一个本地的静态服务器,没有图形界面,手动修改.rule配置文件,修改保存即时生效.还提供了一个简单的命令行控制台,具体用法可以看github项目首页的介绍.

欢迎试用,并提供您宝贵的建议.

十月30日将发布GoogleTV2.0更新

自从去年大概这个时候谷歌发布了GoogleTV,但是没有受到持续的关注(尤其是国内媒体).可能是当前提供的功能比较鸡肋,操作很不人性化,交互的设计根本没法适应客厅这个环境.

马上,GoogleTV就要升级到2.0版本啦!

谷歌一直持续给力这个产品,不断提升产品的可用性,调整产品的概念,让他真正能够摆得进客厅.

这次更新的主要变化:

运行在Android Honeycomb(3.0)系统只上,并且将来会升级到Ice Cream Sandwich(4.0).之所以没有一步到位4.0,是出于稳定性考虑,3.0系统经过这么长时间的应用,已经被充分测试了.而且功能上没有很大差别.

带来了AppMarket(电子市场),虽然目前为GTV开发的App只有20几款,但是理论上任何Android应用都可以顺利的运行在GTV上(只是难看点).

谷歌说,将会为GTV应用在Market上单独开辟一个列表.

这次升级,Google比较强调的是对搜索功能的优化,意思大概是”将搜索范围扩大到更多流媒体服务商,只要他们愿意提供自己的内容数据库”. 将来GTV上的搜索不仅仅是搜索互联网和电视频道,还能直接搜索到这些流媒体服务商提供的信息,以统一的体验享受多服务商提供的视频服务.

关于Youtube, 他们在努力改善Youtube在电视上的操作体验,使其适合在客厅里使用,所谓的10-foot-experience.

相关链接:

http://www.google.com/tv/

http://gizmodo.com/Google-TV/

http://www.googletvforum.org/forum/more-news-your-google-tv-news-team/3241-october-30th-google-tv-2-0-update.html

    Google code上一次不一样的SVN checkout体验

    gfwinterceptor

    忍了很久了,一直想抽点时间帮忙把这个软件增强一下. 最近这个项目终于被死死的墙在外面了.废了好大劲儿才弄明白怎么通过ssh使用svn签出.

    • 本来想法很简单,svn支持http代理,但是手头没有直接能用的http代理.
    • 本来还以为,设置了系统的代理,svn就能直接被代理了呢,结果不像我想的那样…

    通过SSH Tunnel使用SVN

    原理很简单,就是通过一个能正常访问google服务器的”ssh服务器”做跳板来间接的访问google code.

    ssh -L 9999:xxxx.googlecode.com:80 xxx@ssh.server.com

    解释:

    • -L  建立”本地端口映射” (把本地的一个端口映射到远程某个服务器上的另一个端口)
    • 9999  是要使用的本地端口(随便选一个,只要不跟你机器上其他服务冲突就行)
    • xxxx.googlecode.com   是最终要访问的那个服务器名或者地址
    • 80  是最终要访问的那个服务器端口
    • 后面就是正常的ssh连接的内容了

    通常这条命令需要用root权限执行(直接sudo就行了,  第一次提示输密码是sudo的密码, 第二次密码才是ssh服务器的密码)

    登录成功!  (即 端口映射成功)

    现在的网络状况: 所有发往本地9999端口的数据全都通过这个管道传送到xxxx.googlecode.com:80上去了.

    还没完

    由于googlecode的svn服务器需要域名来判断你访问的哪个库,所以直接用localhost不行.

    那就简单办法:绑个host  添加一条:   127.0.0.1   gfwinterceptor.googlecode.com  就OK了.

    参考:

    另外一个可以参考的工具:   http://www.abgba.com/article/technology/ssh-tunnel-svn_up-openwr.html

    总结常用的ssh_Tunnel软件(比较全):  http://ihipop.info/2011/07/2629.html

    SSH Port Forwarding (SSH Tunneling) : http://www.linuxhorizon.ro/ssh-tunnel.html

    Poor man’s VPN using PuTTY:  http://wiki.freaks-unidos.net/ssh-port-forwarding

    一起给力HTML5

    已经是第三次参加”给力HTML5″了,昨天到了现场才发现原来我落了一期(过去的那个月实在是太忙乱了,不堪回首…)

    这次来得大部分是新人,跟我一起来的几个同事也都是第一次参加,没有合作过(我们平常工作一个坑从来没有多过两个萝卜).

    新人比较多,再加上一般程序员都比较腼腆,这次活动的气氛不很活跃,大家都像中学生一样认真的听课,然后按照活动流程选题,做作业.

    创意

    我们组几个人都是做Web应用的,创意上很少会蹦出游戏的火花,从前几次参加的经验,我们根本没想要拿到什么结果,只是不放弃的参与,努力的做我们自己的Web应用.

    我们的创意是基于HTML5视频api做的实时评论服务,主要功能就是可以在播放的时间轴上加标记作评论.而且所有的信息都是实时更新的.这个应用可以用来跟朋友们一起在线看电影,或者在线课堂做笔记,这样的笔记能帮助我们更方便的复习(从我们记录的文字直接播放相关的那段视频).

    Coding

    我们只花了二十几分钟的时间确定了这个创意和主要功能,开始分工,一个人用Nodejs做简单的服务端程序,一个人做前端的数据接口,一个人做可以打Tag的播放器,一个人做实施更新的评论数柱状图. 分工很明确,下面开始做的就是查资料…虽然知道HTML5能做这些,但是没有真正使用过,所有的技术都是现学现卖,这也花掉了我们大部分的时间. 也弄得我们手忙脚乱.

    原定是5点开始组合联调,结果快6点了才开始共享代码,(共享代码的方式…竟然是QQ…)然后我们就悲剧了(脑袋上都挂着大汗珠),webSocket总掉线,基本上半分钟就掉,一直纠结这个问题浪费了太多时间,直到晚饭时间我们才决定去掉这个功能下次再完善. 这样,我们的产品就成了个样子货,只有单个页面,一个视频来回的播放.

    为了在演示的时候不会太尴尬,我们决定”说段相声”,首先把我们得想法完整的描述了一遍,然后看演示.演示的过程几乎是指着一堆破铜烂铁在描述我们的美好未来…

    意外的获得了大家评选的第一名作品,我想,还是因为我们的创意吸引了大家,所以我们决定回来后把这个产品完成.

    谢谢谷歌的朋友们,这奖品滋润了我们程序员的生活,太有爱了^_^.期待这下一次的Hackthon.

    关于HTML5

    另外描述一下我对HTML5的看法.本来这应该是个充满了激情和让人兴奋的名词,但是看活动现场大家对这个东西都很没有信心.我想,主要原因还是标准没有定下来,很少有人尝试,没有文档很难做开发…整体上给我们开发者的感觉是”还不能应用到产品中的技术”,所以即使有这么精彩的未来,也很难对他提起精神.

    我的想法是: 的确很困难,但是这就是我们一起创造未来的过程.希望我们都不要放弃,在未来的Web技术领域中为国内的开发者的高调做好铺垫.经鉴定,这是一件有意义的事儿.

     

    Nodejs分享资源列表

    Git

    《The Git Community Book》http://book.git-scm.com/

    《Git Community Book 中文版》http://gitbook.liuhui998.com/

    《Pro Git》http://progit.org/book/

    一个引导实验手册(中文):http://gitimmersion.googol.im

    github:http://github.com

    Nodejs

    安装:https://github.com/joyent/node/wiki/Installation

    npm: http://npmjs.org

    为什么Nodejs的并发性能高:http://cnodejs.org/blog/?p=780

    CommonJS:http://wiki.commonjs.org/wiki/CommonJS

    介绍CommonJS:http://www.grati.org/?p=165

    编写Nodejs原声扩展:https://www.cloudkick.com/blog/2010/aug/23/writing-nodejs-native-extensions/

    译文:http://www.grati.org/?p=413

    DB

    Redis http://redis.io

    MongoDB: http://www.mongodb.org/

    CouchDB:http://couchdb.apache.org/

    ECMA-262

    标准解读:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/

    官方:http://www.ecma-international.org/publications/standards/Ecma-262.htm

    实时协作的任务列表:http://thingler.com/

    实时访客统计:http://nodelytics.strx.it/stat/www.strx.it

    实时流量统计:http://projects.nuttnet.net/hummingbird/

    随时聊天:http://chattrr.net/client.htm

    VMware中直接使用物理硬盘(Windows)

    急性子的朋友直接略过前两段 看操作过程吧,呵呵

    背景:

    因为想要提高虚拟机的运行速度,除了做一些简单的优化配置,发现很多时候性能瓶颈在硬盘上。guestOS静置了一段时间之后,有些内容会写道硬盘,这时候再回来操作他,那里面的窗口肯定会拖泥带水的。

    刚刚买了一块新硬盘,想要把这guestOS直接装到物理硬盘上。

    我的环境:

    • hostOS: Windows 7 (64bit)
    • guestOS: SnowLeopard
    • VMware Workstation 7
    • 内存:4G  给虚拟机分1G就够了

    问题:

    跟这个帖子描述的一样:Windows会不时的打断VMware的操作。然后,硬盘被Win锁起来不准其他软件直接操作。这个时候就出现那个悲剧的弹窗提示了。

    原理:

    其实在WindowsXP下是不会有这个问题的。但是由于Windows7开始采用了新的安全机制,不允许用户软件直接操作已挂载的硬盘上的文件系统。(看来这套系统还是不靠谱,我都把硬盘在虚拟机里分了区装完了系统,Win才发现这盘有问题……)

    其实只要想办法让Windows不理这块硬盘就行了,也不能完全抛弃,驱动还是得装的。

    (系统方面我也是菜鸟,经过一番搜索找到这个解决办法)

    搜索结果 主要有两种解决办法: 1.让硬盘脱机状态;  2.改动硬盘参数,骗windows“这啥都没有”

    主要参考这里:http://communities.vmware.com/docs/DOC-10455

    操作过程:

    注意:仅适用于Server 2008 和 Windows7,并且是给虚拟机分配整个硬盘!!

    首先打开cmd,使用windows自带的diskpart.exe

    list disk    (查看想要装虚拟机的硬盘编号)

    select disk 编号

    offline disk

    attribute disk clear readonly

    rescan

    完成。 现在这块硬盘对Windows来说是脱机状态,但是VMware里面可以正常使用,而且电脑重启也不会有问题。

    其他:

    这里描述的是其中最简单的一种解决方法,如果这个不适用你的情况,直接去看上面提到的那篇文章吧(英文的),里面还提供了一个作者写的小工具。

    关于DiskPart微软官方文档:http://technet.microsoft.com/en-us/library/cc766465(WS.10).aspx

    Nodejs中的模块(Modules) – v0.4版

    总结Nodejs中模块的引用,和一些技巧。 Node 0.4版本之后官方文档有些变化,搜寻模块的顺序跟以前可能不太一样。

    永远不变的是这一句:Node uses the CommonJS module system.

    Node里面模块有三种:核心模块(内建二进制的)、js文件、文件夹(一组文件)

    文件型模块:一般用.js/.node扩展名保存,js是纯文本的js文件,.node是编译的二进制addon模块。
    引用模块的时候,Node首先按照指定的名字查找,如果没有找到就自动添加这两个扩展继续搜寻

    文件夹型模块:目录中的package.json指明这个组的主程序。如果没有这个文件,Node会加载里面的index.js/index.node(如果有的话)

    引用方法两种:

    require(‘模块名字’);

    require(‘./相对路径’);

    Node搜寻模块的几个位置(可以把自定义模块放到这里):

    如果require的不是“路径”(包括绝对和相对路径)
    Node会沿着目录的路径向上查找名为node_modules的文件夹 :

    官方文档里的例子:在’/home/ry/projects/foo.js’中引用require(‘bar.js’)搜寻的顺序

    • /home/ry/projects/node_modules/bar.js
    • /home/ry/node_modules/bar.js
    • /home/node_modules/bar.js
    • /node_modules/bar.js

    关于多层嵌套引用的搜寻顺序在官方文档里Optimizations to the `node_modules` Lookup Process部分有说明。

    可以用require.resolve()查看具体引用的哪个文件

    注:如果引用的模块名字与内建的模块重名,Node默认直接返回内建的模块(比如 http)。所以,与内建的模块重名的模块只能用相对路径引用。

    待整理……

    Mac上的Unix开发工具

    Mac系统华丽的界面把Unix包装的太深了,但是Unix有的东西Mac里面还原汁原味的保留着呢。

    Mac的命令行支持所有标准的Unix命令,但是其他一些Unix&Linux中常用的工具&包管理器,Mac里面可能没有自带,这里总结一些这样的Mac工具。

    Mac中已经自带了Python、Ruby、Perl,这些方便我们安装更多好用的工具。

    一、软件包管理

    1.Homebrew:http://mxcl.github.com/homebrew/

    新概念的包管理器。所有包都从源码编译安装。

    类似于一套ruby脚本库,帮你自动化的“下载-编译-安装” (wget-tar-configure-make-make install)

    2.MacPorts:http://www.macports.org

    3.Fink:http://www.finkproject.org

    二、编程开发

    1.Xcode:Unix开发工具

    三、

    不断积累更新……

    中国的互联网翻不了身,悲哀

    一定要注释一句:
    几个月前的牢骚,一直没整理好,看来都是怨念,
    怨念就怨念吧,
    乱七八糟的发了就发了,
    只当我发牢骚了……
    看不懂最好

    未来的五到十年,中国的互联网也还只能是抄袭国外。国内的政策限制了各种创新,即使有创意,也只是空想:“巧妇难为无米之炊”。

    本文中讲述的内容都不是最前卫的新闻,只是突然意识到未来无望,感觉到沮丧……

    正文

    一流企业定标准;二流企业做设计;三流企业“脚踏实地”的搞生产。

    利润的大头儿都被前两位给赚足了!……

    微软的时代已经过去了,Apple顺理成章的超过微软。如果听到那则新闻的时候显露出一点惊讶,那你肯定是落伍了!

    现在的互联网面临着两大革新:

    • 云计算和无处不在的无线互联
    • 全新的人机界面,美妙的用户体验

    稍微了解一点的人提到云计算,可能会想到“集群”、“网格计算”这一类的专业名词。但是有多少人知道云计算讲给我们的信息生活带来怎样的改变。

    就像几个世纪前欧洲的工业革命一样,云计算将会改变人们使用信息设备的方式。从蒸汽机到电动机,我们现在所经历的是把自己从电脑桌旁解放出来,你的超级计算机会通过无处不在的网络跟随你到任何地方。真的就像游戏世界里面召唤自己的坐骑一样。

    他有多强大:要多强大有多强大,你甚至可以使用全世界的计算机的处理能力,不再需要移动硬盘(还要小心轻放,还要升级大容量),比任何现有的硬盘都大(因为在机房里,那是成千上万的硬盘组合在一起)。

    这样的美梦天天都做,但是今天我突然醒了:在我还能满怀激情的闯荡互联网江湖的这10年里,看不到任何希望。

    曾经一直在想“我所想到的东西都已经被人做出来了,郁闷我自己活在一个太发达的时代,没有给自己发挥的空间……我只要等着他们越来越成熟,逐渐能走进我的生活,只要等着iPad越来越便宜 或者山寨的AdroidPad越来越精致、移动的G3无处不在 网速飞快……”,你可能也这样想过。

    但是现在我意识到,这方面我们可以做的还很多,因为我们需要把理想变做现实!(至少在中国,这些还都是空白)

    云计算的基础,基础的基础是稳定畅通的网络,让我们能随时随地连接到自己的那片云。但是目前在国内……5年之内能用上便宜的无线网络吗?(要求不高,以北京现在有线宽带的价格和服务质量就感谢党了)

    没有这样的网络环境,也没有政策引导(中国政府还没那么前卫),面对这么垃圾的网络质量,哪还有什么欲望去挖掘网络应用,还有谁愿意把自己的文件保存到心理距离千里之外的服务器上……没有需求、没有投资,有几个偏执狂能在这方面坚持到条件成熟(像不被人理解的科学家一样,守着自己的一堆堆代码守10年……)

    真到“条件成熟”,中国还只能是“与国际接轨”“引进国外先进技术”……

    中国人的品位(大部分)还停留在“完成基本功能”的水平上。不是没文化、天生的土,是因为压根儿就没敢想。

    Android打败iOS是不可能的,没有谁打败谁,根本都不是一个市场的……

     
    Powered by Wordpress. Design by Bingo - The Web Design Experts.