Blog | Phodal - A Growth Engineerhttp://www.phodal.com/blog/2015-02-27T06:33:13.003153+00:00BlogNginx WebSocket 配置2015-01-11T12:22:15+00:002015-01-11T12:26:30.004430+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/nginx-websocket-upgrade-nginx-179/在开发[http://mqtt.phodal.com/](http://mqtt.phodal.com/)使用Socket.io的时候,本地是没什么问题,但是发现到服务器上后就不行了,看了看当前版本的Nginx是支持的,网上搜索了下看到了方案。
##Nginx Websocket
在配置中添加下面的内容:
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
最后我的配置如下所示:
server {
listen 80;
server_name mqtt.phodal.com;
add_header Cache-Control "max-age=600";
location / {
etag on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_connect_timeout 10;
proxy_redirect off;
proxy_pass http://127.0.0.1:3000;
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
##Nginx 1.7.9
顺便又更新了一下NGINX,有强迫症真伤不起。
配置记录一下:
./configure --user=www --group=www --add-module=../nginx_tcp_proxy_module --add-module=../ngx_pagespeed-1.9.32.3-beta --prefix=/usr/local/nginx --with-pcre --with-http_spdy_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-ipv6 物联网相关web技术2014-08-27T12:54:14+00:002014-09-02T07:22:42.566232+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/internet-of-things-web-technology/找了一下一些常用的物联网相关的Web技术,整理如下。
##REST
REST不论是在HTTP协议中,还是在CoAP中都是常用的技术之一,虽然说不上是技术,但是常用是有的。
> REST从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的 应用通过URI来获取资源的表征。获得这些表征致使这些应用程序转变了其状态。随着不断获取资源的表征,客户端应用不断地在转变着其状态,所谓表征状态转移。
记得我在写毕业论文的时候这样写到:
> REST服务实际上是充当着网络与设备的传输介质,构建一个REST服务也就相当于 获取一个URL下的某个数据。
需要注意的是,这里最后关注的还是M2M的思想,写给机器的接口。
##CoAP
REST算是CoAP协议遵循的一个基本原则,除此之外他还是为受限制的设备而开始的协议。
> 受约束的应用协议(COAP)是一种软件协议旨在以非常简单的电子设备,使他们能够在互联网上进行交互式通信中使用。它特别针对小型低功率传感器,开关,阀门和需要被控制或监督远程,通过标准的Internet网络类似的组件。 COAP是一个应用层协议,该协议是用于在资源受限的网络连接设备,例如无线传感器网络节点使用。 COAP被设计为容易地转换为HTTP与Web简化集成,同时也能满足特殊的要求,例如多播支持,非常低的开销,和简单性。多播,低开销,以及简单性是因特网极其重要物联网(IOT)和机器对机器(M2M)设备,这往往是积重难返,有太多的内存和电源,比传统的互联网设备有。因此,效率是非常重要的。 COAP可以在支持UDP或UDP的模拟大多数设备上运行。
CoAP简化了HTTP协议,只提供了REST的四个方法。然而POST和PUT在我设计[IoT-CoAP](https://coap.phodal.com)的时候发现这两种行为是类似的,让人想起了patch方法。
##6LoWPAN
虽然还没有玩过这个东西,但是这个显然很受欢迎。
> Lowpan是IPv6 over Low-power wireless Personal Area Networks的首字母缩写,是IETF组织制定的物联网标准体系,它的物理层和MAC层采用802.15.4标准,网络层采用IPv6,并制定了专门的RPL组网路由协议,传输层采用UDP,应用层采用低开销的CoAP。简单讲,6Lowpan系统是一套完整的类似于Zigbee的网络技术,Zigbee能用的领域6Lowpan都可以使用,但是6Lowpan采用IPv6,具有许多优势,包括具有海量的地址空间,可与TCP/IP网络无缝集成,实现端到端的数据传输,并且很容易与HTTP转换,易于集成到互联网,开放的协议,无需专利费等。6Lowpan已经被ISA 100.11a、ETSI M2M、Zigbee SEP2.0等标准所采纳,很可能像TCP/IP成为互联网的事实标准那样,成为物联网领域的事实标准。Cisco、IBM、Honywell、TI、NXP等巨头以及Thingsqaure等众多初创企业都已经采用6Lowpan技术,研发相关芯片、协议栈、中间件以及应用系统,逐渐成为产业发展趋势。
有意思的是这是低功耗的网络,采用的是UDP。
##MQTT
在[IoT-CoAP](http://coap.phodal.com)的一个分支中就用到了这个协议。
> MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议。
然而有意思的是MQTT采用的是使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。似乎从某种程度上来说这个会比CoAP的观察者好一点,因为是一对多。只是结果是推送功能的话,似乎还是是设备去获取状态。。
##XMPP
与JSON同样流行的还有XML,所以XMPP也会受到JAVA程序员的大爱。。
> XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。
##UDP
就设备来说UDP会比HTTP好一点。。
> UDP协议的全称是用户数据报协议 ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
##uIP
似乎这个和CoAP的目的是类似的,然而就目前而言还是没有CoAP来得有针对性。
> uIP 协议栈去掉了完整的 TCP/IP 中不常用的功能,简化了通讯流程,但保留了网络通信必须使用的协议,设计重点放在了 IP/TCP/ICMP/UDP/ARP 这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。
每个程序员必知之SEO2014-05-15T05:36:15+00:002015-02-27T06:33:13.003153+00:00Phodal Huanghttp://www.phodal.com/blog/author/root/http://www.phodal.com/blog/every-programmer-should-know-how-seo/似乎因为受这篇文章的影响 [http://katemats.com/what-every-programmer-should-know-about-seo/](http://katemats.com/what-every-programmer-should-know-about-seo/) 于是我也觉得我应该写一个[每个程序员必知之SEO](http://www.phodal.com/blog/every-programmer-should-know-how-seo/),作为一个擅长前端兼SEO的设计师。
#搜索引擎是如何工作的
> 如果你有时间,可以读一下谷歌的框架:
[http://infolab.stanford.edu/~backrub/google.html](http://infolab.stanford.edu/~backrub/google.html)
> 这是一个老的,有些过时纸,但非常平易近人,甚至在我们中间的非白皮书的读者图标微笑什么每个程序员都应该知道的关于搜索引擎优化和他们绝对概念的解释更详细,我只提一笔带过。
##搜索时发生什么了
- 用户输入查询内容
- 查询处理以及分词技术
- 确定搜索意图及返回相关、新鲜的内容
![search-engine-arch][1]
#为什么需要SEO
这是一个有趣的问题,答案总会来源于``为网站带来更多的流量``。
##爬虫与索引
我们先看看来自谷歌的爬虫工作的一点内容
> 抓取是 Googlebot 发现新网页并更新这些网页以将网页添加到 Google 索引中的过程。
> 我们使用许多计算机来获取(或"抓取")网站上的大量网页。执行获取任务的程序叫做 Googlebot(也被称为漫游器或信息采集软件)。Googlebot 使用算法来进行抓取:计算机程序会确定要抓取的网站、抓取频率以及从每个网站中获取的网页数量。
> Google 的抓取过程是根据网页网址的列表进行的,该列表是在之前进行的抓取过程中形成的,且随着网站管理员所提供的站点地图数据不断进行扩充。Googlebot 在访问每个网站时,会检测每个网页上的链接,并将这些链接添加到它要抓取的网页列表中。新建立的网站、对现有网站所进行的更改以及无效链接都会被记录下 来,并用于更新 Google 索引。
也就是如原文所说:
> 谷歌的爬虫(又或者说蛛蛛)能够抓取你整个网站索引的所有页。
**为什么谷歌上可以搜索整个互联网的内容**?因为,他解析并存储了。而更有意思的是,他会为同样的内容建立一个索引或者说分类,按照一定的相关性,针对于某个关键词的内容。
PageRank对于一个网站来说是相当重要的,只是这个相比也比较复杂。包括其他网站链接向你的网站,以及流量,当然还有域名等等。
###什么样的网站需要SEO?
下图是我的博客的流量来源
![What Site Need SEO][2]
正常情况下除了像``腾讯``这类的``QQ空间``自我封闭的网站外都需要SEO,或者不希望泄露一些用户隐私如``Facebook``、``人人``等等
- 如果你和我的网站一样需要靠搜索带来流量
- 如果你只有很少的用户访问,却有很多的内容。
- 如果你是为一个公司、企业工作为以带来业务。
- 。。。
##SEO与编程的不同之处
SEO与编程的最大不同之处在于
###编程的核心是技术,SEO的核心是内容。
内容才是SEO最重要的组成部分,这也就是腾讯复制不了的东西。
#SEO基础知识
##确保网站是可以被索引的
一些常见的页面不能被访问的原因
<div class="posts">
- 隐藏在需要提交的表格中的链接
- 不能解析的JavaScript脚本中的链接
- Flash、Java和其他插件中的链接
- PowerPoint和PDF文件中的链接
- 指向被meta Robtots标签、rel="NoFollow"和robots.txt屏蔽的页面的链接
- 页面上有上几百个链接
- frame(框架结构)和iframe里的链接
</div>
对于现在的网站来还有下面的原因,通过来说是因为内容是动态生成的,而不是静态的
<div class="posts">
- 网站通过WebSocket的方法渲染内容
- 使用诸如Mustache之类的JS模板引擎
</div>
##什么样的网页可以被索引
<div class="posts">
- 确保页面可以在没有JavaScript下能被渲染。对于现在JavaScript语言的使用越来越多的情况下,在使用JS模板引擎的时候也应该注意这样的问题。
- 在用户禁用了JavaScript的情况下,保证所有的链接和页面是可以访问的。
- 确保爬虫可以看到所有的内容。那些用JS动态加载出来的对于爬虫来说是不友好的
- 使用描述性的锚文本的网页
- 限制的页面上的链接数量。除去一些分类网站、导航网站之类有固定流量,要不容易被认为垃圾网站。
- 确保页面能被索引。有一指向它的URL
- URL应该遵循最佳实践。如blog/how-to-driver有更好的可读性
##在正确的地方使用正确的关键词
- 把关键词放URL中
- 关键词应该是页面的标签
- 带有H1标签
- 图片文件名、ALT属性带有关键词。
- 页面文字
- 加粗文字
- Descripiton标签
</div>
#内容
对于技术博客而言,内容才是最需要考虑的因素。
可以考虑一下这篇文章,虽然其主题是以SEO为主
[用户体验与网站内容](http://www.phodal.com/blog/user-experience-writing-web-content/)
不可忽略的一些因素是内容才是最优质的部分,没有内容一切SEO都是无意义的。
##复制内容问题
一个以用户角度考虑的问题
###用户需要看到多元化的搜索结果
所以对于搜索引擎来说,复制带来的结果:
<div class="posts">
- 搜索引擎爬虫对每个网站都有设定的爬行预算,每一次爬行都只能爬行trpgr页面数
- 连向复制内容页面的链接也浪费了它们的链接权重。
- 没有一个搜索引擎详细解释他们的算法怎样选择显示页面的哪个版本。
</div>
于是上文说到的作者给了下面的这些建议:
> 避免从网上复制的内容(除非你有很多其他的内容汇总,以使它看起来不同 - 我们做头条,对我们的产品页面的新闻片段的方式) 。这当然强烈适用于在自己的网站页面以及。内容重复可以混淆搜索引擎哪些页面是权威(它也可能会导致罚款,如果你只是复制粘贴别人的内容也行) ,然后你可以有你自己的网页互相竞争排名!
> 如果你必须有重复的内容,利用相对=规范,让搜索引擎知道哪个URL是一个他们应该被视为权威。但是,如果你的页面是另一个在网络上找到一个副本?那么开始想出一些策略来增加更多的文字和信息来区分你的网页,因为这样重复的内容是决不可能得到好的排名。
——待续。
#保持更新
谷歌对于一个一直在更新的博客来说会有一个好的排名,当然只是相对的。
对于一个技术博客作者来说,一直更新的好处不仅可以让我们不断地学习更多的内容。也可以保持一个良好的习惯,而对于企业来说更是如此。如果我们每天去更新我们的博客,那么搜索引擎对于我们网站的收录也会变得越来越加频繁。那么,对于我们的排名及点击量来说也算是一个好事,当我们可以获得足够的排名靠前时,我们的PR值也在不断地提高。
更多内容可以参考:[Google Fresh Factor](http://www.seomoz.org/blog/google-fresh-factor)
#网站速度
> 谷歌曾表示在他们的算法页面加载速度问题,所以一定要确保你已经调整您的网站,都服从最佳做法,以使事情迅速
过去的一个月里,我试着提高自己的网站的速度,有一个相对好的速度,但是受限于``域名解析速度``以及``VPS``。
[网站速度分析与traceroute
](http://www.phodal.com/blog/use-traceroute-analyse-person-homepage-speed/)
[UX与网站速度优化——博客速度优化小记
](http://www.phodal.com/blog/ux-and-improve-website-load-speed/)
[Nginx ngx_pagespeed nginx前端优化模块编译](http://www.phodal.com/blog/nginx-with-ngx-pagespeed-module-improve-website-cache/)
#保持耐心
> 这是有道理的,如果你在需要的谷歌机器人抓取更新的页面,然后处理每一个页面,并更新与新内容对应的索引的时间因素。
> 而这可能是相当长一段时间,当你正在处理的内容PB级。
SEO是一个长期的过程,很少有网站可以在短期内有一个很好的位置,除非是一个热门的网站,然而在它被发现之前也会一个过程。
#链接
在某种意义上,这个是提高PR值,及网站流量的另外一个核心,除了内容以外的核心。
<div class="posts">
- 链接建设是SEO的基础部分。除非你有一个异常强大的品牌,不需要干什么就能吸引到链接。
- 链接建设永不停止。这是不间断营销网站的过程
</div>
关于链接的内容有太多,而且当前没有一个好的方法获取链接虽然在我的网站已经有了
Links to Your Site
Total links
``5,880``
>同时寻求更多的链接是更有利更相关的链接可以帮助一样多。如果你有你的内容的分销合作伙伴,或者你建立一个小工具,或其他任何人都会把链接回你的网站在网络上 - 你可以通过确保各个环节都有最佳的关键字锚文本大大提高链路的相关性。您还应该确保所有链接到您的网站指向你的主域( http://www.yourdomain.com ,像http://widget.yourdomain.com不是一个子域) 。另外,你要尽可能多的联系,以包含适当的替代文字。你的想法。
> 另外,也许不太明显的方式,建立链接(或者至少流量)是使用社交媒体 - 所以设置你的Facebook ,Twitter和谷歌,每当你有新的链接一定要分享。这些通道也可以作为一个有效的渠道,推动更多的流量到您的网站。
由社交渠道带来的流量在现在已经越来越重要了,对于一些以内容为主导的网站,而且处于发展初期,可以迅速带来流量,可以参考一下这篇文章
[寻ta分析与网站内容](http://www.phodal.com/blog/xunta-analytics-and-website-content/)
一些更简单的办法就是交换链接,总之这个话题有些沉重,可能会带来一些负面的影响,如黑帽SEO。。。。
**参考来源**:
《SEO艺术》(The Art of SEO)
[1]: /static/media/uploads/search-engine-arch1.jpg
[2]: /static/media/uploads/screen_shot_2014-05-15_at_2.03.01_pm.jpg