Fwolf's profile温暖的耗子窝BlogLists Tools Help

Blog


    7/25/2008

    Wine下运行的广发委托系统退出时可能会误删mail目录

    这个问题不是第一次出现了,网上也查不到相关资料,所以感觉有必要说一说,看有没有和我同样遭遇的朋友。

    用wine运行广发委托软件,是比较老的版本了,用起来没什么问题的,新版wine下中文的表现还改进了:

    stock_trade_client

    偶尔的,好像是打开以后发呆时间比较长了更容易出现,点左上角"退出"按钮的时候,原本应该一下子就关闭的,突然变得迟钝、没有响应了。后来一检查,发现$HOME/mail下的文件都没了,把文件删完之后委托程序才正常关闭。

    猜测是委托软件为了防病毒、盗号之类的,在进行安全检查的时候,会检查目录下有没有mail文件(因为一般盗号会采用生成邮件,然后发送到自己邮箱的方式),如果有就删除之。windows下一般人很少会用到mail目录的,用wine运行的委托软件不知怎地阴差阳错的就找到了系统默认的mail目录,文件还删得挺干净。

    原先想过把mail放到别处,然后ln过来,可并不解决问题;并且mail这个目录也不宜放到别处,因为那样系统生成的邮件就放不过来了,比如crontab里程序运行的输出。

    所以现在只能采取两个临时措施,以观后效。一是在用wine启动程序的时候,先cd到委托软件所在目录,即当前目录下就没有mail目录了;二是在winecfg里把到$HOME下的映射都删掉:

    wine_remove_my_documents

    话再说回来,在$HOME下操作其实也挺危险的,因为对于个人用计算机来说,系统坏了倒是小事,资料丢了才心疼呢。

    Tags: , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/418

    7/22/2008

    接多显示器的一点提示

    前两天为了工作需要,打算用我的ATI X600双头显卡接两个显示器,显示同样的内容,鼓捣了一番,记录于此。

    ubuntu默认的双头显卡是左右屏的方式,即主屏是正中央,第二个屏在右边,对应xorg.conf中是这样的:

    Section "ServerLayout"
        Identifier     "Default Layout"
        Screen         "Default Screen" 0 0
        Screen         "aticonfig-Screen[1]" RightOf "Default Screen"
    

    其中Default Screen就是主屏,aticonfig-Screen[1]是第二个显示器。RightOf是设定在主屏右边,还有其它值可选,在man xorg.conf里ServerLayout部分有详细解释,大概在1324行:

    • RightOf 右边
    • LeftOf 左边
    • Above 上边
    • Below 下边

    但我是想显同样的内容,所以需要删除xorg.conf中的两行内容,一行就是上面贴过的:

    Screen         "aticonfig-Screen[1]" RightOf "Default Screen"
    

    另外一行是和aticonfig-Screen[1]相对应的Device段中的Screen 1,比如:

    Section "Device"
        Identifier  "aticonfig-Device[1]"
        Driver      "fglrx"
        BusID       "PCI:1:0:0"
    # 2 screen same display 2/2: delete below line
        Screen      1
    

    删掉上面的最后一句,然后重启X就可以了。

    -EOF-

    Tags: , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/414

    7/18/2008

    忙碌的5月

    2008年的5月是难以忘怀的,有人戏称是上帝的手机不小心开了震动模式了,权当是我们勇敢面对明天的一点自我安慰吧,逝者已矣。这么大的事件,我没帮上什么忙,也没帮上什么倒忙,除了捐了自己微薄的一个月工资以外,几乎什么都没有作,有些惭愧,但我也没闲着,原先考虑的.NET还是PHP?问题基本被消灭掉了,灾要救,其余的工作也要继续,不是么?

    这个项目我最终选择了用PHP来作,原因不再说了,正确性让时间去证明吧。工作内容大体分两部分,一个比较简单的子系统和另外一个大一点,逻辑关系和计算规则比较复杂,专业性也较强的子系统。之所以说是子系统,这次开发的内容仍然要和原来.NET的系统一起使用,换个说法就是只升级了一部分,而原来的系统就是.NET和Java混合着用的,现在.NET、Java、PHP全到齐了:-)。

    因为只是子系统开发、升级,所以用户管理、验证部分仍然使用原系统中的,省去了这部分的工作量,但需要作一些焊接的工作。

    数据库方面,原系统仍然使用Sybase,新系统换到mysql库,为此专门搞了一个单向同步数据的模块,放到cron中每隔5分钟执行一次,效果还可以接受,同步过来的数据也算是对原Sybase的一个备份。不过库结构的命名是全新的,并且除字典表以外,主键全面从identity转向uuid。自定义的uuid按时间排序,还分配了可自定义部分,目前感觉使用效果应该比identity要好,还是需要时间证明了。uuid的调试是麻烦些,需要一点小技巧和烂笔头,还有phpMyAdmin这个好工具。

    时间上,大概是从4月初开始的,刚开始连我4个人,其中1个PHP还没学会,另外2个是今年的应届毕业生(项目过程中,5月底左右,才完成论文答辩,领了毕业证)。我除了项目还有其它工作,刚开始帮他们起了个头,中间一直到5月中下旬才全面投入项目。PHP还没学会的这个后来主攻文档和测试、项目协调。

    一开始花了大概10天的时间构建系统框架、连入adodb,smarty等类库,以及非常重要的开发规范制定。然后开始作那个比较小的子系统,一来可以不断完善系统框架,二来也算是锻炼队伍。原计划4月底完成,拖到了5月10号左右。

    然后开始较复杂的子系统,由于时间太紧迫,又请了两位外援,一位是几乎全能的老手,除了专业业务不熟悉,别的前、后台都没问题,另外一位是一年经验的PHP开发者,速度虽然略慢但代码质量还可接受。

    从5月15号开始,几乎是封闭式开发了,每天除了吃饭睡觉和大概一个小时的休息(乒乓球)时间,每天都工作到24点以后。原计划5月底开始测试(并非完成),跳票到了6月10号,还算是在可接受范围之内吧,只是一些非重点非必要的辅助功能都被我们留在以后作了。

    项目基本上就是这些情况吧,谈几点感受:

    • 石家庄这种鬼地方,一半用户是微软的盲目崇拜者,一半用户是Java的盲目信仰者,PHP及其它开源技术的土壤简直就是盐碱地。
    • 在较成熟的PHP应用环境下,或者开发团队中有PHP熟练者的情况下,即使是.NET和Java的高手也是可以快速熟悉起来产生生产力的。
    • 不要信仰工具,不管是用什么开发工具,没有我们后来请的两位外援,再有2月也拿不出东西来。
    • 工作经验的确很重要,不仅仅是工作质量的差别,毕业生和有工作经验的人相比,工作精神、压力承受程度、解决问题的思维方式都有很大差别的。好在我们的团队成员在工作态度上还都是一流的,这一点我得感谢他们。
    • 欠缺的知识:在开发工作量测量、开发时间测量上还没有太好的方式,代码质量也没有很好的检查方法。需求表达、结构设计基本上靠文字描述和口头讲解(当然也有时间的原因),没有趁手的case工具。数据库结构设计和维护从原来的PowerDesigner又回归到了原始的sql文件+维护版sql文件,感觉用起来虽然不太方便,效率也不低,多服务器的环境下尤其好用。
    • 花一些时间搭建高仿真的测试环境很重要,我们的测试环境已经运行了3年多,系统和数据都是和生产环境一样的,对开发起到了很好的作用。
    • 拍脑门定工期的方式真的是后患无穷,但也没有更有说服力和科学依据的更好方式,头疼,系统分析这块当年没学好,就是学好了这么多年的发展也用不得了。

    小结:很辛苦,但有所得,也很快乐,按照葛优的话说就是即完成了任务,又锻炼了队伍,呵呵。

    与所有默默开垦盐碱地的同志们同勉,并对给予我默默支持的家人和同事致以无限感激。

    Tags: , , , , , , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/404

    Ubuntu从Gutsy升级到Hardy,php5-sybase又掉链子

    升级非常简单,/etc/apt/source.list中的替换为,然后aptitude updateaptitude safe-aptitude dist-,下载一大堆包安装半天就完事了,不过和以前几次升级一样,中自带的php5- 5.2.4-2ubuntu5.1还是不支持

    [12-Jun-2008 09:13:13]  Warning:   Startup: Unable to load dynamic library '/usr/lib/php5/20060613+lfs/sybase_ct.so' - /usr/lib/php5/20060613+lfs/sybase_ct.so: cannot open shared object file: No such file or directory in Unknown on line 0
    

    没办法,再修改源,降级回中的5.2.3:

    $ sudo aptitude install php5-=5.2.3-1ubuntu6.2 php5-gd=5.2.3-1ubuntu6.2 php5-mysql=5.2.3-1ubuntu6.2 php5-=5.2.3-1ubuntu6.2 php5-sqlite=5.2.3-1ubuntu6.2
    

    我试过,装上这个5.2.3的,也就是sybase_ct.so,是不能配合 5.2.4使用的,只能保持暂时不升级。

    另外,这样弄了以后,扩展不可用了,好在不是必须的。

    烦人的

    Tags: , , , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/403

    [MediaTemple]合租第二年开张

    时间过得真是飞快啊,不知不觉租用这个空间已经满一年了。记得当时为了凑够20个人,到处发消息,一些朋友也帮忙转贴,虽然我当时有主机用,不着急搬家,后来也是实在是等不及了,一咬牙直接租了下来,先让已经入伙的住进来,然后再继续招租。好在人很快就满了,并且陆续还有人询问有没有空缺,说明"需求"还是很旺盛的。

    在这一年时间里,大部分都风平浪静,MT的服务器也没出过什么问题,除了因"不可抗力"折腾了一气儿,现在我们已经舍弃了原来的ip(累计4个),搬到了新的主机、新的ip、新的(dv)3.5。

    所以,请所有合租的邻居尽快完成搬家哦,原来的主机租期是到7月19号,估计拆迁还会提前,所有的文件和数据库我都已经转换到了新服务器,大家修改域名指向就可以继续使用了。新主机还是有几个变化的:

    • ssh的chroot取消了,可以登录上来作更多的事情;
    • 两个ip,其中一个备用,万一出现事故,不会连控制面板都登录不了(用代理上plesk有问题);
    • 启用suPHP,速度比原来更快一些;
    • 新版centos和plesk更节约内存,正好分配给apache和mysql;
    • 我终于会用yum了 :-)

    搬家完成后请在旧主机的plesk里作个记号,把相关domain暂停即可,就像这样:

    plesk-domain-deactivate

    方便我到时候统计还有谁没搬家呢。当然确认文件都转移完成后,也可以删除相应domain。

    至于合租的费用,还和去年一样吧,全年¥200,晚来一个月减¥20,付款方式不变,支付宝、贝宝账号还都是用我的邮箱,打款的时候记得带上域名或者账号信息,方便我作记录。

    另外,现在的人员组成情况:

    • 9位2年级同学已经确认会续租;
    • 2位还没拿定主意,不着急,想好之后给我答复;
    • 3位新来的朋友;
    • 2位一直没有答复我是否要续租,希望尽快回话哦;
    • 3个空缺,虚位以待,愿上钩者请与我mail联系,主机情况和去年一样。

    友情提醒想写blog或建网站,又没有时间或耐心的朋友,还是先找个免费空间练练手吧,一年的费用虽然不多,浪费了也确实挺可惜的。

    Tags: , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/413

    [MediaTemple]从(dv)3.0升级到3.5

    从(dv)3.0升级到(dv)3.5,其实我理解最大的差别就是php5, centos5了,其它的也有一些,包括硬件上的,不管怎样,新的应该好,升级之。

    升级主要依据KB里的这篇文章:(dv) HOWTO: Using the Plesk Migration Manager,英文好的直接去看,不用听我唠叨了。

    升级之前

    升级的准备条件:要知道旧主机的域名(废话),有旧主机的root权限(早有了),超过50%的磁盘剩余空间(这个没问题,我们用得比较省)。

    升级之前,要通过support request申请新的(dv)3.5主机,为什么要通过support request而不是直接下订单购买呢?我也不知道。新主机不能和旧主机使用同样的域名,可以用个假的,比如new.fwolf.com,升级完成后可以调过来。申请的时候,我还要了2个新ip,打算把旧ip全部换掉。

    可能是周末的原因,反应速度稍微慢一些,将近12个小时之后才得到消息,先是一个回复说已经添加了新的主机方案(默认一年,可以调整成按月的),然后另外一个回复说ip已经添加完毕,另外还有一封Service Activation Letter邮件,告知新主机的登录信息。

    由于我们并没有使用主机上的DNS,所以DNS部分的调整略过。

    备份资料

    首先是备份旧主机上的资料,主要是文档和数据库。

    文档就是把/var/www/vhosts打包下载即可,虽然我们并没有使用太多的空间,但打包之后还是有1.5G,下载得花点时间,早知道我就在等待新主机的时候作了。

    然后就是备份数据库了,这个用脚本会方便些:

    # mysql -u admin -p -e "show databases;" > mysql_backup.sh
    

    然后用vi加工一下这个文件,删掉第一行标题Database,然后用正则替换:

    :%s/^\(.*\)$/mysqldump --add-drop-table --default-character-set=utf8 --user=admin --password=your_passwd --extended-insert=false \1 > \1.sql
    

    加上可执行属性之后,就可以运行这个脚本了,会在当前目录下生成一堆sql文件,打包下载到本地即可。这个文件终于小一点,才17M。

    设置新的主机

    按照MT Service Activation Letter中的登录信息,登录新的主机,完成主机设置。

    plesk setup step 1

    hostname、默认ip都不用动,所有ip改为shared类型,并更改管理员密码。

    plesk setup step 2

    这些都是联系信息,按照KB中的说明,I would like to create a default client account要选中。

    完事之后,简单对比了一下新、旧主机,发现除了centos和plesk有升级之外,硬件居然还略微下降了一点点,这个是旧主机的:

    mediatemple old vps

    这个是新主机的:

    mediatemple new vps

    用unixbench算了一下,果然要差一些:

    Start Benchmark Run: Sun Jul 13 02:52:13 PDT 2008
     02:52:13 up 1 day,  3:19,  3 users,  load average: 0.07, 0.12, 0.05
    
    End Benchmark Run: Sun Jul 13 03:02:39 PDT 2008
     03:02:39 up 1 day,  3:30,  3 users,  load average: 14.05, 6.09, 2.71
    
                         INDEX VALUES
    TEST                                        BASELINE     RESULT      INDEX
    
    Dhrystone 2 using register variables        376783.7 10407496.2      276.2
    Double-Precision Whetstone                      83.1     1363.3      164.1
    Execl Throughput                               188.3     3177.3      168.7
    File Copy 1024 bufsize 2000 maxblocks         2672.0    70892.0      265.3
    File Copy 256 bufsize 500 maxblocks           1077.0    17388.0      161.4
    File Read 4096 bufsize 8000 maxblocks        15382.0   376396.0      244.7
    Pipe-based Context Switching                 15448.6   224834.4      145.5
    Pipe Throughput                             111814.6   619968.9       55.4
    Process Creation                               569.3    11806.2      207.4
    Shell Scripts (8 concurrent)                    44.8      270.9       60.5
    System Call Overhead                        114433.5   280994.4       24.6
                                                                     =========
         FINAL SCORE                                                     131.3
    

    原来得分是207.1的,只好阿Q一下,希望MT不同配置的硬件所带的vps数量不同,另外软件上的优化也能弥补一些差距。

    开始升级

    左边菜单里点Server,然后在右边页面的Services组中选择Migration Manager,然后点Start a new migration开始新的服务器转换:

    plesk migration step 1

    由于磁盘空间足够,可以一次转换,所以很方便,填上原主机名称和登录信息即可。不小心还发现/使用的是reserfs,并且默认安装耗费4%的空间,也就是大概600M。

    确认之后,plesk自动到旧主机上查出信息:

    plesk migration setp middle

    plesk migration setp 2

    当然要选择Migrate all clients and domains,同时还看到plesk还能从其它主机管理软件,比如从cPanel转换数据。Advanced里还有一些选项,包括旧主机的空间占用信息,一般不用动的:

    plesk migration step 2-1

    确认之后:

    plesk migration step 3

    设置新、旧主机上的ip对应关系,我们旧主机上有2个ip(虽然显示3个,有一个其实已经退掉了),新主机上打算大多数人用一个ip,管理后台用单独的一个,免得被封了之后连后台都进不去(plesk通过代理登录总有问题)。

    下一步:

    plesk migration setp 4

    Mysql设置,没什么好设置的,直接继续,就可以喝茶等机器干活儿了,先备份信息:

    plesk migration step 5

    然后拷贝文件:

    plesk migration step 5-1

    传输速度10MB/s左右,基本上相当于100M局域网对拷了。拷贝完成后再逐个进行部署:

    plesk migration step 5-2

    最后,终于完成,不过发现了错误:

    plesk migration error

    好像是因为plesk没有装中文语言包,不是很严重的错误,到Parallels下载一个语言包,在plesk -> Server -> Interface Prefenences -> Add Locale里上传语言包。网站上显示有错误,简体中文实际上是链接向荷兰语的,繁体中文链接是指向简体中文的。上传成功后又发现无法启动,原来Maximum number of language packs只有1,难道新的主机方案只能安装一个语言包?大家只能暂时都用英文界面了。

    升级回顾、检查、补漏

    plesk的migration只是把所有client、domain的设置和文件都压缩、拷贝、解压部署到了新主机上,其余的东西还得自己动手:

    • root账号没有开,developer tools没有安装,这两个可以在account center里作;
    • Virtuozzo -> System Services里的服务大部分都和旧主机一样,有一点不同,手工修改了;
    • root目录下的文件都需要手工拷贝过来;
    • 用户$HOME下除系统自建目录之外的文件都没有转过来,需要手工处理,比如.bashrc, .vimrc
    • chroot环境里原来配置的可执行文件都没了,需要重新配;
    • plesk中的client模板也没转换过来,需要自己重新新建;
    • Apache配置文件/etc/httpd/conf/httpd.conf,php配置文件/etc/php.ini,mysql配置文件/etc/my.cnf,需要手工处理;
    • 原来手工更改为PHP5的用户,需要参照KB: Reverting PHP5 for (dv) 3.0 after migrating to a (dv) 3.5进行修改,删除原来添加的PHP5 fcgi处理部分,然后/usr/local/psa/admin/sbin/websrvmng -a -v即可;
    • 为了安装其他东西方便,这回我先装个yum,从这里下载,i386的;
    • denyhosts还是要装的,从这里下载;
    • ssl证书,虽然是没有公信力的,但还是自己的看着舒服;

    vi里中文乱码,需要编辑/etc/sysconfig/i18n,把里面的4行原来注释了的取消注释,原来没注释的加上注释,即:

    # cat /etc/sysconfig/i18n
    LANG="en_US.UTF-8"
    SUPPORTED="en_US.UTF-8:en_US:en"
    SYSFONT="latarcyrheb-sun16"
    #LANG="C"
    

    这个需要重启生效。这个好像只对root有效,jail的ssh用户仍然不行,取消了chroot之后就好了;

    后记、感想

    • 下次再升级之前,一定把自己修改过的脚本备份打包,便于修改新主机上的配置;
    • migration的范围如果能扩大到系统配置,然后系统配置不是覆盖,而是像svn那样能智能merge就好了;
    • plesk功能虽然丰富,可速度是那么得慢,慢到我可以一边等待一边写这些记录,时不时的操作一下对写作思路还有干扰。不止我一个人这么说哦:使用plesk的感想
    • 现在的web服务器选择真是太多了,我知道的除了apache还有lihttpd和nginx,鼓捣php的时候还发现同一种服务还有N种实现方式,学无止境阿。

    升级之后

    升级结果信息总体保存在/usr/local/psa/PMM/var/2008-07-11-20.05.45.106523,这个目录下面有个archives子目录,是升级时旧服务器上打包的所有文件,确认升级没问题后,可以删掉以节省控件。

    (持续更新中)

    参考

    Tags: , , , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/412

    由一个错误学到的一些php安全配置问题

    错误

    在MediaTemple主机从(dv)3.0升级到3.5之后,我遇到的第一个问题就是一个莫名奇妙的php错误:

    [Sat Jul 12 04:51:27 2008] [error] [client 121.42.26.81] PHP Warning:  require_once(/var/www/vhosts/fwolf.com/include/fwolflib/func/config.php) [function.require-once]: failed to open stream: Operation not permitted in /var/www/vhosts/fwolf.com/httpdocs/info.php on line 4
    [Sat Jul 12 04:51:27 2008] [error] [client 121.42.26.81] PHP Fatal error:  require_once() [function.require]: Failed opening required '/var/www/vhosts/fwolf.com/include/fwolflib/func/config.php' (include_path='.:/var/www/vhosts/fwolf.com/include') in /var/www/vhosts/fwolf.com/httpdocs/info.php on line 4
    

    因为是migration过来的,所以require的这个文件肯定存在,并且apache用户也的确有权访问,那问题出在哪里呢?

    如果换一种方式,require直接使用文件的全路径,错误信息就更清楚了:

    Warning:  require_once() [function.require-once]: open_basedir restriction in effect. File(/var/www/vhosts/fwolf.com/include/fwolflib/func/config.php) is not within the allowed path(s): (/var/www/vhosts/fwolf.com/httpdocs:/tmp) in /var/www/vhosts/fwolf.com/httpdocs/info.php on line 4

    Warning: require_once(/var/www/vhosts/fwolf.com/include/fwolflib/func/config.php) [function.require-once]: failed to open stream: Operation not permitted in /var/www/vhosts/fwolf.com/httpdocs/info.php on line 4

    Fatal error: require_once() [function.require]: Failed opening required '/var/www/vhosts/fwolf.com/include/fwolflib/func/config.php' (include_path='.:/var/www/vhosts/fwolf.com/include') in /var/www/vhosts/fwolf.com/httpdocs/info.php on line 4

    原来是有个open_basedir限制,找了一下是在$HOME/conf/httpd.include里,这个文件是由plesk自动维护的:

    
        php_admin_flag engine on
        php_admin_flag safe_mode off
        php_admin_value open_basedir "/var/www/vhosts/fwolf.com/httpdocs:/tmp"
    
    
        php_admin_flag engine on
        php_admin_flag safe_mode off
        php_admin_value open_basedir "/var/www/vhosts/fwolf.com/httpdocs:/tmp"
    
    

    看到没,只允许包含httpdocs下的文件。open_basedir影响的范围是fopen, require, include之类的函数,在一定程度上加强了安全防护。

    问题

    但open_basedir也有局限性,它不会影响那些执行系统命令的函数,比如exec, system,如果我想偷主机上另外一位同学的文件(内容),也不见得非要去用require包含过来或者种个hack过去,直接system('cat /path/to/file')不是更省事么?

    system函数有时候还是能派上正当用场的,直接禁用不是什么好办法,现在流行chroot,就是用户的/就是自己的$HOME,压根儿就访问不到别人的文件,什么open_basedir, exec, dl都不用禁用,我觉得这才是安全和方便的最佳接合点。

    以前用(dv)3.0的时候,手工配置使用fastcgi的php5就是这样,每个用户的cgi用自己的身份,在自己的chroot环境下运行。

    不过plesk现在的版本8、将来的版本9都没有要直接使用fastcgi解析php的打算,在"更远的计划里",才可怜兮兮的有这么一句:

    Use PHP via FastCGI rather than Apache module
    

    参见:Parallels Summit 2008 - Day 1,所以就只能自己动手了。

    fastcgi

    很走运,找到了一个2天前刚刚出炉的脚本:Script for using php-cgi instead of mod_php,专门针对plesk,禁用掉mod_php,然后用它来配置fcgi解析。

    使用环境:Plesk 8.X on Centos 5.X,依赖:

    • 禁用mod_php,开启mod_fcgid
    • python-curl, PyXML
    • php开启–enable-fastcgi, –enable-force-cgi-redirect

    文件需要解压到/root/bin/下,自己一个子目录,幸好我也是用这个bin目录的。

    然后在Server -> Control Panel -> Event Manager里添加自定义事件,在增加、修改、删除domain的时候,自动调用这个脚本。(subdomain的删除没有包含,手工删除文件就可以了)设置好大概就是这个样子:

    using php-cgi instead of mod_php, plesk event manager

    还要把/etc/httpd/conf.d/php.conf删得只剩一行:

    LoadModule php5_module modules/libphp5.so
    

    并且在/etc/httpd/conf.d/fcgid.conf里加一句:

    PHP_Fix_Pathinfo_Enable 1
    

    不过,这种方法作到一半我就没有继续了,因为我想起来前几天一位朋友和我提到过的suPHP。

    suPHP

    个人感觉suPHP是最"正统"的解决方案,它是以文件属主用户的身份来运行,正好使用各个用户的权限实现访问限制。

    没找到centos的mod_suphp包,只好下载suphp 0.6.3源码自己编译,不过之前要先修改src/apache2/mod_suphp.c,在324行替换掉两行内容:

    //AP_INIT_ITERATE("suPHP_AddHandler", suphp_handle_cmd_add_handler, NULL, ACCESS_CONF, "Tells mod_suphp to handle these MIME-types"),
    AP_INIT_ITERATE("suPHP_AddHandler", suphp_handle_cmd_add_handler, NULL, RSRC_CONF | ACCESS_CONF, "Tells mod_suphp to handle these MIME-types"),
    //AP_INIT_ITERATE("suPHP_RemoveHandler", suphp_handle_cmd_remove_handler, NULL, ACCESS_CONF, "Tells mod_suphp not to handle these MIME-types"),
    AP_INIT_ITERATE("suPHP_RemoveHandler", suphp_handle_cmd_remove_handler, NULL, RSRC_CONF | ACCESS_CONF, "Tells mod_suphp not to handle these MIME-types"),
    

    然后就是编译安装那三板斧:

    # ./configure\
    --with-apxs=/usr/sbin/apxs\
    --with-php=/usr/bin/php-cgi\
    --with-logfile=/var/log/suphp.log\
    --with-min-uid=10000\
    --with-min-gid=10000\
    --with-apache-user=apache\
    --with-apr=/usr/bin/apr-1-config\
    --with-setid-mode=owner\
    --prefix=/usr\
    --sysconfdir=/etc
    # make
    # make install
    

    /etc/httpd/conf/httpd.conf中加入一句(这一句也可以放到后面的suphp.conf中):

    LoadModule suphp_module modules/mod_suphp.so
    

    关闭safe_mode,并且注释掉下面两句:

    safe_mode = Off
    #AddType application/x-httpd-php .php
    #AddType application/x-httpd-php-source .phps
    

    创建suphp的conf文件,使用源码中的conf文件模板:

    # cp doc/suphp.conf-example /etc/httpd/conf.d/suphp.conf
    

    修改之:

    
        RemoveHandler x-httpd-php
    #   php_admin_value engine off
        AddHandler x-httpd-php .php .php3 .php4 .php5
        suPHP_AddHandler x-httpd-php
        suPHP_Engine On
        suPHP_ConfigPath /etc/php.ini
    
    

    禁用mod_php,把php.conf文件换一个扩展名就行了:

    # cd /etc/httpd/conf.d
    # mv php.conf php.conf.bak
    

    创建suPHP的配置文件/etc/suphp.conf,这个文件和用于apache配置的conf是不一样的,其内容如下,可根据具体环境设定参数:

    [global]
    ;Path to logfile
    logfile=/var/log/suphp.log
    
    ;Loglevel
    ;loglevel=info
    ;info, warn, error
    loglevel=warn
    
    ;User Apache is running as
    ;webserver_user=wwwrun
    webserver_user=apache
    
    ;Path all scripts have to be in
    docroot=/var/www/vhosts/
    
    ;Path to chroot() to before executing script
    ;chroot=/mychroot
    
    ; Security options
    ;allow_file_group_writeable=false
    allow_file_group_writeable=true
    ;allow_file_others_writeable=false
    allow_file_others_writeable=true
    ;allow_directory_group_writeable=false
    allow_directory_group_writeable=true
    ;allow_directory_others_writeable=false
    allow_directory_others_writeable=true
    
    ;Check wheter script is within DOCUMENT_ROOT
    check_vhost_docroot=true
    
    ;Send minor error messages to browser
    ;errors_to_browser=false
    errors_to_browser=true
    
    ;PATH environment variable
    env_path=/bin:/usr/bin
    
    ;Umask to set, specify in octal notation
    ;umask=0077
    umask=0022
    
    ; Minimum UID
    ;min_uid=100
    min_uid=10000
    
    ; Minimum GID
    ;min_gid=100
    ; Consider of psacln, psaserv
    min_gid=200
    
    ; Use correct permissions for mod_userdir sites
    ;handle_userdir=true
    
    [handlers]
    ;Handler for php-scripts
    ;x-httpd-php=php:/usr/bin/php
    x-httpd-php=php:/usr/bin/php-cgi
    
    ;Handler for CGI-scripts
    x-suphp-cgi=execute:!self
    

    现在,重启apache,就可以啦!如果发现返回空页面,并且错误log中有如下内容:

    Premature end of script headers:
    

    那有可能是因为你把cli模式的php可执行文件拿过来当cgi模式的用了,注意他们的区别:

    # php -v
    PHP 5.2.6 (cli) (built: May  2 2008 16:06:40) 
    
    # php-cgi -v
    PHP 5.2.6 (cgi-fcgi) (built: May  2 2008 16:01:17)
    

    把正确的cgi模式php执行文件设定到/etc/suphp.conf中即可。

    chroot的疑惑

    由于以前为了安全,ssh权限都是限定在chroot环境下,这样用户无法访问自己$HOME之外的内容。使用了suPHP之后,虽然php文件是以用户身份运行的,但却不是chroot的环境。也就是说,"理论上"在php文件执行的时候,可以访问其他用户的文件,这不也是个安全隐患么?

    为了这个问题,我翻阅了好多资料,却发现很少人提起这个东西,suPHP安装不复杂,介绍的也不少,就是没有和chroot搭配的,倒是有人提出和fastcgi搭配使用。后来和michael沟通后才突然醒悟,suPHP的伪装身份和chroot是两种机制,之间没有什么联系,所以也就不存在什么配套使用的问题。至于不想让用户访问别人的文件,完全可以通过设定文件权限来实现嘛,不过还是要在安全方面比以前更加留心:

    • $HOME下系统自动创建的目录,一般属主都是user:psaserv或者root:root,有些对所有人都有rx权限(755),有些则是750权限,私密文件不要往755权限的目录下放。这些目录一般不宜改为750权限,因为有些文件是其他系统服务需要读取的。
    • $HOME下httpdocs, private等目录默认就是禁止所有人访问的,保持这样不要更改,并且httpdocs下的文件你就是搞成777权限,别人也访问不到。
    • 用户自建的文件、目录一般为user:psacln权限,主机上所有host用户所属组都是psacln,所以如果不想让别人访问,又没有上级目录的权限限制的话,一定调整为700权限。
    • 为了使用更方便,可以把$HOME目录的属主设为用户本身,比如chown fwolf:psaserv /var/www/vhosts/fwolf.com,不过这就需要一个个的单独开通了。
    • 如果发现其他系统文件中有泄密的,或者其他用户没有设置好权限,存在安全隐患,请及时告诉我或者相应用户,这样我们才是和谐的一家人嘛 :-)

    取消chroot,还有一个好处就是用户几乎能够使用主机上的所有命令了,不像以前那样用哪个就需要把哪个设置到chroot的jail中,方便多了。

    chroot的取消不是自动的,我已经给所有用户加上了可指定/bin/bash作为登录shell的权限,用户在plesk的站点设置中,把ssh用户的登录更换为/bin/bash即可,当然如果对安全没有信心,觉得chroot也够用的用户可以保留。

    其他

    suphp比suexec(就是原来dv3.0升php5的方法)要快一点;比suphp更快的还有suphp_mod_php;再快一些的是mpm-peruser,不过安装配置的麻烦程度也随之递增。

    相比而言,suPHP速度还算可以接受(对于负载不是很大的站),配置方便,不用修改每个virtualhost的参数(就是$HOME/conf/vhost.conf),直接改apache的总conf就ok了,当然也比上面fastcgi方式下用event触发脚本来实现更加简洁。

    参考

    Tags: , , , , , , , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/411

    用ssh打通反向隧道,内网也可对外提供服务

    一般正规一点的网络环境,大多是这样的:防火墙后分为内网和中立区(DMZ),并且内网和DMZ虽然都能访问外网,互相却是无法直接访问的。内网和DMZ的区别就是,来自外网的访问,都通过防火墙上的规则映射到DMZ里的服务器上,而内网一般是不允许这样的。

    现在需要解决的问题就是,在防火墙只能给DMZ开端口,内网和外网不可直接互访的情况下,如果让内网的机器对外提供服务。

    ssh是很神奇的,使用它创建的隧道,可以起到代理的作用,数据流的方向是:

    本机 -> 隧道 -> 外网
    

    应用到我们的问题中,如果把隧道反过来,就是:

    外网 -> DMZ -> 隧道 -> 内网
    

    这就需要用到ssh的反向隧道,它在服务器上打开一个监听端口,这个端口的访问会被隧道传输到本地,结果再通过隧道传到服务器上,从监听端口返回给客户。这样,在我们的应用中,内网机器通过外网访问DMZ服务器,创建ssh反向隧道,就能够对外提供服务了。当然,防火墙上要将相应端口映射到DMZ的服务器上。

    比如,在内网登录DMZ服务器:

    ssh -R 8082:localhost:82 fwolf@svr5.tld -o ControlPath=/tmp/ssh_svr5_reverse_tunnel
    

    这样,访问DMZ服务器svr5的8082端口,就是在访问本机的82端口。之所以带上-o ControlPath,是为了和其它访问svr5的进程使用不同的master模式(如果不是第一次创建这个master,而是使用了原来的连接的sockts,肯定就不会创建隧道了)。

    有几个问题还需要注意一下:

    • 如果DMZ上监听端口小于1000的话,就必须用root用户登录DMZ服务器,比如root@svr5.tld
    • DMZ服务器上的sshd必须开启GatewayPorts选项,在文件/etc/ssh/sshd_config中加入GatewayPorts yes
    • 记得不要idle,参考中有在服务端设置的方法。
    • 如果放在其它脚本,比如/etc/rc.local中执行的话,除了配置自动登录,还可以带上-fN参数,放到后台去。

    参考

    Tags: , , , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/410

    约书亚/Joshua


    很久没有看恐怖片了,尤其是这种让人后背发冷的恐怖片,有人评论想把他踢飞,我觉得并不为过。

    • 和其他电影比,比Hard Candy / 水果硬糖里的那个小女孩要可恶+可怕多了,因为它残害的是自己的亲人;
    • 和成年人比,和龙在边缘里谭耀文演的角色有得一拼;
    • 它的待遇,和金婚里的大宝恰恰相反,不过相同的是结果都不美好;

    在不懂爱和邪恶的时候,过早的解除宗教信仰什么的东东,看来不是多么好的事情。它的父母也很冤枉,怎么培养出这么一个孩子,我希望本不该如此,剧情需要而已,父母对第一个孩子肯定也是同样关爱的。

    还也许,只是魔鬼转世,这个世界上天生的怪人还是很多的,不过The Invasion/致命拜访里的奥利弗多听话啊。

    太沉闷,来点高兴的吧,虽然偶不懂音乐,但钢琴真的很好听,我相信用我敲键盘的手去谈钢琴应该也不错 :-)。

    最后,好辛苦的父母。。。为啥不在儿子和女儿房间安上摄像头呢?

    Tags: , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/409

    7/15/2008

    生成用于web服务器的openssl证书

    启用https,就一定要有ssl证书,MT主机上有一个默认的证书,但是签署给plesk这个域名的,并且没有根证书认证,所以,自己搞个CA,给自己签个假证书用吧,至少好看些。

    说实话,关于证书这些我也是一知半解,以前弄过apache的ssl,但那只是简单的处理,没有CA什么的,这次我上网搜集了不少资料,走了一个算是更"高级"一点的方式吧,不过出来的证书使用起来没有大差别。

    注:所有操作在/big2/tools/ca下进行。

    准备根证书

    准备一些空目录和文件,作用如下:

    • certs/ 保存颁发的所有证书的副本
    • index.txt 跟踪已颁发的证书,初始为空
    • openssl.cnf openssl和根证书的配置文件
    • private/ CA证书的私钥
    • serial 最后一次颁发的证书的序列号,初始值01,也可以是00等其它值

    openssl.cnf内容如下,我一气儿弄了10年的有效期:

    [ ca ]
    default_ca = FwolfCA
    
    [ FwolfCA ]
    dir = /big2/tools/ca
    certificate = $dir/cacert.pem
    database = $dir/index.txt
    new_certs_dir = $dir/certs
    private_key = $dir/private/cakey.pem
    serial = $dir/serial
    
    default_crl_days= 7
    default_days = 3650
    default_md = sha1
    
    policy = FwolfCA_policy
    x509_extensions = certificate_extensions
    
    [ FwolfCA_policy ]
    commonName = supplied
    stateOrProvinceName = supplied
    stateOrProvinceName = supplied
    countryName = supplied
    emailAddress = supplied
    organizationName= supplied
    organizationalUnitName = optional
    
    [ certificate_extensions ]
    basicConstraints= CA:false
    
    # 下面是根证书的配置信息
    
    [ req ]
    default_bits = 4096
    default_keyfile = /big2/tools/ca/private/cakey.pem
    default_md = sha1
    prompt = no
    distinguished_name = root_ca_distinguished_name
    x509_extensions = root_ca_extensions
    
    [ root_ca_distinguished_name ]
    commonName = Fwolf CA
    stateOrProvinceName = The Earth
    # countryName只能是两位字母
    countryName = CN
    emailAddress = one_mail_of_fwolf@gmail.com
    #organizationName = Root Certification Authority
    organizationName = Fwolf CA Root
    [ root_ca_extensions ]
    basicConstraints = CA:true
    

    然后生成根证书:

    $ openssl req -x509 -newkey rsa:4096 -out cacert.pem -outform PEM -days 3650 -config openssl.cnf
    

    会提示输入密码以及确认密码。生成好以后可以验证一下(说是验证,其实就是看看内容):

    $ openssl x509 -in cacert.pem -text -noout
    

    给自己颁发证书

    $ openssl req -newkey rsa:4096 -keyout office.fwolf.com.key.pem -keyform PEM -out   office.fwolf.com.req.pem -outform PEM -sha1
    

    按提示输入两次密码,然后输入几项证书信息,注意其中organizationName必须输入,并且Common Name要和域名一致,比如:

    Common Name (eg, YOUR name) []:*.fwolf.com
    

    就生成了私钥key文件和请求req文件,然后把req文件提交给CA根证书签署(盖章):

    $ openssl ca -in office.fwolf.com.req.pem -config openssl.cnf
    

    输入根证书的密码,就会在certs/目录下生成.pem证书文件,文件名以serial中的序号开头,信息会存储在index.txt中。

    这样生成的证书,在apache中配置需要两条语句,分别指定证书和私钥:

    SSLEngine On
    SSLCertificateFile /big2/tools/ca/certs/office.fwolf.com.cert.pem
    SSLCertificateKeyFile /big2/tools/ca/certs/office.fwolf.com.key.pem
    

    其实这两个文件是可以合并为一个文件的:

    $ cat office.fwolf.com.key.pem office.fwolf.com.cert.pem > office.fwolf.com.pem
    

    然后在配置apache的时候就只需要一句了:

    SSLEngine On
    SSLCertificateFile /big2/tools/ca/certs/office.fwolf.com.pem
    

    其它

    去掉证书的口令

    现在证书基本上就可以使用了,再返回来说一个问题,就是在启动apache的时候会提示输入私钥的口令,要想去掉这个(一般都不会喜欢这样的),就要求在生成私钥的时候不要设置口令:

    $ openssl req -newkey rsa:4096 -keyout office.fwolf.com.key.pem -keyform PEM -out   office.fwolf.com.req.pem -outform PEM -sha1 -nodes
    

    生成根证书的时候还是建议带上个口令,提高安全性。

    index.txt

    另外,如果要清空index.txt的话,一定要清空到字节0,里面有一个字节都会导致openssl ca错误:

    wrong number of fields on line 1 (looking for field 6, got 1, '' left)
    

    证书吊销

    $ openssl ca -revoke office.fwolf.com.cert.pem
    

    # 生成CRL列表
    $ openssl ca -gencrl -out exampleca.crl

    # 查看CRL列表信息
    $ openssl crl -in exampleca.crl -text -noout

    # 验证CRL列表签名信息
    $ openssl crl -in exampleca.crl -noout -CAfile cacert.pem

    可以看到CRL的版本号为1,这是OpenSSL默认的,除非crl_extensions被指定在配置文件ca一节中。

    上传到MT主机上应用

    首先在Server > Certificates >Add New Certificate,填上Add New Certificate(自己起),然后选下面的Private key私钥文件和Certificate证书文件上传,就存到服务器上了。

    然后返回证书列表,选中新上传证书前面的复选框,点上面的链接Make default for Web sites设置为网站默认证书,也可以通过Secure control panel将其设置为控制面板所使用的证书。

    还没完,证书还得加到ip上才能生效,Server > IP Addresses >中修改ip地址属性,在SSL Certificate中选择刚才上传的证书,保存,就立刻生效了。

    基于ssl/https协议的特性,一个ip上只能使用一个证书,所以合租用户是无法自己上传或者选择其它证书的,不过我现在使用的证书是签给"*"的,也就是所有域名都可以使用,"好看"一点。让我不理解的是,如果在访问一个域名时同意了这个证书,在访问另外一个域名的时候还得再同意一遍,也就是证书和域名是要配套使用的,和我原先的想法不太一致。

    参考资料

    Tags: , , , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/407

    麻烦一连串儿

    主机不是被封了么,有些朋友就又了其它的选择,退出合租,用其它的空间,这很正常,可其中偏偏有位台湾朋友,当初打款过来的时候就费了些周折,还一下子交了2年的,现在只用了一年,虽然人家说剩下的钱不要了,咱也无功不受禄,还是要转回去。台湾朋友更大度,你帮我捐给四川的同胞吧,由此,麻烦开始了。

    先想,捐款还是到壹基金吧,反正哪儿不是捐啊,于是找到网站,一看,能用支付宝,ok,继续。

    可我支付宝里没钱,从银行划过来吧,选充值,选建行,充值错误,选择证书的时候空白,哦,原来的证书忘记安装了,还在以前用vmware虚拟的另外一个虚拟机下。

    好在我早有准备,证书都导出来了,找到,导入,嗯?怎么导入以后哪里也找不到呢?

    左试又试,原来导入位置不能选"个人",让系统根据证书类型自己判断,然后导入的证书就出现在"其它人"里面了,"其他人"这个位置似乎不对,不管,支付,选证书的时候还是空白。

    换一种导入方式,在资源管理器打开证书再导入,一看无法验证颁发者,咋回事?上网查,原来没有导入ccb的根证书。要想把原来虚拟机上的根证书导出来,还得跑vmware。

    可惜,升级到ubuntu 8.04 hardy之后,原来的vmware早跑不起来了,框框折腾2小时未果,最后好歹弄了个vmware-player,算是让虚拟机转起来了,导出了ccb的根证书。

    再次导入我自己的证书,仍然如故,属于"其他人",再上网查啊查,原来导出的时候没有导出私钥,ok再开vmware虚拟机,连私钥一起导入,到这边再导入终于出现在了"个人"中。

    再支付,又失败,原来建行最近把不是用usbkey的用户的网上额度都搞成0了,我自然是懒得去买key,就是买来了也不知道和virtualbox搭不搭伙。不过咱还有招,信用卡的网上支付应该没有被停,选建行的信用卡,支付。

    嗯,有效期是YY/MM格式还是MM/YY格式呢?试试吧,一试不要紧,被锁了,打电话让信用卡中心解锁,ok后让等待5分钟。

    5分钟后再试,又被锁住,两种有效期格式没有一种是对的?虽然卡没在手上,但日期肯定没记错,遂再call信用卡中心,解锁之后小心翼翼的问人家,上次是啥原因被锁的,回答:CVV2输入错误。

    昏倒,回家找我的卡片去,然后再来继续这些麻烦。

    都说计算机是高效的,可也不知是现代人的需求也提高了,还是计算机真的本身就是麻烦;互联网虽然方便,可网速慢的时候更加要命,有时候我甚至感觉上网3小时至少有1小时是在等待(我不上一般大众网站,都是国内外技术性网站,或者连公司的网,都不快,把铁通算上,更慢了),真是应了那句话,天下本无事,庸人自扰之,可现在离开计算机互联网我们还能活么?

    Update @ 当日晚

    按照支付宝登录控件之后还要重启电脑,寒。。。

    操作成功,大功告成,感谢我们的台湾同胞。

    顺便,贴一个我们主机跑unixbench的成绩,感觉还不错,当然现在没什么负载:

    ==============================================================
    BYTE UNIX Benchmarks (Version 4.1-wht.1)
    System -- Linux fwolf.com 2.6.9-023stab044.4-enterprise #1 SMP Thu May 24 17:41:23 MSD 2007 i686 i686 i386 GNU/Linux
    /dev/vzfs             20000000   5340312  14659688  27% /
    
    Start Benchmark Run: Mon Jun 23 23:30:38 CST 2008
     23:30:38 up 6 days,  2:03,  3 users,  load average: 0.12, 0.08, 0.01
    
    End Benchmark Run: Mon Jun 23 23:40:49 CST 2008
     23:40:49 up 6 days,  2:13,  2 users,  load average: 14.06, 5.94, 2.60
    
                         INDEX VALUES
    TEST                                        BASELINE     RESULT      INDEX
    
    Dhrystone 2 using register variables        376783.7 22753013.6      603.9
    Double-Precision Whetstone                      83.1     1622.9      195.3
    Execl Throughput                               188.3     4793.9      254.6
    File Copy 1024 bufsize 2000 maxblocks         2672.0    78447.0      293.6
    File Copy 256 bufsize 500 maxblocks           1077.0    21706.0      201.5
    File Read 4096 bufsize 8000 maxblocks        15382.0   710319.0      461.8
    Pipe-based Context Switching                 15448.6   205785.2      133.2
    Pipe Throughput                             111814.6   793752.1       71.0
    Process Creation                               569.3    14796.3      259.9
    Shell Scripts (8 concurrent)                    44.8      848.6      189.4
    System Call Overhead                        114433.5   898962.9       78.6
                                                                     =========
         FINAL SCORE                                                     207.1
    
    Tags: , , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/406

    使用了无效的ssl证书,feedburner无法抓取feed的解决方法

    始终割舍不下https,虽然它会多消耗一些资源,但毕竟可以让网站免于某些风暴,不过M.zdpress提出了一个我没有注意到的问题,feedburner无法抓取feed了,试了一下,果然:

    Feedburner retrieve https feed using self-signed ssl error

    可以看出错误的原因是使用了无效的证书(当然无效,同时猜测fb使用的是Java),从证书这边着手看来是没希望了,只能换其他的方式。

    前端时间在GFans里听到过可以用Google Reader实现类似feed重烧或转发的功能,遂想用这个来试一试。

    首先在GR中订阅自己的feed,然后给它打上一个tag(标签),也有的地方叫folder(目录),都一样,注意tag名最好唯一、专用,不要和其他的重复,比如我就直接用blog名作标签名称。GR不像FB,证书无效也没有关系。

    然后在Settings->Tags中找到这个标签,点后面的广播图标,private就变成了public,后面的链接也随之出现了:

    Share a tag in google reader

    在后面的几个链接中点email a link,填上自己的邮箱,发送,会收到一封信,里面有两个链接:

    • View my shared items
    • Subscribe to a feed of my shared items
    

    使用其中第二行的链接,形式类似:

    https://www.google.com/reader/public/atom/user/12175931868835525338/label/Fwolf%27s%20Blog
    

    这个地址打开基本就是你原来feed的原貌!只是多了GR的一些附加信息,比如Blog标题从Fwolf's Blog变成了"Fwolf's Blog" via Fwolf in Google Reader、文章标题后来多出了个时间,我觉得这些是可以接受的,文章的内容基本不走样。

    最重要的是,这个地址虽然也是https的,但它的证书是Google用于GR的,是有效的,是FB承认的,所以在FB中修改你原来的种子,把这个地址设置为Original Feed,FB就可以正常更新了。

    回顾一下,其实道理很简单,就是用GR"重烧"了一个种子,转发给FB而已。至于Blog程序自带的feed地址就不用再说了吧,其他feed阅读网站也可以使用同样的方式达到目的。

    最后,感谢妖精的提示,嘿嘿。

    Tags: , , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/408

    HTTP–>HTTPS

    我无法愤怒,因为不知道该生谁的气。

    几天前,网站突然无法访问了,没有响应(不是reset),一开始还以为事网络的问题,后来发现不是,用其他国外主机作跳板可以正常访问,也就是说,在出国的网络出口被DROP了。

    我和我们合租的邻居们不会有什么过激的言论,也没有什么PORN的内容,咋就这样了呢。没有客服,原因也没法找了,只能先恢复访问,向MT提交了support request,很快(33分钟后)就得到了的IP,应用在主机上,谁知才2天,又完蛋了。

    现在要了第3个IP(这次的响应速度更快,12分钟),同时准备把所有http访问重定向到https访问,算是有些强制吧,弄了个脚本定时执行。没办法,没有别的招数,如果再被封,我也回天无术了。

    使用https方式访问网站,速度上没有太大的影响(会有一点点的,服务端加密和客户端解密要耗时),关键事客户端会弹出一个非信任证书的提示,接受或者同意或者永久同意即可,FF3会出一个提示页,上面也有按钮可以添加证书为永久信任证书。如果我们每个域名都单独购买证书的话也不是不可以,不过费用不菲。

    http到https的导向其实很容易,用rewrite:

    RewriteCond %{HTTPS} !on [NC]
    RewriteRule (.*) https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
    

    为了使用方便,专门搞了个小脚本,在每个网站的根下添加.htaccess文件,在所有子目录现有的.htaccess文件中添加/更新这段内容。

    和wordpress配合使用的时候,遇到了一些麻烦,浪费了我2天2夜的时间,也许还浪费了1个IP,如果早弄好也许第2个IP就不会出事了。这个问题就是,rewrite后重定向到https又会被重定向回http,把rewriterule仔细得看过来看过去也没找到错误,后来发现问题在wordpress上,只要在设置中把2个网站地址更改为https开头就行了。原先的转向死循环就是因为rewriterule把http转向到了https,然后wordpress发现访问地址和网站地址不一样,又给转向回了http。

    如果无法进入wordpress的管理界面,也可以直接更改数据库,表wp_options中,option_name为siteurl和home这两项,option_id分别是1和46。

    再次赞 (MT)的服务,鄙视国内的网络侦探。

    参考

    好像其他人也有类似遭遇

    Update @ 2008-06-26

    取消了强制https,原因一来感觉https消耗的资源和影响的速度比预想中的要多,二来强制也只是相对的,有点知识的就能够绕开,三来没有证书(即使购买了证书也不可能所有域名合用),麻烦多多,FF里有吓人的警告,IE下要狂点确认,很多工具也不支持https,四来取消了强制并不代表https不可用,革命靠自觉,感觉有危险的时候用户自己就知道用https了。

    Tags: , , ,

    Related posts

    Source: http://www.fwolf.com/blog/post/405