2015/10/01 (木)

2015-10-01:HTTPSなサーバのサーバ証明書とその署名中間CA

Cybertrust でサーバ証明書を作って最近更新したサーバが、PC のブラウザからは問題なく閲覧できるも、Android スマホや iPhone からだと証明書エラーの警告言われるよ、と指摘されてあわてる。
今回のサーバ証明書は Cybertrust Japan Public CA G3 という中間CA証明書で署名されたもので、これは Baltimore CyberTrust Root というルート証明書で署名されている。Baltimore CyberTrust Root は各端末に入っているのよね。なんでだー、と。

サーバは nginx。
で、設定ファイルで証明書を指定するのは ssl_certificate のなんだけど、これ、Cybertrust からもらったサーバ証明書だけじゃなく、中間CA証明書も Cat でつなげたファイルにする必要があったというのがオチ。
PC でしか確認してなかったのは失敗だった。。。

comment

2015/08/17 (月)

2015-08-17:wordpress の「無効な投稿タイプ」と nginx 設定

実はしばらく前から wordpress のダッシュボードで新規投稿をしようとすると「無効な投稿タイプ」と言われて何もできない、という状況に陥っていた。
いい加減なんとかしようと調べたら、原因は nginx の設定がよろしくなかったね、というオチ。
nginx + php5-fpm + wordpress という構成で、さらには wordpress をサブディレクトリ運用という通常でないカタチにしているもので、うまく動作しているようでたまに罠があるのね。
結論としては nginx の設定で

    location ^~ /person/waasuke {
        index index.php index.html;
        try_files $uri $uri/ /person/waasuke/index.php?$args;

        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_split_path_info ^(/person/waasuke)(/.*)$;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            fastcgi_param PATH_INFO $fastcgi_path_info;
            fastcgi_param PATH_TRANSLATED $document_root$fastcgi_script_name;
        }
    }

とすることで解決(/person/waasuke の部分は読み替えてください)。

以下、経過。
原因を探るために、wordpress にログを吐かせる。
これは wordpress の wp-config.php に

define('WP_DEBUG', true);
if ( WP_DEBUG ) {
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );
    @ini_set( 'display_errors',0 );
}

と書き込む。これで wp-contents/debug.log にログが吐き出されるようになる。
この設定でログを監視しながらくだんの新規投稿のページに行くと、

PHP Notice:  Undefined offset: 1 in /xxxxxx/wp-includes/vars.php on line 31

と気になる出力が。
当該行を見に行くと、

if ( is_admin() ) {
        // wp-admin pages are checked more carefully
        if ( is_network_admin() )
                preg_match('#/wp-admin/network/?(.*?)$#i', $_SERVER['PHP_SELF'], $self_matches);
        elseif ( is_user_admin() )
                preg_match('#/wp-admin/user/?(.*?)$#i', $_SERVER['PHP_SELF'], $self_matches);
        else
                preg_match('#/wp-admin/?(.*?)$#i', $_SERVER['PHP_SELF'], $self_matches);
        $pagenow = $self_matches[1];

どうやら、$_SERVER[‘PHP_SELF’] のチェックでうまくいってない模様。
で、nginx から値がうまくわたってないのね、ということで冒頭の設定になった次第。

comment