通过HTTPS访问我们做的网站时,总会弹出“本页不但包含安全的内容,也包含不安全的内容”的对话框。
    这是由于网页中含有<iframe>,但iframe的src属性没有设置造成的。
    解决该问题可用如下方法: 
      客户端:设置IE的属性。例:在IE6上,工具-〉Internet选项-〉安全选项卡-〉自定义级别-〉将“显示混合内容”设置为启用 即可解决该问题。这个讨厌的对话框就不会总出现了,嘿嘿。

posted @ 2011-05-14 16:02 小马歌 阅读(449) | 评论 (0)编辑 收藏
 

由于http协议的简单性以及业务的需要,我们不可避免地需要自己去实现一些走http协议的server

当我们的短连接http服务器(如验证码服务器)是客户端是浏览器(iefirefoxchrome)的时候,有一个问题需要特别注意,我称之为短连接http服务器陷阱。首先,先来看下面一系列同一个请求,但是不同抓包工具抓取的内容的截图:

1.使用httpwatch抓包获取的内容

2.使用sniffer抓包获取的内容

其中,两者是同一个请求,从sniffer抓包内容看、浏览器和server已经完成了交互过程。但是浏览器(包括iefirefoxchrome)Result却是ERROR_INTERNET_CONNECTION_RESET,这是为什么呢?

通过走读server代码,发现server做了这样一个逻辑,在有请求过来的时候只读取了100个字节,因为server认为这100个字节足够判断客户端的请求行为(GET /HTTP/1.0 少于100个字节),而其它请求信息(包括cookie等等)是无用的,然后返回response信息,然后关闭连接。流程如下:

1)读取100个字节 => 2)返回response信息 => 3)关闭socket

当客户端请求的量不大的时候(内网开发机并发请求量<100)、很容易出现上文所述http服务器陷阱的问题。当客户端请求的量很大的时候,出现上述问题的几率倒不大,但是偶尔也会出现。分析原因如下:

当并发量很少的时候,server读取了100个字节并返回response后,马上关闭连接。由于并发量少,server处理速度很快,这样很快就会关闭了连接。但是,此时客户端(浏览器)也许还有一些数据(例如cookie信息等)并没有真正发送到server的内核缓冲区。于是,浏览器继续把剩余的数据试图发送到server,但是,此时发现server已经关闭了连接,就会引发ERROR_INTERNET_CONNECTION_RESET错误。虽然用sniffer抓包发现实际上整个交互过程已经完成,但是浏览器缺认为这是一个致命的错误,获取到的返回数据并没有正确的显示在浏览器上。

当并发量很大的时候,虽然server只读取了100个字节,但是由于服务器的处理能力有限,从读取了100字节到关闭连接的过程有一定的时间差。客户端可以在这个时间差的时间内把剩余的数据发送到了server内核缓冲区(虽然应用程序没有读取这部分数据)。因此,出现ERROR_INTERNET_CONNECTION_RESET错误的概率就会变小。

总结,在实现短连接的http服务器(尤其是提供给浏览器使用的服务器)时,尽量把http header数据包读取完整,不要因为只需要一小部分header信息就能处理请求而不读取其它的头部信息,以此来加快处理速度或者节省空间。这往往适得其反,可能会引起一些列不可预料的问题。

由此,引发另一个思考,既然不可避免的需要读取完整的http header数据包,那么,浏览器请求的时候,应该尽量保持http header不要过于庞大,既是为了减缓server的压力也是为了加快server的处理速度。而减少http header长度的最好方法就是减少cookie的内容。
来自: http://hi.baidu.com/yancncen/blog/item/2b79c4a2c8e83ba7cbefd091.html
posted @ 2011-05-12 19:26 小马歌 阅读(702) | 评论 (0)编辑 收藏
 
     摘要: 网站的加载速度是决定网站等级的重要因素,值得站长特别关注。原因很简单,没有人愿意为了打开一个网页而等老半天,换句话说,如果你的网站打开速度很慢,将流失大量的访客,甚至出现多米诺效应的不良影响。在埋头深入代码中试图提高网站速度之前,先要确定导致网站访问速度缓慢的真正原因是什么。本文收集了非常有用的WEB服务和工具,可以帮助你诊断和分析你的网站,让你更加全面的了解自己的网站性能。  &...  阅读全文
posted @ 2011-05-11 19:26 小马歌 阅读(250) | 评论 (0)编辑 收藏
 
网站建设的核心关键是“如何发现潜在客户并有效的转化为合作客户”,这里提到有效的转化也就是说找到的客户不一定会选用我们的产品或者服务,成为了我们的客户的转化才是有效的转化,那么在竞争如此激烈的网络时代,我们该怎么去挖掘潜在客户并提高我们网站的转化率呢?关键之一就是提高网站的可用性。

  对于网站来说,可用性是指用户能否有效地找到所需的信息或完成他的任务,效率如何以及是否让人有愉快满意的感受。如果网站可用性较差,会浪费用户的时间,大大降低网站的回头访问率,这对网站的生存是一个至关重要的问题。因此,为网站开发人员提供可用性改善建议和改进工具是十分必要的。

usability testing 25 Tools to Improve Your Websites Usability

  如何知道访客是否喜欢你的网站?借助可用性检测工具追踪用户行为可以回答这个问题。跟踪到的数据可以给你提供精确的信息,让你知道用户喜欢你网站的什么地方,哪些区域是最突出,哪些地方是用户最容易忽略的。不要小看这些收集到的数据,因为这些数据可以帮助你有效的提高网站的点击率和转化率。

  改善您的网站不要挑时间,当你发现你的网站吸引不了多少访客的时候,就应该立即行动了。 这里收集了很多非常好的工具,通过不同的方法追踪用户的行为并提供给你改进网站可用性的建议。它们中有些可能不是免费的,但一个好的回报是值得去付出的。 为大家猎取所需的工具是一件开心又很有意义的事情!

Userfly

Userfly可以提供免费的网页访客动作记录服务。只需要在网页中添加一段简单的Javascript代码,就可以记录访客从打开该网页到关闭整个过程中的动作。Userfly能够记录的内容包括鼠标的移动、点击以及键盘输入等动作。对于网站拥有者来说,Userfly可以很方便的对用户行为进行检测和分析,通过A/B Testing等方法为网站UI/UE提供非常有价值的信息。

