FreeBSD快速安装PHP+eaccelerator,nginx,spwn-fcgin

Posted in 笔记 | No Comments »

FreeBSD使用nginx+PHP可以达到非常优秀的访问速度。

以下介绍如何快速安装一个可以使用的PHP服务器。

 

请先确认: /usr/ports/目录存在,如果不存在,请先安装ports。

1.安装PHP

cd /usr/ports/lang/php5

make install clean

 

2.安装PHP扩展

cd /usr/ports/lang/php5-extensions
make config
make install clean

 

3.安装MySQL支持(如果在安装PHP的时候选择了MySQL支持,这里可以不用设置)

cd /usr/ports/databases/php5-mysql
make install clean

 

4.安装lighttpd(安装lighttpd是为了取得他的spawn-fcgi程序,所以在安装的时候务必要选上)

cd /usr/ports/www/lighttpd
make install clean

 

5.删除lighttpd保留spwn-fcgin程序

cp /usr/local/bin/spawn-fcgi /tmp/
/usr/sbin/pkg_delete -v lighttpd-1.4.26
cp /tmp/spawn-fcgi /usr/local/bin/spawn-fcgi

 

6.制作PHP 配置文件

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

 

7.编写fastcgi的启动脚本

ee /usr/local/etc/rc.d/php-fcgi
PROVIDES=php-cgi
LIGHTTPD_FCGI=/usr/local/bin/spawn-fcgi
SERVER_IP=127.0.0.1
SERVER_PORT=9000
SERVER_USER=www
SERVER_GROUP=www
PHP_CGI=/usr/local/bin/php-cgi
PGREP=/bin/pgrep
KILLALL=/usr/bin/killall
### No editing below ####
cmd=$1

pcgi_start(){
      echo "Starting $PROVIDES…"
     $LIGHTTPD_FCGI -a $SERVER_IP -p $SERVER_PORT -u $SERVER_USER -g $SERVER_GROUP -C 100 -f $PHP_CGI
}

pcgi_stop(){
    echo "Killing $PROVIDES…"
    $KILLALL $PROVIDES
}

pcgi_restart(){
    pcgi_stop
    pcgi_start
}

pcgi_status(){
        $PGREP $PROVIDES > /dev/null
    [ $? -eq 0  ] && echo "$PROVIDES running" || echo "$PROVIDES NOT running"

}

pcgi_help(){
      echo "Usage: $0 {start|stop|restart|status}"
}

case ${cmd} in
[Ss][Tt][Aa][Rr][Tt]) pcgi_start;;
[Ss][Tt][Oo][Pp]) pcgi_stop;;
[Rr][Ee][Ss][Tt][Aa][Rr][Tt]) pcgi_restart;;
[Ss][Tt][Aa][Tt][Uu][Ss]) pcgi_status ;;
*)      pcgi_help ;;
esac

 

8.启动脚本的执行权限

chmod +x /usr/local/etc/rc.d/php-fcgi 

 

9.安装nginx

cd /usr/ports/www/nginx
make install clean

 

10.允许自动启动nginx

ee /etc/rc.conf
增加 :nginx_enable="YES"

保存

 

11.允许自动启动php-fcgi

ee /etc/rc.local

增加:/usr/local/etc/rc.d/php-fcgi   start

保存

 

12.安装 eaccelerator加速

cd /usr/ports/www/eaccelerator

make install clean

 

13.建立eaccelerator的临时目录

mkdir /tmp/eaccelerator

chown www /tmp/eaccelerator

chmod 0700 /tmp/eaccelerator

 

 

14.PHP中启用eaccelerator

ee /usr/local/etc/php/extensions.ini

紧挨
extension=session.so

下面加上
extension=eaccelerator.so

即可

保存

 

15.配置eaccelerator

ee /usr/local/etc/php.ini

增加:
[eaccelerator]
eaccelerator.shm_size="64"
eaccelerator.shm_prune_period="60"
eaccelerator.shm_ttl="1800"

