CDEFGAB 1010110

挖了太多坑,一点点填回来

CakePHP 的 Nginx 设置

cakephp, linux, nginx, php

在自己的笔记本上弄了个 CakePHP + Nginx 的组合,做了基本设置。

由于 80 端口已经被 Apache 占用,因此我指定 Nginx 监听 81 端口。

首先记得安装 Nginx 和 PHP5-FPM 模块:

1
$ sudo apt-get install nginx php5-fpm

然后记得编辑 /etc/php/fpm/php.ini ,并设置 cgi.fix_pathinfo=0,接着重启 php-fpm

Varnish 负载均衡

linux, varnish

忙了一段时间,总算又有空写总结了。今天总结一下用 varnish 做负载均衡。

常用的负载均衡方式有 LVSNginxHAProxy 等等,其实 varnish 作为一个反向代理软件,也可以起到负载均衡的作用。在 varnish 的官方 wiki 上有详细的介绍:https://www.varnish-cache.org/trac/wiki/LoadBalancing 。我们来看看如何设置。

发现了 Redis Commander 的一个 Bug

js, linux, nodejs, redis

长久以来,我的工作平台是 Ubuntu ,而我用来管理 redis 的工具是 redis-commander

之前我由于做了 redis 的主从备份,开启了本地的 6379 端口和 6380 端口作为 redis 的两个实例,前者作为主机,后者是从机。并且在 redis-commander 的管理界面上分别添加了 6379 和 6380 的 0 号数据库。后来为了提高机器的性能,我关闭了 6380 的实例,并删除了这个实例在 redis-commander 的 tree-view 中对应的分支。结果后来再进入 redis-commander 的时候,左边的实例管理 tree-view 消失了,检查控制台输出时,发现提示是无法连接到 6380 端口。

为什么我已经删掉了对应的分支,但是 redis-commander 还是会请求 6380 端口呢?

一点废话

bootstrap, cakephp, js, linux

有几天没写博客了,最近这几天一直在看文档学习。 PHP 、Python 、Ruby 的各种微框架都在看—— Flask 、Sinatra 、 Padrino 、Silex 、Slim 、 Limonade 、 Flight,还有一个最近比较火的 Laravel 4 。看了这么多,却不知道自己能用上的能有多少,如此多的微框架,真正用起来的时候,还是要自己造轮子。用了很多年的 CakePHP ,还是感觉这个东西最好用,估计我这一辈子就和 CakePHP 一起活了,呵呵。

CakePHP 事件机制

cakephp, php, 设计模式

内置事件机制的编程语言不多,而绝大部分编程语言都是靠观察者设计模式来实现这一机制的。而引入事件机制的目的之一,就是要解耦,让代码能够更加容易维护,让一个对象只做自己该做的事情,不要去做别的对象应该做的事情。

现在 CakePHP 中的 Controller 和 Model 中,都有 getEventManager() 方法,这就相当于观察者模式中的被观察者,而我们自己编写的事件就是观察者。在别的地方编写代码注册事件之后,在一个地方进行事件的广播,从而调用所有的观察者方法。

Git 设置

git, linux, ubuntu

花了两天时间,看了关于 git 的资料,稍微整理一下,挖个坑先。

首先在 ubuntu 上更新 git 的源。

1
2
3
4
5
$ sudo apt-add-repository ppa:git-core/ppa

$ sudo update

$ sudo apt-get install git

Bootstrap 初学习

bootstrap, css, js

花了一个下午的时间学习了 bootstrap ,用的版本是 2.3.2 ,暂时不用 bs3 还是想保守一点先用 2.x 这个比较成熟的框架做点东西出来。

今天的成果就是一个页面 bootstrap 速查卡。写得很简陋,列出了一些平常开发时会用到的元素,方便以后开发的时候可以很快就能利用起来。

更详细的文档可以在 http://www.bootcss.com/scaffolding.html 查到。

今天花了很多时间在学习 bootstrap 上,有些心得暂时来不及写了。过几天时间补上。

Have a nice day!

Varnish 测试(2)

linux, test, varnish

继续上次的话题。

加上了反向代理之后如何获取客户端 IP ?

由于 varnish 是处于 web 服务器之前的位置,所以 varnish 实际上可以看作是一个 reverse proxy 的服务器。后端的代码要获取客户端 IP 地址的话,如果不做设置,获取的实际上是 varnish 服务器的 IP 地址。比如在 PHP 中经常使用到的 $_SERVER['REMOTE_ADDR'] 这个变量,如果没有 varnish 做代理,就是正确的客户端 IP ;如果在 varnish 之后使用的话,只能获得 varnish 服务器的 IP 地址。所以,我们得对 varnish 做一点特殊的处理。

还好 varnish 的配置文件里已经给我们默认写出了这段代码,我们只需要在自己的代码中 copy 过来即可。直接在 vcl_recv 这里补充就行。

Varnish 测试(1)

linux, test, varnish

前天安装配置了 varnish ,但是在生产环境下,还是有很多更复杂的情况会出现,有时候还是得多考虑一下可能会发生的问题,自己模拟一下,找到解决的办法。测试代码是用 CakePHP2.3.8 编写的,代码如下:

1
2
3
4
5
6
7
8
9
10
11
// controller
class TestsController extends AppController {
    public $uses = array();

    public $autoLayout = false;

    public function index() {
        $content = "This is a text!";
        $this->set("content", $content);
    }
}
1
2
3
4
5
// view
<div>
    <h1>Hello, world!</h1>
    <p><?= $content;?></p>
</div>

Varnish 的安装和配置

linux, ubuntu, varnish

在 Ubuntu 下安装 varnish 很简单,直接用 apt-get 安装即可。

1
2
3
4
5
6
$ sudo apt-get install varnish

$ varnishd -V
varnishd (varnish-3.0.2 revision cbf1284)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2011 Varnish Software AS

默认版本是 3.0.2 ,挺新的,现在 varnish 的最新 dev 版本是 3.0.4 ,这个版本足够用了。