userfly 25 Tools to Improve Your Websites Usability

Attention Wizard

Attention Wizard是一个视觉工具,它可以帮助您提高转换率,轻松地识别目标网页存在的问题。 Attention Wizard用高级人工智能算法来模拟人类视线的轨迹和聚焦点。Attention Wizard能够立刻对你提交的网页样本进行处理并生成“眼球轨迹热力图”。这个“热力图”可以预测你网站的访问者在最初的几秒内是如何浏览的。 生成的结果中,有75%都是通过眼睛跟踪和鼠标跟踪来完成的。Attention Wizard有简易版、高级版和终极版三个版本。

attentionwizard 25 Tools to Improve Your Websites Usability

ClickDensity

一个完整的可用性工具包,通过从访客那里获取的实时数据来改善网站内容结构,优化链接和广告的投放位置,分析和提高网站的粘性。 它将告诉你访客究竟在何处点击。

注册之后,把网站提供的一段Javascript代码加入到你的网站中即可,当用户访问网站的时候,一个小的附加文件会自动下载用于传输用户的点击事件。该产品提供免费试用版,可付费升级到不同的高级版本。

clickdensity 25 Tools to Improve Your Websites Usability

CrazyEgg

CrazyEgg能够监控一个页面的所有点击并能清楚的显示页面的点击热图,可以相当准确地监控所有页面的点击位置。

crazyegg 25 Tools to Improve Your Websites Usability

Clicktale

它是对你的网站访客浏览行为进行分析的一个工具,以类似视频的方式将访问者在你的网站上进行的操作全部记录下来,你可以在线观看也可以下载到电脑上。利用ClickTale的访客行为视频记录,可以帮你更好的布局你的网页,给访问者带来更好的用户体验进而提升转化率。 它还提供了实时监控的性能分析,转化分析,链接分析,先进的过滤和市场分析。

clicktale 25 Tools to Improve Your Websites Usability

Clixpy

Clixpy几乎记录了访客的所有动作,如鼠标移动,点击,滚动和表单输入。 这些动作对于定位用户发现容易或者困难内容,那些东西最吸引他们以及为什么用户会离开网站有很大的帮助。这有助于优化目标网页,并帮助您把访问者转化为客户。

clixpy 25 Tools to Improve Your Websites Usability

ChalkMark

Chalkmark可以让你快速创建一个项目,在访客中对界面原型进行调查以了解用户关注的焦点在哪,结果中可以查看每项任务的热图,并知道有多少用户跳过了任务。可以免费注册,也可以按月或者年付费到不限制任务数级别。

chalkmark 25 Tools to Improve Your Websites Usability

 ClickHeat

是GPL许可下的开源软件,是一个很强大的JavaScript 库,它可以帮你统计一个页面上用户点击的热度分布图,支持中文显示。

clickheat 25 Tools to Improve Your Websites Usability

Mouseflow

通过视频记录和分析用户的点击和滚动行为,生成鼠标点击和移动热图,帮助你优化目标页面和提高转化率。

4Q Online Survey

用户是否对网站真正的满意? 第四季的网上调查,一个免费的解决方案,可以告诉你关于你网站的访问者的详细信息,例如用户为什么访问你的网站,是否以正确的操作方式完成任务,如果不是,会是原因是什么阻碍了他们。 这项调查可以在用户中收集到大量的反馈。

4qsurvey 25 Tools to Improve Your Websites Usability

Concept Feedback

Concept Feedback通过在线的专业团队快速的对网站设计,可用性和营销等方面提供反馈。对于公开的意见,团队中WEB方面的专业人员会给你一个整体的意见, 对于私密反馈,你可以邀请特定专家提供反馈,并组织出图形化的结果。 专业的反馈来自于在设计,可用性和营销领域的专家。

conceptfeedback 25 Tools to Improve Your Websites Usability

FeedbackArmy

 你可以通过提交你网站的问题来获得一个快速的可用性测试并得到10项反馈。不过,不要支付15美元,如果想得到50项反馈则需要55美元。

 feedbackarmy 25 Tools to Improve Your Websites Usability

 Feng GUI

Feng GUI通过模拟人的视觉在开始的5秒内看到的东西来生成热点图,它为设计和开发人员提供了测试服务,通过分析观察角度、品牌效益和预测效果。

feng gui 25 Tools to Improve Your Websites Usability

Five Second Test

通过汇集用户在5秒内回答的问题集来改善目标网页以让访客关注关键内容。

fivesecondtest 25 Tools to Improve Your Websites Usability

Google Site Search

在Google Site Search中,强化了企业网站的索引范围;一个托管的搜索解决方案,可以呈现无广告的搜索结果,提高网站的转化率和销售额,降低成本。

sitesearch 25 Tools to Improve Your Websites Usability

Kampyle

Kampyle可以让你在你的网站出现一个在线发送反馈信息的按钮,点击此按钮可以弹出调查表,让访客可以反馈信息。Kampyle提供了反馈表单模板,你只需要简单修改即可,另外Kampyle还提供了丰富的反馈统计功能。

kampyle 25 Tools to Improve Your Websites Usability

Loop 11

使用Loop 11可以很容易的创建一个专业的可用性测试,收集反馈并及时的得到可用性的量化数据,然后立即看到结果。 支持超过40种语言。

loop11 25 Tools to Improve Your Websites Usability

OpenHallway

OpenHallway记录用户在远程或本地的可用性数据。用户的屏幕和语音会被记录并被上传到您的帐户。

openhallway 25 Tools to Improve Your Websites Usability

Silverback

一个用于设计人员和开发人员通过捕获屏幕活动来进行可用性测试的软件,可以记录测试者的表情和声音,有批量导出功能并可以标示出任何值得注意的时刻。

silverbackapp 25 Tools to Improve Your Websites Usability

Site Tuners

它通过指导你了解在目标网页中存在的转化率问题并回答您的具体的转换相关的问题。通过优化目标网页快速而简便的获得最好的转换率。

sitetuners 25 Tools to Improve Your Websites Usability

