Author: 芳草苑主

  • Contabo and FreePBX

    前几天我写了一篇长文《避坑Contabo》,不知怎么的消失了。不想花时间重新写,但又忍不住不写,毕竟最近两周我花了很多时间在 Contabo 的 VPS 里捣鼓 FreePBX,我就换个角度说一说 Contabo 和 FreePBX。

    去年黑五期间我新购了英国 VPS,用来替换德国 VPS。两周前我开始试用英国 VPS,同时把 FreePBX 从 16 升级到 17。本以为是很简单的一件事,装好后测试一下,发现分机无法接听外线,具体症状是分机响铃正常,按接听键,显示已接听,但外线显示一直在振铃,直到无人接听超时。

    我花了近两周时间才确定是 FreePBX 所在的路由器的问题,也就是说数据中心机房的问题,就想把 VPS 从英国迁回德国,毕竟之前没碰到过这种莫名其妙的问题。

    我担心我的问题不具有普遍性,Contabo 没发现潜在的问题就不愿意帮我迁移。于是我写了一篇长长的邮件,千方百计想证明我碰到的问题不是我这端的问题,是英国机房的问题,既然英国机房找不到问题所在,就帮我迁回德国吧。

    结果,Contabo 短短回了封邮件,告诉我迁移 VPS 可以登录账号自助操作。哎,真是浪费表情。

    顺便提一下,迁回德国后,FreePBX 就一切正常了。可怜我浪费两周时间就得出这么个结论。

  • 消失的 Post

    前几天写的一篇 Post《Contabo 避坑》,今天发现不见了。

    难道有人黑入芳草苑的后台删帖?

    为什么要黑我?

  • No more www

    以前网站域名总是冠以 www,后来谁说 www 是多余了,建议大家不要拖泥带水,域名前裸奔成了时尚。

    但我总是很念旧,如果以前是带 www 访问的,我倾向于保留这个传统,直到我发现——

    有个静态网站托我管,N 多年了也不更新,我自作主张决定送他一张 Let’s Encript 证书。可是 Certbot –nginx 在修改带 www 的 conf 文件后,造成访问来回重定向(无法访问)。我只好放弃 www 传统,Certbot 就能给我生成一个正常的 conf。

    附 Certbot 不能自主修改的带 www 的 conf

    ## Html only

    server {
    listen 80;
    server_name www.example.com;
    root /document_root/public_html;
    index index.html;
    }

    # Redirect undesired domains

    server {
    listen 80;
    server_name example.com *.example.com;
    return 301 $scheme://www.example.com$request_uri;
    }

    附 Certbot 能自主修改的不带 www 的 conf

    ## Html only

    server {
    listen 80;
    server_name example.com;
    root /document_root/public_html;
    index index.html;
    }

    # Redirect undesired domains

    server {
    listen 80;
    server_name *.example.com;
    return 301 $scheme://example.com$request_uri;
    }

    我喜欢捕捉 undesired domains,这也是困扰 Certbot 的一个因素。但为了拥抱 Certbot,还是彻底放弃传统的 www 吧。

  • Use long established business for your hosting

    前段时间用了一个名不见经传的公司的 VPS 产品。当时看它性能不错才切换过去,但是它操作极不规范,到期前不催续费,我想主动续费都没有链接可以让我续。突然有一天,它意识到有未收账款,也不通知我付款,就停了我的帐号。然后我付款,重新开通服务。中间中断了大约半天的服务,让我损失惨重——那天以后来自 Google 和 Facebook 的流量突然就下降了。这也让我百思不得其解:

    1. 我知道一个网站的 uptime 是很重要的指标,但是,好像影响过头了?以致我怀疑流量下降不是 uptime 的问题,但转折点就在宕机的那一天,是巧合吗?
    2. Google 和 Facebook 使用同样的算法?

    总之,不正规的公司是绝对不敢用了。离开之前,我自己清空数据,以下一行命令删除 MySQL 里所有的数据库,抄来的,很方便。

    mysql -uroot -pPASS -e "show databases" | grep -v Database | grep -v mysql| grep -v information_schema| grep -v test | gawk '{print "drop database " $1 ";"}' | mysql -uroot -pPASS
  • Magento not rebuilding image cache

    I changed a server for Magento sites. When I migrated the sites, they looked fine. However after I flushed Magento image cache, all sites stopped working. Web pages were not completed. The code stopped rendering after the first product image’s “src”. But there was no error message afterwards.

    At first I thought it was file permission problem. But it was not.

    Then I thought it was some rubbish left over after flushing cache. So I took the advice by removing the folder media/catalog/product/cache and clearing everything under var. But the problem was still there.

    Then I realised it was php not generating images for Magento. Magento requires php-gd to generate images. My new server did not have php-gd installed. If I was installing a Magento instance, I would not get through. But I migrated the sites. So they “looked” fine.

    After installed php-gd, product images came back.

    By the way, Magento requires some other PHP extensions to run. I took the chance to install them all.
    pdo_mysql
    simplexml
    mcrypt
    hash
    gd
    dom
    iconv
    curl
    soap

  • Ngnix 502 bad gateway error after a recent php-fpm update

    I recently updated php-fpm from 5.4.16 to 5.5.16. After the update, Nginx comes up with 502 bad gateway error. Googling the error pointed me to look into permission of php socket file.

    In php-fpm 5.4.16, if no value is given to listen.mode, php socket file is assumed to 0666.

    But in php-fpm 5.5.16, if no value is given to listen.mode, php socket file is assumed to 0660.

    That is why Nginx no longer has permission to php socket and occurs 502 error.

  • A simple multi-skills test

    Excellent Excel
    Excellent Excel
    考考各位看官的猜想、推理、数学、EXCEL能力:

    新建一份EXCEL表格(Google Spreadsheet 也行),在 A1:I9 的每个单元格内输入以下公式——

    =IF(COLUMN()>ROW(),"",VLOOKUP(COLUMN(),$L$1:$M$9,2)&VLOOKUP(ROW(),$L$1:$M$9,2)&IF(COLUMN()*ROW()<10,"得","")&IF(COLUMN()*ROW()<10,VLOOKUP(COLUMN()*ROW(),$L$1:$M$9,2),VLOOKUP(INT(COLUMN()*ROW()/10),$L$1:$M$9,2)&"十"&VLOOKUP(MOD(COLUMN()*ROW(),10),$L$1:$M$10,2,FALSE)))

    请问,应该在表格的什么地方填入什么预设值,才能让 A1:I9 的内容变得有意义?

    提示:有 20 个单元格需要预设值。

  • 自杀乎?自杀也

    【编者按】我估计是虚构的:

    image

    1994年美国报界评出十大最离奇的新闻。其中一件新闻是这样的:
      
    这一年的3月23日,纽约警察总局的法医检查了一具尸体,得出结论:此人死于头部枪击。
      
    死者名叫罗纳德·奥普斯,从他留下的遗书中得知,他本来是想从一幢十层高的楼的顶部跳下自杀的。然而,当他跳楼后身子经过第九层楼前时,一颗子弹从窗户里射出,将他当场打死。
      
    警方经过调查发现,死者和开枪的人都不知道一个情况———当时八楼正在施工,工人们在那里刚装了一张安全网,也就是说罗纳德·奥普斯如果不是被枪击而亡,他的自杀计划其实是不能如愿的。
      
    然而,根据法律,一般说来,一个人如果实施有计划的自杀并且最终身亡了,即使自杀过程发生变化未能如自杀者所愿,那么依法也应该认定这个人是自杀。

    可是,当警方对九楼射出的子弹进行调查后,案子的性质又有了变化。当时,九楼的一对老夫妻发生了口角,正在吵架,老先生拿出了一把枪恐吓老太太,后来又扣动了扳机,但是子弹没有打中老太太,而是从窗户飞了出去击中了罗纳德·奥普斯。根据法律,一个人如果想杀甲,却错杀了乙,那么仍然应该判这个人对乙犯了杀人罪。因此,此案应该是一桩凶杀案。
      
    当老先生面临杀人罪的指控时,老先生和老太太都一致表示,他们俩当时都以为枪里面是没有子弹的。老先生解释说,用没有装子弹的枪恐吓老太太,是他许多年以来与老伴争吵时一直有的一种做法。他没有杀害老伴的意图。如果老两口的话属实,那么这就是一起误杀的案子。
      
    问题的关键就是子弹是在什么样的情况下由什么人装进去的。警方在调查中找到了一名证人,这名证人证明在案发六周之前亲眼看到这对老夫妻的儿子往这把枪里面装了子弹。警方从更深入的调查中得知,因为老太太决定停止给成年的儿子经济支持,这个儿子怀恨在心,起了杀意。他知道他的父亲有用枪恐吓老太太的习惯,所以就给枪装了子弹,希望借父亲之手杀了母亲。既然这个儿子明知给枪装子弹会有什么样的后果,那么即使他没有亲自扣动扳机,他也应该被指控犯了杀人罪。所以,此案就成了老夫妻的儿子对罗纳德·奥普斯犯下了杀人罪。

    但是,峰回路转,警方在进一步调查后发现,这对老夫妻的儿子其实就是死者罗纳德·奥普斯本人。他由于借刀杀人之计一直没有得逞,心生沮丧,于是,在1994年3月23日这一天他决定从十层高的楼顶跳楼自杀,然而却被从九楼窗户射出的子弹打死了。也就是说,罗纳德·奥普斯自己杀了自己,所以此案最后仍被认定为是一桩自杀案。

  • I am paving my driveway

    之前找的波兰工人干的活实在让我忍无可忍,过完圣诞节我就没让他继续 driveway 的活,留下一个烂尾工程一直没找人接着干。

    image

    image

    自我反思一下,其实我早就不满意这个工人,我之所以忍了他那么长时间,其实是因为我懒:懒于换人、懒于监工,总觉得他干活总比我干活好一些吧。

    今天天气真好。我突然想,为什么不自己动手呢?虽然早有人警告说,做 driveway 要找 professionals,否则 driveway does not last。但是,专家者,砖家也,在 driveway 这件事上,我就直接无视了。Driveway 再不济,也不至于让上面停的车陷泥里去了吧。

    所以,我决定自己动手完成这活。今天花了两个小时,铺了大约 50 块 paving blocks,1 平米,自我感觉跟波兰工人成果差不多。就这个效率,两个月也能完工。

  • SIP requires very reliable network

    我的 SIP 服务器 FreePBX 暂时还放在一个非常不可靠网络环境下,这在前文《FreePBX working with an unstable router》有提及,一有 SIP 不正常的风吹草动,我就成了惊弓之鸟。

    今天早上我在家,发现 SIP 分机又出现单向语音的症状,测了多次,十次有九次是单向语音,主要是主叫方听不到对方声音。我在服务器上看来看去看不出原因,不管三七二十一,又重启了一次,仍没解决问题。

    单向语音是 SIP 很常见的问题,在用 FreePBX 之初,我曾花大力气去解决,找到一套行之有效的办法。怎么今天又出现了老问题了?我一阵头疼。

    我家的网络宽带路由器确实不太好,但一开始我没意识到是它的原因,因为浏览网页是正常的,再说 SIP 能注册,也能接通。我排查了很久,无意中将手机 Wi-Fi 连接关闭,用 3G 连接网络,手机的 SIP 客户端立刻就能双向语音,一切正常。我这才想到是网络宽带路由器的原因,把它重启了一遍,SIP 通话就正常了。

    看来 SIP 对网络的要求非常高,而且是服务端、客户端双方的要求都很高。