Apache and PHP FastCGI

虽然Nginx加上php有相当优秀的表现,但是有时候,基于业务需要,不得不用ApachephpApache下有两种运行方式,一种是编译成Apache的模块,一种是以cgi方式运行,cgi则可细分为fastcgi,以模块方式运行,无论Apache还是php出现安全漏洞,需要升级软件版本,都需要同时重新编译二者,这是一个很没有统筹科学的态度,以普通cgi方式运行,配置简单,但比之于fastcgi效率不高,每个脚本执行都需要reload script和php.ini,基本上,这个意思就是说,脚本缓存是无效的,所以,我们需要fastcgi。

需要说明的是,在当前php5.3.6版本中,php-fpm已经包含在源代码中,只需要在编译的时候加入相应参数: –enable-fpm,安装完成后,拷贝/src/php-5.3.6/sapi/fpm/init.d.php-fpm 到/usr/local/bin/,然后chmod +x 就可以了

Usage: /usr/local/bin/init.d.php-fpm {start|stop|force-quit|restart|reload}

当然,你知道配置文件默认放在/usr/local/etc/php-fpm.conf,修修改改就可以start了!

php的配置很简单,但Apache的mod_fastcgi是需要单独下载编译的:
1,下载mod_fastcgi:http://www.fastcgi.com/dist/mod_fastcgi-current.tar.gz
解压缩了来安装到Apache里面去,例如,我们把Apache安装在了/usr/local/httpd:

tar zxf mod_fastcgi-current.tar.gz
cd mod_fastcgi-2.4.6
cp Makefile.AP2 Makefile
make install top_dir=/usr/local/httpd

2,在配置文件中启用mod_fastcgi,例如我们可以包含一个配置文件在extra目录中,起个名字叫httpd-fastcgi.conf,这个例子呢,我是把php-fpm的socket放在/tmp目录下的:

LoadModule fastcgi_module modules/mod_fastcgi.so
ScriptAlias /php-bin /usr/local/bin
AddHandler application/x-httpd-php5 php
Action application/x-httpd-php5 /php-bin/php-cgi
FastCgiExternalServer /usr/local/bin/php-cgi -socket /tmp/php.sock

当然,基于安全考虑,可以将配置文件单独放在不同的虚拟主机中。

为什么Linux到现在也不能双击安装软件

看最近互联网上的评论,有一位仁兄矢志不渝的重复“世界上最差的系统就是linux,双击不能安装软件”,而对于该评论的观点众多,但是真正正确的确极少。综合来看,广大网友尤其是喜欢评论的盆友对Linux理解的还比较少,而且很多都是跟Windows做比较(当然这里我承认高手也大有人在),所以我想在这里有必要说一下为什么Linux到现在也不能做到双击安装软件。

首先要说一下,很多Linux的发行版例如Ubuntu或者CentOS、Fedora等,已经早就可以双击安装自己发行版的安装包了,例如deb、rpm等。
那么为什么现在大部分软件还是需要下载一个tar.gz然后./configure/make/make install繁琐的命令安装呢?

其实,Linux下跟Windows的软件发布有一个最大的不同就是Linux下大部分软件都是开源的,只提供源码下载,不提供编译好的二进制下载。所以,上面的三个命令实际上是编译一个软件,然后拷贝到系统对应目录,准确来说不是安装。

但是为什么非要这三个命令,而不是双击之后自动执行上述三个命令呢? Continue reading 为什么Linux到现在也不能双击安装软件

如何部署WordPress到Amazon云主机

在过去的10年,架设一个大型网站是一个非常艰巨的任务,那可不是非专业人士可以完成的。现在好了,亚马逊开放了他们的服务器架构,一切都改变了。 计算机硬件被移动到了云端,普通站长和开发人员都可以利用亚马逊的硬件和网络资源来运行自己的应用。在本文中,我们将把WordPress博客安装到云端。


介绍

大多数博客和小型企业站点都托管在共享主机上面,通过固定的月租费用来获得预装软件和特定功能的使用。大多数情况下,共享主机是一个完美的解决方案,但是将你的博客安装在Amazon云端有很多好处是值得我们考虑的:

  • 更容易升级更新. 在Amazon云端创建一个新服务器可以在数分钟内完成。使用该服务,你的网站将有能力应付突如其来的流量爆发,比如你的博客文章被推荐到了Digg或者Reddit的首页,你可以添加更多服务器并平衡负载。
  • 经济有效的大规模服务能力. 如果你的站点吸引了大量的用户,并且最终超过了主机的正常伺服能力,Amazon Web Services 将给你一个经济有效的办法来设计一个符合你的需求的网站服务架构,而你并不需要去雇佣一个完整的网络运作团队来安装和管理网络。这也是许多 Facebook开发人员选择Amazon云服务器的原因。
  • 完善的安装与设置. 在运行WordPress时,这一点可能不是太重要,但如果你想使用PHP和MySQL之外的一些东西来建设你的下一个项目,则没有必要请求主机公司的帮助,你可以就像在你自己的服务器上一样安装你所需要的软件。