TechSmith

TechSmith是世界领先的为个人和专业领域提供屏幕捕获和录制软件的供应商。人们普遍使用TechSmith产品来从他们的计算机屏幕上捕获内容。Morae是用于了解你的客户的一个很好的软件。使用Morae一个好处是,它会自动计算并给出效果和满意度,而不只是分析和报告。

morae 25 Tools to Improve Your Websites Usability

Usabilla

Usabilla帮助网站所有者更深入的了解他们的客户,不仅仅是数据。收集有关网页,实物模型,线框或任何图像的视觉反馈。

usabilla 25 Tools to Improve Your Websites Usability

User Testing

UserTesting观察用户在自己的环境中的活动,倾听他们的想法,然后形成结论。

usertesting 25 Tools to Improve Your Websites Usability

Webnographer

是一个远程的可用性测试工具,测试网站、Web应用程序或者原型在自然环境中可操作行的指标,通过调查问卷捕获用户的思想。

webnographer 25 Tools to Improve Your Websites Usability

Webtrends

优化重点在于发现市场潜力和精准的投递内容。世界上数以千计的网站智能企业,包括半数以上的财富和全球500强企业,正依靠WebTrends提高他们的网站转换率、优化他们的市场营销效果,以获得更高的投资回报。作为全球网站分析行业的领导者,WebTrends凭借其多次获得业界大奖、全面地咨询服务和无与伦比的专业经验,而成为Web分析行业最权威的衡量标准。通过其提供的按需服务和各种软件产品,WebTrends帮助用户获得精确的、可被执行的Web分析数据。

webtrends 25 Tools to Improve Your Websites Usability

Website Optimiser

网站优化工具是Google免费的网站测试和优化工具。使用该工具,无需投入任何费用就可以提高现有网站的价值和点击量。通过使用网站优化工具对网站内容和设计进行测试和优化,不管您是营销新手还是专家,都可以轻松快捷地增加收入和投资回报率。可以进行A/B实验和多版本实验两种实验。

websiteoptimize 25 Tools to Improve Your Websites Usability

 这些都是非常有用的工具,如果你发现了更好的,记得与我们分享:)

 

编译来源:25个提高网站可用性和转化率的工具

原文来自:25 Tools To Improve Your Website’s Usability


posted @ 2011-05-11 19:25 小马歌 阅读(156) | 评论 (0)编辑 收藏
 
对于Web开发人员来说,找到有用的CSS工具,就像找到一个魔灯,可以让他那些艰难的任务变得有趣。CSS工具帮助开发人员创造更加时尚,更有创意的网站。在这篇文章中收集了40个有用和强大的CSS工具,记得收藏起来哦。

YAML Builder

YAML Builder是强大的可视化布局工具,只需要简单的设置参数和拖拽模块就能快速创建基于YAML的布局。

Ultimate CSS Gradient Generator by ColorZilla

非常棒的一款 CSS 渐变生成工具,支持跨浏览器。

Grid Designer

Grid Designer 用于在线网格设计,有很多选项用于定义列,尺寸和间距。

My CSS Menu

My CSS Menu 用于自定义跨浏览器的CSS菜单制作。

Csstxt

Csstxt 帮助你定义文本样式。

Simple CSS

Simple CSS  帮助你非常容易的创建层叠样式表。

Firdamatic: the Design Tool for the Uninspired Webloggers

Firdamati 是一个无表格布局生成器,可以帮助你容易的创建一个表单,可定制皮肤。

Sky CSS Tool

 

Sky CSS 可以让你在无需编写任何编码就可以创建CSS类。

The 1KB CSS Grid

这是一款非常轻量的CSS网格工具。

Free CSS Template Code Generator

一款CSS模板代码生成工具。

Variable Grid System

The variable grid system 是一款快速生成CSS网格的工具,基于 960 网格系统。

GRIDINATOR

Gridinator 帮助你生成基于960.gs的网格布局。

Blueprint Grid CSS Generator

这也是一款生成灵活网格布局的工具。

CSS Grid Calculator

使用 CSS Grid Calculator 可以快速的创建一个可视化布局。

templatr

这款在线工具,帮助你为你的网站快速创建一个独一无二的模板。

XHTML/CSS Markup Generator

Markup Generator 是一款简单的标记代码生成工具。

Spiffy Corners – Purely CSS Rounded Corners

Spiffy Corners 是一款圆角效果生成工具。

Spritebox

Spritebox 是一款所见即所得的工具,帮助设计师从一张 sprite image 生成CSS Classes 和 CSS IDs。

SlickMap CSS

SlickMap CSS 是一个简单的样式单用来根据 sitemap 显示对应的图形化信息。

CSS Layout Generator – CSS Portal

一款 CSS 布局在线生成工具。

CSS Menu Maker

一款在线的 CSS 菜单生成工具。

Clean CSS

CleanCSS 是一款很棒的CSS格式化和优化工具。

CSS3 Please!

一款非常强大的在线CSS工具。

Tabs Generator

这是一款选项卡在线生成工具。

CSS Sorter

帮助你对CSS规则按字母进行排序。

CSS Type Set

这是一款辅助你选择字体的工具。

CSS Layout Generator

这也是一款CSS布局生成工具。

Layout Generator

一款用于生成多列布局和网格布局的工具。

Em Calculator

Em Calculator 是一款单位换算工具。

Colors Pallete Generator

Colors Pallete Generator是一个在线查看图片配色的服务。colors pallete generator 只需要上传图片,或者输入图片的网络地址,其便可以分析出此图片应用的配色方案。

CSS Menu Generator by Webmaster Toolkit

CSS Menu Generator 是一款在线菜单生成工具。

CSS Table Wizard

使用 CSS Table Wizard 试验边框样式并生成对应代码。

CSS Layout Generator

CSS Layout Generator 是一款在线工具,用于创建HTML+CSS 模板(layouts)。

Fonttester

Font Tester 是一款字体在线对比工具。

CSS font style

The CSS font-style 字体样式属性用于设置字体样式为斜体或倾斜。

CSS Color Codes

CSS color codes 带有两个选择,十六进制颜色代码和RGB颜色代码,以便您可以从颜色选择器轻松地选择与色彩,并从底部获取十六进制值。

