SetEnvIf X-Forwarded-Port 443 HTTPS=on

Apache環境変数HTTPS = "on" とかしかチェックしないクソライブラリのために、LBの裏側にいる Apache でこんな設定を書きました、という話。

SetEnvIf X-Forwarded-Port 443 HTTPS=on

X-Forwarded-Proto "https" のほうがいいのかもしれない?

まぁあと変数名なんだっけ、と調べるときにPHPの$_SERVER変数をつかったせいで、HTTP_X_FORWARDED_PORT とかみてていや当然なんだけど HTTP_ とか頭につかないし _ は - だし、とかで無駄に時間を使ってしまって、もうほんとPHP脳とかしょうもねえな、と思いました。
がんばります。

ec2-run-instances

$ ec2-run-instances ami-xxxxxxxx --availability-zone ap-northeast-1b --instance-type m1.small --instance-count 1 --group default --key hoge
RESERVATION     r-xxxxxxxx      68778599xxxx    default
INSTANCE        i-xxxxxxxx      ami-xxxxxxxx                    pending hoge  0               m1.small        2011-07-23T08:02:04+0000        ap-northeast-1b aki-xxxxxxxx                    monitoring-disabled                                   instance-store                                          xen             sg-xxxxxxxx     default

こんな感じで起動する。
tag付けみたいなものはあとからする感じのようだ。

$ ec2-create-tags i-32ade233 --tag="Name=hoge-1" --tag="Role=web" --tag="Service=fuga"
TAG     instance        i-xxxxxxxx      Name    hoge-1
TAG     instance        i-xxxxxxxx      Role    web
TAG     instance        i-xxxxxxxx      Service fuga

WordPress Plugin 開発時に参考にすべきページ

要するに公式ドキュメントなわけだが。

Indirect modification of overloaded property Hoge::$fuga has no effect

的なエラーがでた。
__get() によって返される値は参照ないから変更したって意味ないよって言う事。

<?php
class Hoge
{
  private $a = array();
  public function __get($name) { return $this->a[$name]; }
  public function __set($name, $value) { $this->a[$name] = $value; }
}

$hoge = new Hoge();

に対して、

$hoge->fuga = 1;

的なことをした場合、これは、__set() が呼ばれるのはご存知のとおりだけど、例えば、

$hoge->fuga[1]['hoge'] = 1;

などとしたら、配列アクセスされた時点で __get() が呼ばれる。で、しかもその値はもちろん値返しされてるわけなので、それに代入とかしても全然意味ないよ、と言われている。

まあ、意外と分かりづらい且つ発生しにくいエラーかもしれないなあ。

nginx + PHP-FPM な構成で PATH_INFO を受け取る

  • @ /etc/nginx/conf.d/*
    location ~ /index.php/ {
        #fastcgi_split_path_info ^(.+\.php)(.*)$; # <- この設定は、nginx 0.7 以降じゃないとないらしい
        fastcgi_pass   backend;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /usr/local/var/nginx-www/dlt/html$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param  PATH_INFO        $fastcgi_script_name;
        # ... 他にも色々設定を...
    }

fastcgi_param 的なやつで環境変数的なアレに、$fastcgi_script_name を渡してあげるのが良いのね。

dekiwiki で Site settings could not be loaded

yum update したら動かなくなった。
バージョンがあがって、APIの起動ユーザがapacheじゃなくてdekiwikiになったらしい。

$ sudo useradd dekiwiki

とかしてOK。あとなんか色々エラーもでたけどリスタートしてたら治った。

まーなんかあれだね、ブラックボックスになってる部分があるのは追いづらくていやだな。