是否把WordPress站点放到亚马逊云端由你的博客流量决定,并且你可以根据你的实际需求来决定服务器配置。通过下面的指南,你可以了解到怎样迅速的在Amazon Cloud上设置和运行服务器。 Continue reading 如何部署WordPress到Amazon云主机

欧美虚拟主机的默认时区更改

彻底郁闷了,机关算尽,我却一直忘记了可以在php.ini里面设置时区,导致花费了额外的几百块去买VPS,好在我英明神武的选择了月付,浪费的不多,总的来说,于做网站而言,VPS不是一个最好的选择。

一行代码,浪费几百块,这是多么惨痛的血的教训啊!

date.timezone = Asia/Taipei

 

尝试了一把nginx和php-fastcgi

尝试了一把nginx和php-fastcgi,感觉速度好像是快了点,也许是错觉,不过以nginx四百多K的体积能做到这样我觉得相当不错,简要写一下配置。首先当然是安装nginx,不管你是编译还是二进制,这个没有太多可以说的,差不多,然后呢是编译php,在apache下面安装习惯了,一直没把–with-apxs去掉,我就说怎么一直不给生成那个php-cgi文件呢,搞了半天是不能同时使用的,靠,configure的时候又不提示一下,无效开关应该要提示才对的嘛,接下来是修改一下php.ini,修改说明如下:

; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP’s
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix it’s paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
cgi.fix_pathinfo=1

倒数第二步呢,当然就是启动php-cgi server,使用命令行启动:php-cgi -b 127.0.0.1:9000 使得其监听在本地9000端口,最后一步就是修改nginx配置了,MMP的配置文件里面居然还有语法,所以不流行撒,看apache的配置都形成了一个规范,配置文件是这样的,其它部分我跳过了,不用修改,只写下修改的虚拟主机部分,我们以bbs.hnair.com为例:

###############bbs.hnair.com######哈利路亚#########
server {
listen 80;
server_name bbs.hnair.com;
location / {
index index.html index.htm index.php;
root /usr/local/www/bbs.hnair.com;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www/bbs.hnair.com/$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}
}

当然了,一些细小的配置,例如gzip压缩,rewrite,用户验证等等,我再研究下了来,可是想了想,按照web应用的细分,这种结构是为了极大负载设计,那么就不应该有rewrite,用户验证这些东西,simple is the best~

NSIS 脚本浅析

一直以来,B/S程序由于其结构的原因不能像安装WINDOWS程序那样使用setup来进行安装,一般都是由开发人员配置好WEB运行环境,再导入数据库(或者由WEB的安装程序完成此部分),这样一般来说够用了,再如果是不懂开发的人配置这些环境就麻烦了,如果能像安装WINDDOWS程序那样,一路回车法就能安装成功,那就更帅了。

前几天由于公司的项目需要,我小小的的研究了一下NSIS,为什么选它呢?因为它是使用脚本来定制安装程序的,非常灵活,就是要学习一下它的脚本语言,多看一些例子就会用了。

先说一下制作的原理,系统的环境是apache1.3, php5.1.4,mysql5。这几个其实都是不需要安装的,在window2000/xp下,直接配置成服务,并启动服务就行了。所以安装过程应该是分为

1.复制文件到指定目录.
2.配置apache和mysql.
3.把apache和mysql安装成服务并启动.

首先下载并安装NSIS,安装后可以到它的example目录下看一下有很多例子程序。右键点示例脚本选择Compile NSIS Script进行编译,在该目录下会生成一个.exe文件,就是生成的安装程序文件。
NSIS的脚本由一些类似PHP和汇编的语法指定组成,还可以定义函数,宏。每个脚本至少有一个Section,名字为Uninstall的以un.开头的Section被认为是卸载时使用的指令集。

下面是安装程序的全部脚本。
SetCompressor lzma
!include “MUI.nsh”

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP “E:\logo.bmp”
!define MUI_ABORTWARNING
!define APP_NAME “蓝桥OfficeSystem2.0”

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE “SimpChinese”