保存

 

16.建立网站目录

mkdir /www

 

17.配置nginx

ee /usr/local/etc/nginx/nginx.conf

开头的user ……改为:user  www www ; 并且去掉前面的#注释

server配置段中

增加PHP支持

location ~ \.php$ {
            root           html;#此处不要修改
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME /www$fastcgi_script_name;
            include        fastcgi_params;
        }

修改

server
  {
    listen       80;
    server_name  www.iwantso.com;
    index index.html index.htm index.php;
    root  /www;#此处为你的网站根目录。

 

18.做完以上修改后,就可以重启服务器测试了。

 

19.上传PHP文件至/www目录下

 

20.如果PHP无法执行,很可能是eaccelerator问题,可以试着执行以下代码

cd /usr/ports/www/eaccelerator
make deistall
make reinstall

重新安装,一般就可以了。

FreeBSD快速安装步骤

Posted in 笔记 | 2 Comments »

用FreeBSD安装光盘启动,出现以下画面:

 1

选择1.Boot FreeBSD [default]
接下来便进入国家选择画面:

2

选择45 China 按回车进入键盘布局选择画面:

3

这里我们选择默认:USA ISO
按回车继续
接下来进入安装方式画面:
4
这里我们选择Express Begin a quick installation(for experts)
接下来进入 磁盘分割画面:
5
这里选A(使用整个磁盘)

按下A以后进入这个画面:
6
按Q结束,进入如下画面:
7
选择Standard Install a standard MBR (no boot manager)
进入如下画面:
8
按A自动分区
然后按Q进入如下画面:
9
我们选择Custom
进入安装包选择画面:
10
我们选择:base,kernels,和ports
11
Kernels 就一个可选项选之即可
使用tab键移动光标至OK按下回车,
返回至安装包选择画面,继续使用tab键移动光标至OK按下回车
进入如下画面:
12
这个画面是选择安装介质,我们使用的是光盘安装,就选择第一个 CD/DVD即可
按下回车进入如下画面:
13
不管他回车,继续

进入安装画面:

17 

耐心等候,很快就会完成出现如下画面:
18
按默认选择NO直接回车
再次返回安装画面:
19

由于我们已经安装完成,Tab移至Exit Install 按回车
出现确认对话框,这选择Yes
再次出现提示,要求移除光盘,我们取出光盘,按回车

至此FreeBSD按装完成
耐心等待系统重新启动
出现登录画面:
20
打入:root按回车进入
出现如下画面:
21
表示已经成功进入FreeBSD系统了

Google退出中国了

Posted in 日记 | No Comments »

2010年3月23日凌晨,全球最大搜索引擎公司Google,将中国版的Google.cn和g.cn转向到了google.com.hk。从此中国大陆用户访问Google将直接转向香港服务器。

中国真的离不开世界吗?世界真的离不开中国吗?

Akismet是个好插件

Posted in 程序开发 | 1 Comment »

就算是我这个小网站,每天也会遭受垃圾留言的困扰,去年12月份开始我开始试用这个叫做Akismet的插件,使用几个月来发现效果非常之好。
这个是他的拦击成果:
可以看到Ham detected就是判断错误的只有2个,误判率还是非常低的。
Akismet_pic1
下面是具体的拦截结果:
Akismet_pic2
这个插件本来是个标准的Wordpress插件,但是Akismet是个开放API 的平台,通过API可以开发出各个平台版本的拦截工具。现在问世的好像就有z-Blog,discuz……常见web平台。非常值得一用。

酝酿……

Posted in 日记 | 1 Comment »

新的改变,新的挑战……

使用Gzip压缩ASP.Net的ViewState节省服务器带宽

Posted in 程序开发 | No Comments »

ASP.NET中ViewSate是个非常重要的东西,但是有时候页面有大量数据或对象放在ViewSate的时候,会使得页面的输出非常庞大。可能页面本身没有显示多少内容,但是真个源代码却非常臃肿,导致下载速度非常慢,如果是按流量计费的网络,这就非常不可取了,这个时候如果可以压缩一下就改好了。.NET提供了一个非常好用的压缩组件-GZip
先介绍两个方法:
LoadPageStateFromPersistenceMedium()
SavePageStateToPersistenceMedium(object viewState)
这是System.Web.UI.Page的两个virtual方法,LoadPageStateFromPersistenceMedium()是调用客户端提交过来的ViewState的方法,SavePageStateToPersistenceMedium(object viewState)是想客户端送出ViewState的方法,通过重写这两个方法即可实现对ViewState的操作了。

建立一个PageEx类继承自System.Web.UI.Page就可以重写这两个方法了。

接下来就是Gzip的压缩和解压方法实现了。现在.NET Framework已经自带了一个Gzip 类:System.IO.Compression.GZipStream

具体用法也很简单:
以下是压缩方法:
public byte[] CompressData(byte[] data)
        {
            MemoryStream output = new MemoryStream();
            GZipStream gzip = new GZipStream(output,
                              CompressionMode.Compress, true);
            gzip.Write(data, 0, data.Length);
            gzip.Close();
            return output.ToArray();
        }

 以下是解压方法:
        public byte[] DecompressData(byte[] data)
        {
            MemoryStream input = new MemoryStream();
            input.Write(data, 0, data.Length);
            input.Position = 0;
            GZipStream gzip = new GZipStream(input,
                              CompressionMode.Decompress, true);
            MemoryStream output = new MemoryStream();
            byte[] buff = new byte[64];
            int read = -1;
            read = gzip.Read(buff, 0, buff.Length);
            while (read > 0)
            {
                output.Write(buff, 0, read);
                read = gzip.Read(buff, 0, buff.Length);
            }
            gzip.Close();
            return output.ToArray();
        }
 
完整PageEx类如下:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO.Compression;
using System.IO;
 
namespace Test
{
    public class PageEx:System.Web.UI.Page
    { 
//压缩方法       
public byte[] CompressData(byte[] data)
        {
            MemoryStream output = new MemoryStream();
            GZipStream gzip = new GZipStream(output,
                              CompressionMode.Compress, true);
            gzip.Write(data, 0, data.Length);
            gzip.Close();
            return output.ToArray();
        }
//解压方法 
        public byte[] DecompressData(byte[] data)
        {
            MemoryStream input = new MemoryStream();
            input.Write(data, 0, data.Length);
            input.Position = 0;
            GZipStream gzip = new GZipStream(input,
                              CompressionMode.Decompress, true);
            MemoryStream output = new MemoryStream();
            byte[] buff = new byte[64];
            int read = -1;
            read = gzip.Read(buff, 0, buff.Length);
            while (read > 0)
            {
                output.Write(buff, 0, read);
                read = gzip.Read(buff, 0, buff.Length);
            }
            gzip.Close();
            return output.ToArray();
        }
 
   //重写调用ViewSate的方法    
        protected override object LoadPageStateFromPersistenceMedium()
        {
            string viewState = Request.Form["__VSTATE_EXT"];
            byte[] bytes = Convert.FromBase64String(viewState);
            bytes = DecompressData(bytes);
            LosFormatter formatter = new LosFormatter();
            return formatter.Deserialize(Convert.ToBase64String(bytes));  //将解码后的ViewSate返回
        }
 //重写写入ViewSate的方法
        protected override void SavePageStateToPersistenceMedium(object viewState)
        {
            LosFormatter formatter = new LosFormatter();
            StringWriter writer = new StringWriter();
            formatter.Serialize(writer, viewState);
            string viewStateString = writer.ToString();
            byte[] bytes = Convert.FromBase64String(viewStateString);
            bytes = CompressData(bytes);
            ClientScript.RegisterHiddenField(”__VSTATE_EXT”, Convert.ToBase64String(bytes));//将解码后的ViewSate送入客户端
        }
 
    }
}
 
最后就是最重要的一步,就是要把新建的页面的默认的继承对象System.Web.UI.Page,改成PageEx。
如:
public partial class index: PageEx
{
……
}

DVB Dream 八切一设置方法

Posted in 乱七八糟的技术 | No Comments »

最近装了双锅六星,用上了八切一,换下了原来的四切一。

我使用的DVB Dream收视,原本以为八切一应该和四切一样简单配置,后来发现没那么简单。不过在网上查找资料,又自己琢磨琢磨以后,还是搞定了,具体方法如下:
选项->卫星天线转换器
Diseqc种类,选择1.0 版本/2.0版本。
直接在Port1中添加卫星,选择卫星,设置好本振,非官方里面选择一个数字,这里的数字代表端口号,要注意的是端口从0号开始编,0代表八切一上的1号端口,1代表八切一上的2号端口……
确定,确定即可。
如下图:
8in1
8in1-2

接下来就可以搜台了。

洗具,终于有了PR了

Posted in 日记 | No Comments »

今天查了一下PR值,没想到竟然是1了,开心,这个写了5年,换了三次域名的博客,终于有了PR。

回想一下,今年下半年,更换域名后我更新确实比以前勤快多了。

高频头进水导致0信号0质量

Posted in 乱七八糟的技术 | No Comments »

前几天我的108.2忽然不正常了,强度,质量全部为0。这颗星看的不多,再加上这段时间又是换工作,又是学车,就没搭理他,终于上个周末桩考结束,闲下来盯着天线看了看,觉得应该要把它搞好了。
首先是怀疑的高频头进水,由于我是用的正馈天线,正焦对的是115.5,所以高频头是扣下来的,如果有下雨,水从头的边缘进入,高频头的头部的塑胶壳中就可能积累很多的雨水。接受能力铁定大打折扣。不过这个怀疑很快打消,因为这个是个新的高频头
然后我开始怀疑节目参数改变,毕竟这颗星看的比较少。而且是新装,所以不太熟悉,不过疑问也很快打消。去网上查了一下参数。没变
马上开始纠结是不是高频头偏了?我用手轻轻拨了拨,发现高频头还是很坚挺的,没有一丝滑动转动现象。应该不太会是偏移了。
最后又开始怀疑是不是线头断了?拿掉四切一,直接上了接收机。还是没有信号。换线再试,还是不行。
在打算重新对头之前,做了个决定,把高频头前的塑胶壳打开看一下。因为高频头的塑胶壳上是有封胶的,而且是新头,所以刚刚没有去想过要拆开它。但是我的高频头固定的也很紧的。拆了高频头再重新对焦也挺麻烦的。所以决定还是打开看一下,毕竟是一种可能的情况。
一咬牙,打开了,就看到一摊水流了出来。接上机器,一切恢复正常。
重新盖上盖子,套上一个新的塑料袋,把整个高频头裹了起来。防水应该没问题了,这样虽然会损失一点信号,但基本不影响收看。
结论:哪怕是新头,也不要太过轻信他的质量。水,还是会进的。

GoDaddy支持支付宝付款了

Posted in 日记 | 2 Comments »

前几天听说Godaddy将要支持支付宝付款了,还有点不敢相信,

今天上去看了一下,确定是真的,Godaddy还真是会挑时间啊!

为了照顾还没听说过Godaddy的童鞋,一下是摘自Baidu的介绍:

 Godaddy是世界第一大域名注册商,进军主机领域以后发展迅速,据多家监测机构显示,放置在Godaddy上的网站数量已经越居第一位。Godaddy同时提供linux主机,Windows主机,VPS以及独立主机全线主机产品,各种需求的客户在这里都可以找到适合自己的产品。
godaddy

现在Godaddy的.com域名是优惠价¥6.95,换成人民币是¥48块左右,在国外注册域名最大的特点就是自主性高,控制面板丰富,随时可以自己转入转出,无须任何手续费,

我这个域名就是在GoDaddy注册的啦!