IT职场人,切不要一辈子靠技术生存(转载)

‍不管你是学习技术为了找工作还是创业,你都要对技术本身有个清醒的认识,在中国不会出现BILL GATES,因为,中国目前还不是十分的尊重技术人才,还仅仅的停留在把软件技术人才当作人才机器来用的尴尬境地。

  一。 在中国你千万不要因为学习技术就可以换来稳定的生活和高的薪水待遇,你千万更不要认为哪些从事市场开发,跑腿的人,没有前途。

  不知道你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需要团队的成员没日没夜的加班,还需要为测试出的BUG和不能按时提交的软件模块功能而心怀忐忑,有的时候如果你不幸加入现场开发的团队你则需要背井离乡告别你的女友,进行封闭开发,你平时除了编码之外就是吃饭和睡觉(有钱的公司甚至请个保姆为你做饭,以让你节省出更多的时间来投入到工作中,让你一直在那种累了就休息,不累就立即工作的状态)

  更可怕的是,会让你接触的人际关系非常单一,除了有限的技术人员之外你几乎见不到做其他行业工作和职位的人,你的朋友圈子小且单一,甚至破坏你原有的爱情(想象一下,你在外地做现场开发2个月以上,却从没跟女友见过一面的话,你的女友是不是会对你呲牙裂嘴)。

  也许你拿到了所谓的白领的工资,但你却从此失去享受生活的自由,如果你想做技术人员尤其是开发人员,我想你很快就会理解,你多么想在一个地方长期待一段时间,认识一些朋友,多一些生活时间的愿望。

  比之于我们的生活和人际关系及工作,那些从事售前和市场开发的朋友,却有比我们多的多的工作之外的时间,甚至他们工作的时间有的时候是和生活的时间是可以兼顾的,他们可以通过市场开发,认识各个行业的人士,可以认识各种各样的朋友,他们比我们坦率说更有发财和发展的机会,只要他们跟我们一样勤奋。(有一种勤奋的普通人,如果给他换个地方,他马上会成为一个勤奋且出众的人。)

  二。在学习技术的时候千万不要认为如果做到技术最强,就可以成为100%受尊重的人。

  有一次一个人在面试项目经理的时候说了这么一段话:我只用最听话的人,按照我的要求做只要是听话就要,如果不听话不管他技术再好也不要。随后这个人得到了试用机会,如果没意外的话,他一定会是下一个项目经理的继任者。

  朋友们你知道吗?不管你技术有多强,你也不可能自由的腾出时间象别人那样研究一下LINUX源码,甚至写一个LINUX样的杰作来表现你的才能。你需要做的就是按照要求写代码,写代码的含义就是都规定好,你按照规定写,你很快就会发现你昨天写的代码,跟今天写的代码有很多类似,等你写过一段时间的代码,你将领略:复制,拷贝,粘贴那样的技术对你来说是何等重要。(如果你没有做过1年以上的真正意义上的开发不要反驳我)。

  如果你幸运的能够听到市场人员的谈话,或是领导们的谈话,你会隐约觉得他们都在把技术人员当作编码的机器来看,你的价值并没有你想象的那么重要。而在你所在的团队内部,你可能正在为一个技术问题的讨论再跟同事搞内耗,因为他不服你,你也不服他,你们都认为自己的对,其实你们两个都对,而争论的目的就是为了在关键场合证明一下自己比对方技术好,比对方强。(在一个项目开发中,没有人愿意长期听别人的,总想换个位置领导别人。)

  三。你更不要认为,如果我技术够好,我就自己创业,自己有创业的资本,因为自己是搞技术的。

  如果你那样认为,真的是大错特错了,你可以做个调查在非技术人群中,没有几个人知道C#与JAVA的,更谈不上来欣赏你的技术是好还是不好。一句话,技术仅仅是一个工具,善于运用这个工具为别人干活的人,却往往不太擅长用这个工具来为自己创业,因为这是两个概念,训练的技能也是完全不同的。

  创业最开始的时候,你的人际关系,你处理人际关系的能力,你对社会潜规则的认识,还有你明白不明白别人的心,你会不会说让人喜欢的话,还有你对自己所提供的服务的策划和推销等等,也许有一万,一百万个值得我们重视的问题,但你会发现技术却很少有可能包含在这一万或一百万之内,如果你创业到了一个快成功的阶段,你会这样告诉自己:我干吗要亲自做技术,我聘一个人不就行了,这时候你才真正会理解技术的作用,和你以前做技术人员的作用。

  [小结]

  基于上面的讨论,我奉劝那些学习技术的朋友,千万不要拿科举考试样的心态去学习技术,对技术的学习几近的痴迷,想掌握所有所有的技术,以让自己成为技术领域的权威和专家,以在必要的时候或是心里不畅快的时候到网上对着菜鸟说自己是前辈。

  技术仅仅是一个工具,是你在人生一个阶段生存的工具,你可以一辈子喜欢他,但最好不要一辈子靠它生存。

  掌握技术的唯一目的就是拿它找工作(如果你不想把技术当作你第二生命的话),就是干活。所以你在学习的时候千万不要去做那些所谓的技术习题或是研究那些帽泡算法,最大数算法了,什么叫干活?

  就是做一个东西让别人用,别人用了,可以提高他们的工作效率,想象吧,你做1万道技术习题有什么用?只会让人觉得酸腐,还是在学习的时候,多培养些自己务实的态度吧,比如研究一下当地市场目前有哪些软件公司用人,自己离他们的要求到底有多远,自己具体应该怎么做才可以达到他们的要求。等你分析完这些,你就会发现,找工作成功,技术的贡献率其实并没有你原来想象的那么高。

  不管你是学习技术为了找工作还是创业,你都要对技术本身有个清醒的认识,在中国不会出现BILL GATES,因为,中国目前还不是十分的尊重技术人才,还仅仅的停留在把软件技术人才当作人才机器来用的尴尬境地。(如果你不理解,一种可能是你目前仅仅从事过技术工作,你的朋友圈子里技术类的朋友占了大多数,一种可能是你还没有工作,但喜欢读比尔。盖茨的传记)