CSS Colors

CSS Colors 为您提供全面的图表,显示十六进制以及RGB颜色值。你可以很容易找到的RGB颜色组合,从0到255,一共有超过16万色。

WordPress Theme Generator

一款WordPress主题在线生成工具。

List-O-Matic

List-O-Matic 是一款用于创建列表布局的工具。

Typetester

Typetester 用于在线比较字体效果。

MinifyMe

一款压缩工具,帮助你快速的把CSS 和 JavaScript 文件压缩成一个文件。

(编译来源:梦想天空  原文来自:40 Excellent (Yet Free) CSS Tools And Generators For Developers

推荐40个优秀的免费CSS工具
posted @ 2011-05-11 19:24 小马歌 阅读(144) | 评论 (0)编辑 收藏
 
在开发中,借助得力的工具可以事半功倍。今天,这篇文章向大家分享最新收集的15款非常有用的 JavaScript 开发工具。

TestSwarm: Continious & Distributed JS Testing
TestSwarm是Mozilla实验室推出的一个开源项目,它旨在为开发者提供在多个浏览器版本上快速轻松测试自己JavaScript代码的方法。

Javascript-212 in Useful JavaScript and jQuery Tools, Libraries, Plugins

Minimee
在网络上,速度是很重要的,Minimee能帮助你将CSS和JavaScript文件进行自动压缩和打包。

Javascript-169 in Useful JavaScript and jQuery Tools, Libraries, Plugins

Doctor JS
Doctor JS 是一款帮你分析 JavaScript 代码的工具,测试你的代码在多态、原型、异常和回调方面写得怎么样。

Javascript-174 in Useful JavaScript and jQuery Tools, Libraries, Plugins

Remy Sharp’s JSConsole
一个在线的 JavaScript 控制台工具,对于测试、调试和演示非常有用。

Javascript-269 in Useful JavaScript and jQuery Tools, Libraries, Plugins

JavaScript Library Boilerplate
JavaScript Library Boilerplate 帮助你随时随地创建自己的 JavaScript 库。

Javascript-260 in Useful JavaScript and jQuery Tools, Libraries, Plugins

jsdoc-toolkit
JsDoc Toolkit 是一款辅助工具,你只需要根据约定在 JavaScript 代码中添加相应的注释,它就可以根据这些注释来自动生成API文档。

Js-010 in Useful JavaScript and jQuery Tools, Libraries, Plugins

Jasmine: BDD for your JavaScript
Jasmine 是一个有名的javascript单元测试框架,它是独立的“行为驱动开发”框架。

Js-011 in Useful JavaScript and jQuery Tools, Libraries, Plugins

ObfuscateJS: JavaScript compressor
一款 JavaScript 混淆工具,去除空白和注释,重命名变量等。

Javascript-282 in Useful JavaScript and jQuery Tools, Libraries, Plugins

PEG.js
PEG.js 是一个JavaScript的表达式语法解析器,它使您能够轻松地建立复杂的数据或计算机程序语言的快速分析器。

Javascript-228 in Useful JavaScript and jQuery Tools, Libraries, Plugins

JSONView
JSONView 是一款帮助你在浏览器中查看JSON文档的Firefox插件。

Js-014 in Useful JavaScript and jQuery Tools, Libraries, Plugins

JSonduit
JSonduit 是一个将网页内容转换为 JSON 格式订阅器的工具。

Javascript-182 in Useful JavaScript and jQuery Tools, Libraries, Plugins

jsplumb
jsPlumb 为开发者提供了可视化链接元素到页面的方法,可以结合jQuery、MooTools 和 YUI3使用。

Javascript-193 in Useful JavaScript and jQuery Tools, Libraries, Plugins

Helma
Helma 是一个用来开发快速、稳定的Web应用程序的开源框架,它使用JavaScript 来作为服务端脚本环境,从而可以省略编译周期。

Js-015 in Useful JavaScript and jQuery Tools, Libraries, Plugins

HTML + JSON Report
一款将 JSON 数据转换为可读性更高的HTML格式内容的在线工具。

Javascript-300 in Useful JavaScript and jQuery Tools, Libraries, Plugins

JSON Editor
这个编辑器可以帮助你方便的编辑 JSON 字符串。

Javascript-222 in Useful JavaScript and jQuery Tools, Libraries, Plugins

posted @ 2011-05-11 19:23 小马歌 阅读(227) | 评论 (0)编辑 收藏
 
根据要求配置MySQL主从备份、读写分离,结合网上的文档,对搭建的步骤和出现的问题以及解决的过程做了如下笔记;
      现在使用的两台服务器已经安装了MySQL,全是rpm包装的,能正常使用。
      为了避免不必要的麻烦,主从服务器MySQL版本尽量保持一致;
环境:192.168.0.1 (Master)
          192.168.0.2 (Slave)
MySQL Version:Ver 14.14 Distrib 5.1.48, for pc-linux-gnu (i686) using readline 5.1
1、登录Master服务器,修改my.cnf,添加如下内容;
server-id = 1   //数据库ID号, 为1时表示为Master,其中master_id必须为1到232–1之间的一个正整数值;
log-bin=mysql-bin   //启用二进制日志;
binlog-do-db=data //需要同步的二进制数据库名;
binlog-ignore-db=mysql   //不同步的二进制数据库名;这个同步后听说很麻烦,我没有同步;
log-bin=/var/log/mysql/updatelog //设定生成的log文件名;
log-slave-updates //把更新的记录写到二进制文件中;
slave-skip-errors //跳过错误,继续执行复制;
2、建立复制所要使用的用户;
mysql>grant replication slave on *.* to test@192.168.0.2 identified by '********'
3、重启mysql;
/usr/bin/mysqladmin -uroot shutdown;
/usr/bin/mysql_safe &
4、现在备份Master上的数据
   锁定后我直接tar.gz data这个库文件;
mysql>FLUSH TABLES WITH READ LOCK;
cd /var/lib/mysql
tar data.tar.gz data
接着直接执行了远程scp;
scp ./data.tar.gz root@192.168.0.2:/var/lib/mysql
5、登录Slave数据库服务器,修改my.cnf;
server-id       = 3   //2已经被用在另一个服务器上了,如果以后要再加Slave号接着往后数就OK了;
log-bin=mysql-bin
master-host     =   192.168.0.1
master-user     =   test
master-password =   ******
master-port     = 3306
master-connect-retry=60   //如果发现主服务器断线,重新连接的时间差;
replicate-ignore-db=mysql //不需要备份的数据库;
replicate-do-db=data //需要备份的数据库
log-slave-update
slave-skip-errors
6、解压刚才从Master scp过来的文件,此处不用改权限、属主,默认没有改变,可以根据实际情况进行修改;
7、上述完成后,可以启动slave了;查看slave状态;
mysql>slave start;
mysql>show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.1
                  Master_User: test
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: updatelog.000001
          Read_Master_Log_Pos: 106
               Relay_Log_File: onlinevc-relay-bin.000013
                Relay_Log_Pos: 1069
        Relay_Master_Log_File: updatelog.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: data
          Replicate_Ignore_DB: mysql
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 1681
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)