Name ${APP_NAME}
Icon “${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico”
UninstallIcon “${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico”
DirText “安装程序将安装 $(^Name) 在下列文件夹。$\r$\n$\r$\n要安装在不同文件夹,单击 [浏览] 并选择其他文件夹。”
InstallDir “C:\lqserver”
OutFile “setup.exe”

Section “setup”
SetOutPath $INSTDIR
File /r Apache
File /r mysql5
File /r officesystem2
File /r php-5.1.4
File /r config.js
File /r sc.exe
Call config
WriteUninstaller “uninstall.exe”
CreateDirectory “$INSTDIR\temp”
CreateDirectory “$SMPROGRAMS\${APP_NAME}”
CreateShortCut “$SMPROGRAMS\${APP_NAME}\启动${APP_NAME}.lnk” “http://localhost/”
CreateShortCut “$SMPROGRAMS\${APP_NAME}\卸载${APP_NAME}.lnk” “$INSTDIR\uninstall.exe”
SectionEnd

Section “Uninstall”
ExecWait “$INSTDIR\sc stop apache”
ExecWait “$INSTDIR\Apache\apache -k uninstall”
ExecWait “$INSTDIR\sc stop mysql”
ExecWait “$INSTDIR\mysql5\bin\mysqld-nt –remove mysql”
RMDir /r $INSTDIR
RMDir /r “$SMPROGRAMS\${APP_NAME}”
SectionEnd

Function config
ExecWait “cscript $INSTDIR\config.js $INSTDIR”
#先停止并禁用IIS服务
ExecWait “$INSTDIR\sc stop w3svc”
ExecWait “$INSTDIR\sc config w3svc start= disabled”
#安装apache和mysql服务
ExecWait “$INSTDIR\Apache\apache -k install”
ExecWait “$INSTDIR\sc start apache”
ExecWait “$INSTDIR\mysql5\bin\mysqld-nt –install mysql –defaults-file=$INSTDIR\mysql5\my.ini”
ExecWait “$INSTDIR\sc start mysql”
FunctionEnd

一些指令的解释
SetCompressor lzma 指定压缩方式
!define APP_NAME “蓝桥OfficeSystem2.0” 定义应用程序的名字以便后面使用。
!insertmacro MUI_PAGE_*
这些是安装程序的所有页面,包括欢迎界面,选择目录,安装文件,完成页面。

Name ${APP_NAME} 指定应用程序的名字,语法和PHP有些类似
Icon “${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico”
UninstallIcon “${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico”
指定安装程序和卸载程序的图标,$NSISDIR是NSIS的安装目录,不用修改。
InstallDir “C:\lqserver” 默认安装目录
OutFile “setup.exe” 输出的安装程序文件名称
下面的一个section就是主要的安装和配置指令

File /r 解压一个文件夹及下面所有的文件和子目录到安装位置

Call config 调用config函数,这个函数主要是修改配置文件的作用。
WriteUninstaller “uninstall.exe” 生成卸载程序
ExecWait 是执行程序并等待返回,这样可以防止外部程序的运行而影响到NSIS脚本的执行。比如在apache服务的停止的时候,如果服务没停止完,就进行删除文件的操作就会出错。

在修改apache和mysql配置文件的时候我采用了js脚本来完成。因为用NSIS来完成这个功能太吃力了,用JS脚本进行字符串替换还是比较简单的,主要是把一些目录修改为安装目录就可以了。

还有这里使用了sc.exe,这个程序是命令行下管理windows服务的程序,不是系统自带的,可以去microsoft下载,使用它先禁用iis服务,防止和apache发生冲突。另外使用sc启动和停止服务要比用net命令快的多。

重拾FreeBSD

我早料到有这么一天,阿金要我配置unix服务环境,重拾FreeBSD,我已经落后了,小红魔它已经升级到了6.0,5.0的终结版本是5.4,java不适用BSD平台已经成为过去,freebsd甚至有一个java project:http://www.freebsd.org/java/,可是我疑惑了,用6.0还是5.4呢?
————————————
This is the official port of Sun’s Java™ Development Kit for FreeBSD. No known significant bugs exist at this time, but there are no guarantees of usability. However, many commercial companies rely on this port, so it should be safe to use.
————————————

之所以使用freebsd的原因:因为它是最正统的unix,不含有那些什么特有的linux命令,aix命令,solaris命 令等等…..就像吃肉吃多了吃咸菜一样爽口的感觉,我是很不愿意在日记里面提到亦彩的,所谓出其不意,攻其不备,亦彩的服务器架构于 freebsd5.3+apache2+php4+mysql4.1+icecast2+proftpd1.2+openssh4,比较难配置的就是 icecast,其他的还是比较简单,这次的任务有了新内容,要配置oracle10,java,tomcat,有挑战性,我喜欢!不过就是不知道我能不 能忍受256M内存下的oracle运行速度,oracle的标准配置是4G运行内存,看起来只有曙光的机器能担当这个重任……

IPB rewrite rule

IPB rewrite rule in class_display.php

//—————–rewrite

function _replace_mod_rewrite(&$rewrite_srting)
{
global $ibforums;
//return $rewrite_srting;
$urlin = array(
“‘index.php\?act=idx’”,
“‘index.php\?showforum=([0-9]*)’”,
“‘index.php\?showtopic=([0-9]*)’”,
“‘index.php\?showuser=([0-9]*)’”,
“‘index.php\?showtopic=([0-9]*)&view=getnewpost’”,
“‘index.php\?showtopic=([0-9]*)\&st=([0-9]*)’”,

);
$urlout = array(
“”,
“forum\\1.html”,
“topic\\1.html”,
“user\\1.html”,
“latest\\1.html”,
“st/\\1/”,

);
$rewrite_srting = preg_replace($urlin, $urlout, $rewrite_srting);
return $rewrite_srting;
}

//——————-rewrite end