强大的nginx反向代理异步传输模式[转载]

在nginx的反向代理介绍:

http://xok.la/2009/05/nginx_proxy_info.html

中,提到了异步传输模式并提到它可以减少后端连接数和压力,这是为何?

下面就来讲解下传统的代理(apache/squid)的同步传输和nginx的异步传输的差异。

看图:

squid同步传输:浏览器发起请求,而后请求会立刻被转到后台,于是在浏览器和后台之间就建立了一个通道。在请求发起直到请求完成,这条通道都是一直存在的。

nginx异步传输:浏览器发起请求,请求不会立刻转到后台,而是将请求数据(header)先收到nginx上,然后nginx再把这个请求发到后端,后端处理完之后把数据返回到nginx上,nginx将数据流发到浏览器,这点和lighttpd有点不同,lighttpd是将后端数据完全接收后才发送到浏览器。

那么这到底有什么好处呢?

1. 假设用户执行一个上传文件操作,因为用户网速又比较慢,因此需要花半个小时才能把文件传到服务器。squid的同步代理在用户开始上传后就和后台建立了连接,半小时后文件上传结束,由此可见,后台服务器连接保持了半个小时;而nginx异步代理就是先将此文件收到nginx上,因此仅仅是nginx和用户保持了半小时连接,后台服务器在这半小时内没有为这个请求开启连接,半小时后用户上传结束,nginx才将上传内容发到后台,nginx和后台之间的带宽是很充裕的,所以只花了一秒钟就将请求发送到了后台,由此可见,后台服务器连接保持了一秒。同步传输花了后台服务器半个小时,异步传输只花一秒,可见优化程度很大。

2. 在上面这个例子中,假如后台服务器因为种种原因重启了,上传文件就自然中断了,这对用户来说是非常恼火的一件事情,想必各位也有上传文件传到一半被中断的经历。用nginx代理之后,后台服务器的重启对用户上传的影响减少到了极点,而nginx是非常稳定的并不需要常去重启它,即使需要重启,利用kill -HUP就可以做到不间断重启nginx。