ERROR:
No query specified

8、查看Master上面的状态;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000012 |    15016 | data         | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
由此可见两者的File、Position存在问题,所要要去Slave上设置对应主库的Master_Log_File、Read_Master_Log_Pos;执行如下语句;
mysql>slave stop;
mysql>CHANGE MASTER TO MASTER_HOST='192.168.0.1',MASTER_USER='test', MASTER_PASSWORD='******',MASTER_LOG_FILE='updatelog.000012',MASTER_LOG_POS=15016;
确保 Slave_IO_Running: Yes 、Slave_SQL_Running: Yes都要为YES才能证明Slave的I/O和SQL进行正常。
9、解锁主库表;
UNLOCK TABLES;
到此主从MySQL服务器配置完成,测试结果如下;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| updatelog.000012 |   717039 | data | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.1
                  Master_User: test
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: updatelog.000012
          Read_Master_Log_Pos: 717039
               Relay_Log_File: onlinevc-relay-bin.000013
                Relay_Log_Pos: 1222
        Relay_Master_Log_File: updatelog.000012
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: data
          Replicate_Ignore_DB: mysql
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 717039
              Relay_Log_Space: 1834
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)

ERROR:
No query specified
####################################   如下是MySQL数据库读写分离操作步骤 ##########################################
此处使用MySQL自己(Mysql-proxy)的代理实现数据库的读写分离;
所需要安装包如下;
1、check-0.9.8
2、glib-2.18.4
3、libevent-2.0.6-rc
4、lua-5.1.4
      wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
5、pkg-config-0.23
6、mysql-5.0.56
7、mysql-proxy-0.8.0
      http://mysql.cdpa.nsysu.edu.tw/Downloads/MySQL-Proxy/mysql-proxy-0.8.0.tar.gz

别的安装包地址当时没有记下载地址,不过大部分都在这个网站上找的;http://sourceforge.net/
&&&&&&&&&& 安装开始 &&&&&&&&
1、tar -zxvf check-0.8.4.tar.gz
    cd check-0.8.4
    ./configure
    make
    make install
2、tar -zxvf glib-2.18.4.tar.gz   //系统rpm包可能版本低出现了问题3;
    ./configure
    make
    make install
3、tar -zxvf libevent-2.0.6-rc.tar.gz
    cd libevent-2.0.6-rc
    ./configure --prefix=/usr/local/libevent
     make && make install
4、tar -zxvf lua-5.1.4.tar.gz
    INSTALL_TOP= /usr/local/lua    //    为了把lua安装到/var/lib/lua下,故要修改其下的Makefile;
或者直接执行:sed -i 's#INSTALL_TOP= /usr/local#INSTALL_TOP= /usr/local/lua#' Makefile
root@testmysql [/software/lua-5.1.4]# make
Please do
   make PLATFORM
where PLATFORM is one of these:
   aix ansi bsd freebsd generic linux macosx mingw posix solaris
See INSTALL for complete instructions.
这处是要你选择服务器所使用的平台;
执行:make linux //此处执行后出现了错误,解决办法在下面问题解决区1处,此处先跳过;
再执行:make install
设置环境变量:
    export LUA_CFLAGS="-I/usr/local/lua/include" LUA_LIBS="-L/usr/local/lua/lib -llua -ldl" LDFLAGS="-L/usr/local/libevent/lib -lm"
    export CPPFLAGS="-I/usr/local/libevent/include"
    export CFLAGS="-I/usr/local/libevent/include"

5、tar -zxvf pkg-config-0.23.tar.gz
    cd pkg-config-0.23
    ./configure
    make
    make install
安装完之后要执行:cp etc/lua.pc /usr/local/lib/pkgconfig/lua5.1.pc      //原因见下面的问题解决区2处;
6、安装MySQL客户端;
因为此服务器系统是默认安装了MySQL,没有安装客户端,我又装了client、devel如下所示已安装的rpm包;
   root@testmysql [/software/lua-5.1.4]# rpm -qa | grep MySQL
MySQL-client-5.1.48-0.glibc23
MySQL-bench-5.0.91-0.glibc23
MySQL-test-5.1.48-0.glibc23
MySQL-shared-5.1.48-0.glibc23
MySQL-server-5.1.48-0.glibc23
MySQL-devel-5.1.48-0.glibc23
此后的Mysql-proxy时总是一直报错,编译不过去,无奈之下用源码包客户端;(此时的rpm包都没有卸载,直接执行了下面的安装)//此处问题见问题解决区4处;
    tar zxvf mysql-5.0.56.tar.gz     //此处我直接使用了mysql的5.0.56的源码包;
    cd mysql-5.0.56
    ./configure --prefix=/usr/local/mysql --without-server
    make && make install

7、tar xvf mysql-proxy-0.8.0.tar.gz
    cd mysql-proxy-0.8.0
    ./configure --prefix=/usr/local/mysql-proxy --with-mysql=/usr/local/mysql --with-lua    //问题解决处4有介绍;
    Make && Make install