3. 异步传输可以令负载均衡器更有保障,为什么这么说呢?在其它的均衡器(lvs/haproxy/apache等)里,每个请求都是只有一次机会的,假如用户发起一个请求,结果该请求分到的后台服务器刚好挂掉了,那么这个请求就失败了;而nginx因为是异步的,所以这个请求可以重新发往下一个后台,下一个后台返回了正常的数据,于是这个请求就能成功了。还是用用户上传文件这个例子,假如不但用了nginx代理,而且用了负载均衡,nginx把上传文件发往其中一台后台,但这台服务器突然重启了,nginx收到错误后,会将这个上传文件发到另一台后台,于是用户就不用再花半小时上传一遍。

4. 假如用户上传一个10GB大小的文件,而后台服务器没有考虑到这个情况,那么后台服务器岂不要崩溃了。用nginx就可以把这些东西都拦在nginx上,通过nginx的上传文件大小限制功能来限制,另外nginx性能非常有保障,就放心的让互联网上那些另类的用户和nginx对抗去吧。

用异步传输会造成问题:

后台服务器有提供上传进度的功能的话,用了nginx代理就无法取得进度,这个需要使用nginx的一个第三方模块来实现。

本文来自: E点废墟(www.xok.la) 详细出处参考:http://xok.la/2009/05/nginx_proxy_mode.html

nginx+PHP+PHP-FPM(FastCGI)在Ubuntu上的安装和配置[转载]

转载请注明原文链接:http://blog.csdn.net/omohe/archive/2009/07/10/4336731.aspx

版本:v1.0 作者:OMO 最后修改时间:2009.07.10

0 之前知识回顾:

1) 目前各种服务器HTTP Server对PHP的支持一共有三种:


a.通过HTTPServer内置的模块来实现,

例如Apache的mod_php5,类似的Apache内置的mod_perl可以对perl支持;


b.通过CGI来实现,这个就好比之前perl的CGI,该种方式的缺点是性能差,因为每次服务器遇到这些脚本都需要重新启动脚本解析器来执行脚本然后将结果返回给服务器;另一方面就是不太安全;该方面几乎很少使用了。


c.最新出现一种叫做FastCGI。所谓FastCGI就是对CGI的改进。它一般采用C/S结构,一般脚本处理器会启动一个或者多个daemon进 程,每次HTTPServer遇到脚本的时候,直接交付给FastCGI的进程来执行,然后将得到的结果(通常为html)返回给浏览器。

>该种方法的问题存在一个小问题是当遇到大流量的频繁请求的话,脚本处理器的daemon进程可能会超负荷从而变得很慢,甚至发生内存泄漏;


>但是比较起Apache的内置模块的方式的优点是由于Server和脚本解析器完全分开各负其责,因此服务器不再臃肿,可以专心地进行静态文件响 应或者将动态脚本解析器的结果返回给用户客户端。所以比较起Apache的内置模块方式,有时候性能要提高很多。有人测试可能会达到 Apache+mod_php的5~10倍。


2) 使用FastCGI方式现在常见的有两种stack:ligthttpd+spawn-fcgi; 另外一种是nginx+PHP-FPM(也可以用spawn-fcgi)


a.如上面所说该两种结构都采用FastCGI对PHP支持,因此HTTPServer完全解放出来,可以更好地进行响应和并发处理。因此lighttpd和nginx都有small, but powerful和efficient的美誉。


b. 该两者还可以分出一个好坏来,spawn-fcgi由于是lighttpd的一部分,因此安装了lighttpd一般就会使用spawn-fcgi对 php支持,但是目前有用户说ligttpd的spwan-fcgi在高并发访问的时候,会出现上面说的内存泄漏甚至自动重启fastcgi。即:PHP 脚本处理器当机,这个时候如果用户访问的话,可能就会出现白页(即PHP不能被解析或者出错)。