8、在/var/lib/bin创建mysql-proxy.sh,内容如下;
     #!/bin/bash
     LUA_PATH="/usr/local/mysql-proxy/lib/mysql-proxy/lua/?.lua" /usr/local/mysql-proxy/bin/mysql-proxy --proxy-backend-addresses=192.168.0.1:3306 --proxy-read-only-backend-addresses=192.168.0.2:3306 --proxy-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/rw-splitting.lua >> /var/log/mysql-proxy.log &
     然后加上可执行权限;
     chmod a+x /var/lib/bin/mysql-proxy.sh
     执行:/var/lib/bin/mysql-proxy.sh 启动服务;
9、验证是否开户了:4040、4041;
    root@testmysql [/usr/local/bin]# netstat -an | grep 404*
    tcp        0      0 0.0.0.0:4040                0.0.0.0:*                   LISTEN     
    tcp        0      0 0.0.0.0:4041                0.0.0.0:*                   LISTEN  
10、测试读写分离,此步略过,所有配置已经完成。

&&&&&&&&&&&&&&&&&&&&&&&&&&&   问题解决区   &&&&&&&&&&&&&&&&&&&&&&&&&&&&
1、在安装的第四步执行make linux时报错如下:
root@testmysql [/software/lua-5.1.4]# make linux
cd src && make linux
make[1]: Entering directory `/software/lua-5.1.4/src'
make all MYCFLAGS=-DLUA_USE_LINUX MYLIBS="-Wl,-E -ldl -lreadline -lhistory -lncurses"
make[2]: Entering directory `/software/lua-5.1.4/src'
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lapi.o lapi.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lcode.o lcode.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldebug.o ldebug.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldo.o ldo.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldump.o ldump.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lfunc.o lfunc.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lgc.o lgc.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o llex.o llex.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lmem.o lmem.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lobject.o lobject.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lopcodes.o lopcodes.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lparser.o lparser.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstate.o lstate.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstring.o lstring.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltable.o ltable.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltm.o ltm.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lundump.o lundump.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lvm.o lvm.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lzio.o lzio.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lauxlib.o lauxlib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lbaselib.o lbaselib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ldblib.o ldblib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o liolib.o liolib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lmathlib.o lmathlib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o loslib.o loslib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o ltablib.o ltablib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lstrlib.o lstrlib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o loadlib.o loadlib.c
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o linit.o linit.c
ar rcu liblua.a lapi.o lcode.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o ldblib.o liolib.o lmathlib.o loslib.o ltablib.o lstrlib.o loadlib.o linit.o
ranlib liblua.a
gcc -O2 -Wall -DLUA_USE_LINUX   -c -o lua.o lua.c
In file included from lua.h:16,
                 from lua.c:15:
luaconf.h:275:31: error: readline/readline.h: No such file or directory
luaconf.h:276:30: error: readline/history.h: No such file or directory
lua.c: In function 鈥榩ushline鈥?
lua.c:182: warning: implicit declaration of function 鈥榬eadline鈥?
                                                                    lua.c:182: warning: assignment makes pointer from integer without a cast
lua.c: In function 鈥榣oadline鈥?
lua.c:210: warning: implicit declaration of function 鈥榓dd_history鈥?
                                                                       make[2]: *** [lua.o] Error 1
make[2]: Leaving directory `/software/lua-5.1.4/src'
make[1]: *** [linux] Error 2
make[1]: Leaving directory `/software/lua-5.1.4/src'
make: *** [linux] Error 2

解决方法:yum install libtermcap-devel
          yum install ncurses-devel                                 
          yum install libevent-devel                                   
          yum install readline-devel
  
2、安装MySQL-proxy时报错:
checking for LUA... configure: error: Package requirements (lua5.1 >= 5.1) were not met:

No package 'lua5.1' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables LUA_CFLAGS
and LUA_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
解决办法:
cp etc/lua.pc /usr/local/lib/pkgconfig/lua5.1.pc

3、安装MySQL-proxy时报错:
checking for GLIB... configure: error: Package requirements (glib-2.0 >= 2.16.0) were not met:

No package 'glib-2.0' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables GLIB_CFLAGS
and GLIB_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
解决办法:
   1、查看系统已经安装glib的rpm包;
    glibc-2.5-49.el5_5.4
    glibc-headers-2.5-49.el5_5.4
    glib2-2.12.3-4.el5_3.1
    glibc-common-2.5-49.el5_5.4
    glibc-devel-2.5-49.el5_5.4
   2、下载安装glib-2.18.4.tar.gz

4、刚开始使用系统里rpm所指定的mysq_config时,mysql-proxy安装报错,信息如下;
    configure: error: mysql_config not exists or not executable, use $ ./configure --with-mysql=/path/to/mysql_config
    看到帮助安装文档里要求如下:
    --with-mysql[=PATH]     Include MySQL support. PATH is the path to 'mysql_config'。
解决办法就是:安装包中的第6步。

http://hi.baidu.com/adriannet/blog/item/e06d2d58ea8d798f810a1854.html

posted @ 2011-05-10 18:12 小马歌 阅读(322) | 评论 (0)编辑 收藏
 