另一个:首先nginx不像lighttpd本身含带了fastcgi(spawn-fcgi),因此它完全是轻量级的,必须借助第三方的FastCGI 处理器才可以对PHP进行解析,因此其实这样看来nginx是非常灵活的,它可以和任何第三方提供解析的处理器实现连接从而实现对PHP的解析(在 nginx.conf中很容易设置)。


nginx可以使用spwan-fcgi(需要一同安装lighttpd,但是需要为nginx避开端口,一些较早的blog有这方面安装的教程),但是 由于spawn-fcgi具有上面所述的用户逐渐发现的缺陷,现在慢慢减少使用nginx+spawn-fcgi组合了。


c. 由于spawn-fcgi的缺陷,现在出现了新的第三方(目前还是,听说正在努力不久将来加入到PHP core中)的PHP的FastCGI处理器,叫做PHP-FPM(具体可以google)。它和spawn-fcgi比较起来有如下优点:

由于它是作为PHP的patch补丁来开发的,安装的时候需要和php源码一起编译,也就是说编译到php core中了,因此在性能方面要优秀一些;

同时它在处理高并发方面也优于spawn-fcgi,至少不会自动重启fastcgi处理器。具体采用的算法和设计可以google了解。

因此,如上所说由于nginx的轻量和灵活性,因此目前性能优越,越来越多人逐渐使用这个组合:nginx+PHP/PHP-FPM

3) 因此总结:
目前在HTTPServer这块基本可以看到有三种stack比较流行:


>Apache+mod_php5

>lighttp+spawn-fcgi

>nginx+PHP-FPM


三者后两者性能可能稍优,但是Apache由于有丰富的模块和功能,目前来说仍旧是老大。有人测试nginx+PHP-FPM在高并发情况下可能会达到Apache+mod_php5的5~10倍,现在nginx+PHP-FPM使用的人越来越多。

下面着重介绍stack:
Apache+mod_php5和nginx+PHP-FPM的安装和配置。对于lighttpd+spawn-fcgi,由于我个人没有怎么用过,所以如下不准备介绍,感兴趣可以查阅资料。


1.Apache+mod_php模式:

我们很久一段时间使用经典的Apache+mod_php:


Apache对PHP的支持是通过Apache的模块来支持的。如果曾源代码编译安装php的话,如果希望Apache支持PHP的话,在./configure步骤需要指定–with-apxs2=/usr/local/apache2/bin/apxs 表示告诉编译器通过Apache的mod_php5/apxs来提供对PHP5的解析;

而且在最后一步make install的时候我们会看到将动态链接库libphp5.so(Apache模块)拷贝到apache2的安装目录的modules目录下,并且还需要在httpd.conf配置文件中添加LoadModule语句来动态将libphp5.so 模块加载进来,从而实现Apache对php的支持。


1)由于该模式实在太经典了,因此这里关于安装部分不准备详述了,相对来说比较简单。


2)这里之所以仍旧列出来Apache+mod_php5来讨论,是因为:

看过上一篇文章的话,我们知道nginx一般包括两个用途HTTPServer和Reverse Proxy Server(反向代理服务器)。


我们介绍了如何在前端部署nginx作为reverse proxy server,后端布置多个Apache来实现机群系统server cluster架构的。

因此,实际生产中,我们仍旧能够保留Apache+mod_php5的经典App Server,而仅仅使用nginx来当做前端的reverse proxy server来实现代理和负载均衡。 因此,建议nginx(1个或者多个)+多个apache的架构继续使用下去。

2. nginx+PHP-FPM:


1)通过上面的分析,尽管我们可以仍旧保留Apache+mod_php来处理PHP,所有的静态文件和负载均衡由顶在前端的nginx来完成,但是由于nginx和PHP-FPM各自的优越性,使得nginx+PHP-FPM的组合的性能已经很超越Apache+mod_php。

因此很多人渐渐放弃了Apache+mod_php的组合了,而完全使用nginx+PHP-FPM来实现对PHP的处理。

因此现在出现了新的名词叫做LEMP(Linux+EngineX(nginx)+MySQL+PHP),慢慢要代替经典很多年的LAMP

2)甚至出现一种新的server cluster:

其中看不到Apache的影子了,全部由nginx来搞定。nginx轻量型,高性能,高灵活性使得它完全能够应付过来。

由于PHP-FPM是C/S结构,因此我们前端保留nginx来做负载均衡;对于之前后端的各个Apache服务器,我们不需要安装Apache了,对PHP重新编译安装使其以PHP-FPM方式支持FastCGI;

然后在nginx中配置将客户端的php请求分别pass到后台的多个运行的PHP-FPM,后者进行处理然后返回给nginx,然后显示给用户。整个过程可以完全不要Apache。

3) 下面我们具体来介绍如何来安装和简单配置

nginx+PHP+PHP-FPM+MySQL.

3. 安装和配置nginx+PHP+PHP-FPM+MySQL:

1) 安装MySQL:

这里之所以首先要安装MySQL,是因为之后编译安装PHP的时候,可以直接指定对MySQL的支持。

我们知道PHP对MySQL的支持是通过PHP扩展实现的。

可以源代码安装,不过我使用的Ubuntu,直接使用了其发布的二进制包安装了:


$sudo apt-get install mysql-server


安装的时候需要提示设置root密码;

之后使用

$netstat -tap |grep mysql

看看是否正常运行;

2) 安装PHP和PHP-FPM:

我们之前介绍了PHP-FPM是对PHP的补丁,因此需要和PHP一起编译安装。我这里使用的PHP 5.2.10
a. 下载安装包:

php.net 下载:php-5.2.10.tar.gz

从PHP-FPM官网下载:php-5.2.10-fpm-0.5.13.diff.gz

注意两个版本尽量相同(不相同可能出错,我自己没试过)。

b. 解压缩打补丁

$tar xzvf php-5.2.10.tar.gz

$gzip -cd php-5.2.10-fpm-0.5.13.diff.gz | patch -d php-5.2.10 -p1

倘若中间需要哪个命令shell不认识,可以使用apt-get安装,或者google找答案。

c. 配置编译环境:

在安装之前可能需要安装几个依赖包:

sudo apt-get install libxml2-dev

sudo apt-get install libmysqlclient15-dev

不安装也可以,之后./configure失败的话,根据出错信息,再慢慢搜索安装依赖包也可以,重要的是记下关键步骤,因为每个人的系统装没装啥都不一定。


$cd php-5.2.10

$./configure –prefix=/usr/local/php –enable-fastcgi –enable-fpm –with-mysql –with-mysqli –with-openssl


这里我们配置php安装到/usr/local/php,如果不配置默认安装到/usr/local下,这样我觉得不太好,这样make install各个文件就会被拷贝得分散开来(分散在local的各个目录下),如果我们之后想卸载干净而且无法使用make uninstall的话,还不方便。安装到/usr/local/php下,如果我们想删除php,直接删除该目录即可。


–enable-fastcgi和–enable-fpm分别设置支持fastcgi和PHP-FPM的选项;

–with-mysql和–with-mysqli相当于编译php的MySQL扩展到php内核中,这样我们可以在php中使用mysql和mysqli库的函数访问mysql;

注意:这里需要注意的一个问题是,不要设置–with-apxs2=/usr/local/apache2/bin/apxs,我们知道它是告诉PHP编译成模块方式让Apache来支持。如果设置了该选项的话,编译安装之后,Apache会无法启动,报错信息:

/usr/lib/apache2/modules/libphp5.so: undefined symbol: -fpm-event-base-free


因此这里也就意味着,我们编译PHP以PHP-FPM的方式来支持FastCGI的话,基本上就不能和Apache一起使用了,也就是说我们决定使用nginx+PHP+PHP-FPM的话,这里的PHP就没法和Apache一起使用了。