前一段时间在负责实施一个项目,利用nginx的七层负载均衡的良好性能做调度器,后端两台PHP应用服务器,实现静动态分离处理,在整个系统环境全部部署完后,把应用程序放上去测试时,发现一个问题,现把问题和解决办法写出来,与大家一起分享和讨论。

  一、系统环境:

  1、nginx负载均衡/反向代理服务器(1台)

  环境:CentOS 5.5 nginx-0.7.65

  IP:192.168.0.10

  2、后端PHP应用服务器(2台)

  环境:CentOS 5.5 Apache + PHP

  Webserver1 IP:192.168.0.20

  Webserver1 IP:192.168.0.21

  二、安装配置

  1、安装nginx负载均衡/反向代理服务器

  安装过程就不详说了,可以参考我另一篇文章《nginx+tomcat负载均衡集群安装配置》,nginx负载均衡/反向代理配置如下:

  …

  upstream phpserver {

  server 192.168.0.20:80 weight=5;

  server 192.168.0.21:80 weight=5;

  }

  …

  server {

  listen 80;

  server_name localhost;

  root /webroot;

  index index.php index.html index.htm;

  location ~ .*\.(php|php5)?$ {

  proxy_pass http://phpserver;

  include proxy.conf;

  }

  location ~ /\..+ {

  deny all;

  }

  access_log /var/log/nginx/access.log;

  }

  2、后端PHP应用服务器的详细安装配置迟些再写出来;

  三、测试发现的问题及解决办法

  1、当后端两台PHP应用服务器都正常时,访问速度非常快,查看日志,原来一个请求,是后端两台服务器同时响应的;

  2、为了模仿故障测试,停掉一台PHP应用服务器,这时再访问,请求打开一页面时,发现有一半响应比较快,另一半响应很慢,最后页面是可以打开,但速度不理想,很慢,查看error日志,发现nginx还是把请求的一半发往已停掉的那台服务器,难怪会这么慢;但当很快(10秒内)再打开一个请求页面时,速度又非常快了,查看日志,发现nginx不会把请求的一半发往已停掉的那台服务器;过一会再发起一个请求时,又出现有一半响应比较快另一半响应很慢的现象了,查看日志,nginx又把请求的一半发往已停掉的那台服务器;

  3、到这里,我明白了nginx检查后端应用服务器的健康时是有一个时间间隔的,应该怎样处理这个问题呢,当后端有一台服务器down机时,用户访问感觉不出有慢的现象?原来在nginx负载均衡配置里加上下面两个参数时可以有效的解决这个问题:

  upstream phpserver {

  server 192.168.0.20:80 weight=5 max_fails=2 fail_timeout=600s;

  server 192.168.0.21:80 weight=5 max_fails=2 fail_timeout=600s;

  }

  3.1)max_fails = NUMBER ---- 在一定时间内(这个时间在fail_timeout参数中设置)检查这个服务器是否可用时产生的最多失败请求数,默认为1,将其设置为0可以关闭检查,这些错误在proxy_next_upstream或fastcgi_next_upstream(404错误不会使max_fails增加)中定义;

  3.2)fail_timeout = TIME ---- 在这个时间内产生了max_fails所设置大小的失败尝试连接请求后这个服务器可能不可用,同样它指定了服务器不可用的时间(在下一次尝试连接请求发起之前),默认为10秒,fail_timeout与前端响应时间没有直接关系,不过可以使用proxy_connect_timeout和 proxy_read_timeout来控制。

  我设置当有2个请求失败,就表示后端的服务器不可用,在以后的600S时间内nginx不会再把请求发往已检查出标记为不可用的服务器,再次测试时,把后端一台PHP应用服务务器停掉,只是有一个请求打开页面时出现上面的现象,以后10分钟内都不会出现了,请求页面打开速度正常,fail_timeout的值可以根据你的实际情况而定。

posted @ 2011-05-10 17:52 小马歌 阅读(254) | 评论 (0)编辑 收藏
 

1、Nginx介绍

   Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx。

 

2、为什么使用Nginx

   Nginx 是一个高性能Web和反向代理服务器, 它具有有很多非常优越的特性(主要是基于Linux系统阐述的):

l 在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一. 能够支持高达 50,000 个并发连接数的响应, 感谢Nginx为我们选择了 epoll and kqueue 作为开发模型.

l Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理 服务器对外进行服务. Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多.

l 作为邮件代理服务器: Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器), Last.fm 描述了成功并且美妙的使用经验.

l Nginx 是一个 [#installation 安装] 非常的简单 , 配置文件 非常简洁(还能够支持perl语法), Bugs 非常少的服务器: Nginx 启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动. 你还能够 不间断服务的情况下进行软件版本的升级 。

以上都是官方的一些说法,看看网上的一些意见:“4GB内存的服务器+Apache(prefork模式)一般只能处理3000个并发连接,因为它们将占用3GB以上的内存,还得为系统预留1GB的内存。我曾经就有两台Apache服务器,因为在配置文件中设置的MaxClients为4000,当Apache并发连接数达到3800时,导致服务器内存和Swap空间用满而崩溃。而这台 Nginx 0.5.31 + PHP 5.2.4 (FastCGI) 服务器在3万并发连接下,开启的10个Nginx进程消耗100M内存(20MB*10=100M),开启的250个php-cgi进程消耗1G内存(4MB*250≈1GB),加上系统自身消耗的内存,总共才消耗2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才100M。在开启25个php-cgi进程的情况下,每分钟的处理能力只比开启250个php-cgi进程时低了不到一半。”

 

3、Nginx的安装

   基于李,杨家用的1台主机,操作系统是Win2003版本的,进行安装配置。

    Windows的安装比较简单,直接到http://wiki.nginx.org/NginxInstall下载需要的压缩包,解压到相应目录(假如是C:/nginx),点击目录下面的nginx.exe即可启动。

 

4、动静分离和负载均衡的准备工作

l Host配置:

   127.0.0.1 yangli.com

l 服务器:win2003  1台

l Web容器:Tomcat 6(8888端口)、Resin(8080端口)

              Tomcat和resin都部署相同应用,getUsers.jsp作为测试页面。

l 反向代理服务器:Nginx-0.8.34.zip

                    静态目录路径:e:/home/htmlfile/getUsers.html

l 项目部署:普通web项目,例如:example

Ø Resin-3.0.26配置:

       <host id="yangli.com" root-directory=".">

       <web-app id="/" document-directory="E:/example/webapp"/>

       </host>

Ø Apache-tomcat-6.0.26 配置文件:

        D:\apache-tomcat-6.0.26\webapps\examples

        修改:D:\apache-tomcat-6.0.26\conf\server.xml

        增加:

<Host name="yangli.com"  appBase="D:\apache-tomcat-6.0.26\webapps\examples"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">

  <Context path="" docBase="D:\apache-tomcat-6.0.26\webapps\examples">

          </Context>

  </Host>

主要是为了解决访问tomcat服务器的时候,

不需要http://yangli.com:8888/examples/getUser.jsp

可以直接访问:http://yangli.com:8888/getUser.jsp

具体说明,可以上网搜搜。

l 实现原理图:

 

 

 

 

配置原理图

 

5、动静分离

假设后端只有一台web服务器,配置如下:

upstream yangli.com {

   server 127.0.0.1:8888;

   #tomcat

}

 

server {

        listen       2010;

        server_name  yangli.com;

        access_log  off;

        location / {

            root   e:/home/htmlfile;           

            index index.html index.htm;        

            if (!-f $request_filename) {

    rewrite ^/([a-zA-Z]+).html   /$1.jsp last;

                proxy_pass http://yangli.com;

                break;

            }

        }

}

注明:如果是静态文件将定位到:e:/home/htmlfile;  目录

      如果e:/home/htmlfile不存在该文件,则请求到后端服务器:

      这里使用了rewrite规则rewrite ^/([a-zA-Z]+).html   /$1.jsp last;

      if (!-f $request_filename) {

    rewrite ^/([a-zA-Z]+).html   /$1.jsp last;

                proxy_pass http://yangli.com;

                break;

            }

 

当我们请求:

 

 

 

 

 

此时:访问的是E:\home\htmlfile\2010.html

 

 

 

 

 

 

 

 

当我们访问:

 

 

根据rewrite规则,实际请求到了:127.0.0.1:8888上的tomcat进行处理,这样子就实现了动静分离,而对于用户来说,感觉只是仅仅访问了html页面。

同样测试Resin,也是成功的。

 

6、负载均衡

 

1. Nginx 负载均衡基础知识

nginx的upstream目前支持4种方式的分配

1)、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2)、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