如果非还想要使用,那可以另外编译安装一个PHP,编译的时候在./configure的时候设置–with-apxs2=/usr/local/apache2/bin/apxs,而且不要打PHP-FPM的补丁。


另外,如果该步骤出现错误,通常是缺乏依赖包,请按照错误信息安装依赖包即可。

d. 编译:

$make all

注意这里尽量使用make all,而不要仅仅是make

e. 安装:

$make install

f. 拷贝php.ini文件:

$sudo cp php.ini-dist /usr/local/php/lib/php.ini

将php.ini文件拷贝到如上位置;


如果安装都成功的话,我们的以PHP-FPM方式支持FastCGI的PHP就被安装到了/usr/local/php目录下了。



3) 配置PHP和PHP-FPM:



首先可用到/usr/local/php/bin目录下执行一下php -v,看PHP是否work。

a. 配置php.ini:

位于/usr/local/php/lib下

这里一般没有严格需要配置什么,可以按照自己要求进行配置。

b. 配置PHP-FPM这个PHP解析器:

我们上面说过PHP-FPM解析器是C/S结构,它的配置文件位于/usr/local/php/etc/php-fpm.conf。

$cd /usr/local/php/etc

$sudo vi php-fpm.conf

该文件是一个xml文件,只需要修改:

    Unix user of processes

    <value name=”user”>www-data</value>

    Unix group of processes

    <value name=”group”>www-data</value>

注意去掉两边的注释<!–和–>,否则之后php-fpm启动不了;

c. 配置完之后,就可以启动PHP-FPM:

$/usr/local/php/sbin/php-fpm start


我们上面介绍了FastCGI模式区别于CGI模式,它需要一个daemon进程一直运行在后台对php请求做出解析,这里的PHP-FPM就是这个 daemon进程,在配置文件php-fpm.conf中可以设置它侦听的IP和端口,默认为127.0.0.1:9000。也就是它侦听9000端口的 数据请求,然后会将其进行解析然后返回给请求端。


这个和我们之前介绍的FastCGI的思想相吻合。HTTPServer服务器和FastCGI模式的PHP解析器相分离(这里就是PHP- FPM),HTTPServer遇到PHP请求的时候,就会传递给PHP-FPM,后者解析并返回。实现HTTPServer和PHP解析器完全分离,缓 解了Server的负担,Server有更多资源来处理并发请求。其实这也是nginx优于apache的一个原因。

d. 检查php-fpm是否运行正常:

$ps ax|grep fpm

4)安装和配置nginx:


之前文章我们介绍了nginx的安装和使用nginx作为reverser server的进行负载均衡配置了,感兴趣的可以参看。

a. nginx的安装很简单:

从官网下载安装包:nginx-0.7.61.tar.gz


$tar xzvf nginx-0.7.61.tar.gz

$cd nginx-0.7.61

$./configure

默认安装路径为/usr/local/nginx,如果不放心自己可以使用–prefix=/usr/local/nginx配置一下

$make

$sudo make install

b. 思想:


我们之前的文章介绍了nginx的使用非常灵活,有人比喻其为server领域的瑞士军刀,其实确实是:性能好,而且使用方法多。

各种使用方法都是通过配置文件来实现,因此掌握nginx的使用,除了掌握各种架构的思想之外,还要掌握如何对nginx.conf进行相应的配置。


我们这里着重对nginx.conf配置,实现通过php-fpm的fastcgi对php的处理。其实nginx本身并不会对PHP进行解析,这个要区别于Apache (Apache通过内置模块实现了对PHP的解析),nginx其实是将对php页面的请求交给了后台在127.0.0.1:9000 侦听的php-fpm,后者具有解析php的功能。

因此如果把php-fpm看做一个app server的话,其实nginx这里的作用还是一个反向代理服务器。和我们之前介绍的使用location配置将php请求proxypass给后台侦听的Apache服务器,在思想上几乎一样。



c. 配置位于/usr/local/nginx/conf目录下的nginx.conf和fastcgi.params


>nginx.conf配置:

$cd /usr/local/nginx/conf

$sudo vi nginx.conf
从上往下对默认的配置文件进行修改:

    1. user www-data; 这里需要和php-fpm中定义的用户一致;


    2. worker_processes 2; 可以设置更多,这个选项和之后的worker_connections 1024;

        一起来定义每个进程并发相应的最大连接数,因此这里可以达到2*1024的并发请求;


    3. 在server {

        listen       8080;

        如果自己已经安装了Apache并且占用了80端口,这里修改为别的8080,负责启动不了;


    4. 如上面所述,我们其实设置nginx将PHP请求转发给后台的php-fpm server即可,后者有解析php功能。

    其实还是充当反向代理的作用;

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

        #

        location ~ .php$ {

            root           html;

            fastcgi_pass   127.0.0.1:9000 ;

            fastcgi_index index.php;

            fastcgi_param SCRIPT_FILENAME html/$fastcgi_script_name;

            include        fastcgi_params;

        }

    注意fastcgi_param SCRIPT_FILENAME html/$fastcgi_script_name;

    之后需要设置为放置php脚本的位置 ,这里我们举例在/usr/local/nginx/html目录下创建一个phpinfo.php文件

    包含代码<?php phpinfo(); ?>


$sudo vi fastcgi.params


配置fastcgi参数文件,具体可以参考http://wiki.nginx.org/NginxFcgiExample

基本上可以使用默认的该文件,不需要修改。

5) 运行nginx:

$sudo /usr/local/nginx/sbin/nginx


然后在浏览器中查看http://localhost


> 默认会显示/usr/local/nginx/html目录下的index.html页面: Welcome to Nginx!


>然后查看http://localhost/phpinfo.php ,相当于访问html目录下的phpinfo.php页面,


如果正常,会显示phpinfo的页面。其中可以看到Server API一项包含:CGI/FastCGI,表示FastCGI方式运行。


如果以上步骤出现错误,通常都是因为nginx.conf配置不正确,可以google寻找解决方法,一般都可以找得到(英文)。然后重新修改nginx.conf文件。


之后需要重启nginx,可以执行:


$sudo kill `cat /usr/local/nginx/logs/nginx.pid` 表示关闭nginx

$sudo /usr/local/nginx/sbin/nginx 再次启动nginx


6)设置开机自启动:



在Ubuntu下,如果希望添加到/etc/init.d实现开机重启的话,可以Google寻找nginx和php-fpm的init script(php-fpm本身就是init script不需要寻找了),然后拷贝到/etc/init.d目录下。

简单的方法,设置rc.local:

$sudo vi /etc/rc.local


在exit 0之前添加:

/usr/local/php/sbin/php-fpm start

/usr/local/nginx/sbin/nginx


这样开机自动启动nginx和php-fpm。

7) 使用nginx和php-fpm实现server cluster:

和nginx对多台app server代理实现负载均衡类似,我们可以实现nginx对多台php-fpm实现负载均衡:


T
o configure Nginx to load balance multiple FastCgi servers use this type of configuration:


    upstream fastcgiServers {

        server 127.0.0.1:9000 ;

        server 127.0.0.1:9001 ;

        server 198.192.0.1:9000 ;

        server 198.192.0.2:9000 ;

        server 198.192.0.3:9000 ;

    }


    location ~ .php$ {

    fastcgi_pass fastcgiServers;

    fastcgi_index stream.app;

    fastcgi_param SCRIPT_FILENAME /var/www/htdocs$fastcgi_script_name;

    include /etc/nginx/fastcgi.conf;

    }


   
4. 总结:

三种常用模式:
Apache+mod_php5;

lightppd+spawn-fcgi;

nginx+PHP-FPM


我们可以使用到生产环境中的:


0) 如果不是server cluster的话:

可以使用以上任一种,不过有各种测试表明nginx+PHP-FPM性能优越,但是Apache+mod_php5很经典模块多,比如对.htaccess等的支持。


如果构建server cluster的话:
1) nginx作为反向代理服务器,后台多台Apache+mod_php5。