2)、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

3)、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

4)、url_hash(第三方)

在需要使用负载均衡的server中增加

proxy_pass http://yangli.com;

 

每个设备的状态设置为:

a)        down 表示单前的server暂时不参与负载

b)        weight 默认为1.weight越大,负载的权重就越大。

c)        max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

d)        fail_timeout:max_fails次失败后,暂停的时间。

e)        backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

 

 修改配置如下:

    upstream yangli.com {

       server 127.0.0.1:8888;

       #tomcat

       server 127.0.0.1:8080 backup;

       #resin

    }

 

下面来测试一下:

 

 

实际上访问了:

 

 

由于:resin设为backup,那么当tomcat宕机了,nginx会将请求发送到resin服务器,此时resin接管了tomcat,为外界提供服务。

 

测试如下:

1、关闭tomcat服务器

执行:D:\apache-tomcat-6.0.26\bin\shutdown.bat

 

表明tomcat已经被关闭

 

2、访问http://yangli.com:2010/getUsers.html

 

 

请求到resin服务器上了。

 

3、启动tomcat服务器:

D:\apache-tomcat-6.0.26\bin\startup.bat

 

 

页面访问正常

4、访问http://yangli.com:2010/getUsers.html

 

由于tomcat工作正常,于是又接管,作为主服务器进行工作。

 

7、总结

   本文主要阐述了利用Nginx实现动静分离和负载均衡,其中后端服务器使用了Resin和Tomcat,旨在表明Nginx并不关心后端服务器类型,只要后端服务器部署了相同的应用,访问正常即可。

 

 

最后附上nginx配置:

     upstream yangli.com {
           server 127.0.0.1:8888;
           server 127.0.0.1:8080 backup;
       }


server {
        listen       2010;
        server_name  yangli.com;
        access_log  off;

        location / {
            root   e:/home/htmlfile;           
            index index.html index.htm;         
            if (!-f $request_filename) {
                rewrite ^/([a-zA-Z]+).html   /$1.jsp last;
                proxy_pass http://yangli.com;
                break;
            }
        }

    }


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jooben/archive/2010/04/06/5454995.aspx

posted @ 2011-05-10 17:51 小马歌 阅读(3005) | 评论 (0)编辑 收藏
 

####################################
#Nginx与php分离配置
#Author:楚霏
#Date: 2010-5-12
#Update: 2010-5-12
#Env: Centos 5.4 x86_64
####################################

一、准备工作
####################################
环境:Centos 5.4 x86_64
WEBServer IP: 10.0.0.240
PHPServer1 IP: 10.0.0.241
PHPServer1 IP: 10.0.0.242
####################################

二、思路
####################################
WEBServer:
1.只负责接收http请求并分发;
2.只安装nginx,不安装php;
3.只建/www/wwwroot目录,不存放php代码;
4.所有静态文件使用CDN。

PHPServer:
1.只负责处理php请求;
2.只安装php-fastcgi和mysql客户端;
3.建/www/wwwroot目录,最好从NFS文件服务器上挂载网站代码。
####################################

三、配置
####################################
#WEBServer:
#增加一行到nginx.conf
#----------------------------引用文字-开始----------------------------
include upstream.conf;
#----------------------------引用文字-结束----------------------------

#新加upstream配置文件
#vi /usr/local/nginx/conf/upstream.conf
#----------------------------引用文字-开始----------------------------
upstream FastCGIServers {
server 10.0.0.241:9000;
server 10.0.0.251:9000;
}
#----------------------------引用文字-结束----------------------------

#修改虚拟主机配置文件的fastcgi_pass为负载均衡指定的upstream值
#----------------------------引用文字-开始----------------------------
location ~ \.php$ {
include fastcgi_params;
#fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_pass FastCGIServers;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/wwwroot/test.com$fastcgi_script_name;
}
#----------------------------引用文字-结束----------------------------

#PHPServer:
vi /usr/local/php-fcgi/etc/php-fpm.conf
#----------------------------引用文字-开始----------------------------
#把监听地址改为本机ip:port
#找到:
/tmp/php-fcgi.sock

#改为:
10.0.0.241:9000

#把请允许的客户端改为WEBServer的地址
#找到:
127.0.0.1
#改为:
10.0.0.240
#----------------------------引用文字-结束----------------------------
####################################

四、特点
####################################
1.扩展容易:增加一台php服务器,就不用配置nginx了,直接到nginx配置文件中增加一行即可
2.nginx配置全在一台机器,不再需要建太多虚拟主机,也不需要每台服务器hosts文件中解析自定义的域名
2.更好发挥各自优势,nginx只用来接收http请求,有望达到传说中的并发10万;php-fcgi也可以开更多的进程。
####################################

posted @ 2011-05-10 17:50 小马歌 阅读(1494) | 评论 (0)编辑 收藏
仅列出标题
共95页: First 上一页 53 54 55 56 57 58 59 60 61 下一页 Last