nginx处理静态文件,及对php并发请求对后台多台app server的负载均衡;

2) nginx作为反向代理器,后台多台PHP-FPM

nginx处理静态文件及将php并发请求发送到后台php-fpm来解析;



另外:关于如何更好使用nginx这个轻量级高性能的瑞士军刀,主要是如何配置nginx.conf,更多参看:
http://wiki.nginx.org/Main

另外,关于PHP支持的各种缓存等这里没有安装,感兴趣可以另行安装。



更多参考资料:
http://www.php.net/manual/en/install.unix.apache2.php
http://www.softwareprojects.com/resources/programming/t-installing-nginx-web-server-w-php-and-ssl-1474.html
http://php-fpm.org/Main_Page
http://www.softwareprojects.com/resources/programming/t-how-to-install-php-fpm-spawn-fcgi-replacement-1602.html
http://wiki.nginx.org/NginxFcgiExample

有可能以后会将PHP-FPM直接添加到PHP内核中一起进行发布

Will there be a PHP-FPM is included in the official PHP?
http://php-fpm.org/FAQ#Will_there_be_a_PHP-FPM_is_included_in_the_official_PHP.3F

http://bookmarks.honewatson.com/2008/04/24/multiple-fastcgi-php-servers-nginx-load-balancing/
http://www.wikivs.com/wiki/Lighttpd_vs_nginx
http://en.wikipedia.org/wiki/Reverse_proxy
http://sameerparwani.com/posts/nginx-as-a-front-end-to-apache/
http://blog.kovyrin.net/2006/04/17/typical-nginx-configurations/
http://www.yawn.it/2008/04/30/nginx-php-php-fpm-on-debian-etch-40/
http://howtoforge.org/installing-nginx-with-php5-and-mysql-support-on-ubuntu-8.10

cacti监控lighttpd

激活模块 mod_status 而且能够访问http://localhost/server-status

插件下载 http://forums.cacti.net/about19676.html

# tar xvfz lighttpd_stats_1.0.tar.gz

# cd lighttpd_stats_1.0

# cp ss_lighttpd_stats.php /home/cacti/scripts/

# /usr/bin/php ss_lighttpd_stats.php IP地址

返回如下信息

lighttpd_total_hits:11613223 lighttpd_total_kbytes:22055059 lighttpd_uptime:172175 lighttpd_busy_servers:564

cacti后台导入模板文件”cacti_host_template_webserver_lighttpd.xml”

注意权限问题,使cacti能调用php脚本,否则lighttpd无流量显示。

chown    cacti:cacti     ss_lighttpd_stats.php

chmod   644   ss_lighttpd_stats.php

fetion机器人实现DNS解析提醒

今天发现客户的邮件服务器IP被gmail列入黑名单,只好更换IP,客户那边更改DNS解析,我们这边帮着更改防火墙到内网的映射,经理让我nslookup看着,如果IP换到新的IP上了,就把防火墙到内网的映射变一下,我总不能一直nslookup着吧。。想起来前几天搞的fetion机器人报警,可以用短信提醒达到我的要求,当ip变了的话就用fetion提醒到我的手机上,shell代码如下:

#!/bin/bash

ip=`nslookup mail.the-smart-class.cn|grep Address|grep -v ’53’|awk -F: ‘{print

$2}’|sed ‘s/ //’`

while [ 1==1 ]

do

        ip=`nslookup mail.the-smart-class.cn|grep Address|grep -v ’53’|awk -F:

‘{print $2}’|sed ‘s/ //’`

        if [ $ip != “210.73.89.103” ]

        then

                (echo “ipchange” >/tmp/test;/opt/sendsms.sh 1387600XXXX)

        fi

        sleep 10

done



/opt/sendsms.sh代码:

#!/bin/bash

fetion –mobile=13876005014 –pwd=XXXXXX –msg-type=1 –file-gb=/tmp/test –to=$1 &

半个小时后成功收到ipchange的短信提醒。yeah~~~



2010.10.28

由于公司手搬家几天没能上网,今天补上这篇文章。。