すずかのメモ帳

最近VRの世界に突入した人のメモ帳

nginx+hhvm+Framework全般のリダイレクト設定

hackを使い始めてもう1週間?2週間?たちました。最近時間すぎるのすごい早いです・・・・。

今回の記事では、hackでフレームワークを利用するにあたり、.htaccessに記述していたリダイレクトの設定をnginx用に移行してみよう!という内容です。

構築環境

hhvmでサーバを立てることもできるのですが、今回はnginx+fastcgiを利用して構築します。
環境は、前の記事で構築した環境を利用します。インストールなどは過去の記事を参照してください。

サーバ バージョン
nginx nginx/1.4.0
hhvm HipHop VM 3.2.0 (rel)

今回の設定では、以下のファイルをいじいじします。
/etc/nginx/conf.d/hhvm.conf
/etc/nginx/fastcgi_params

server_nameとrootは各自の環境に変更してください。

vim /etc/nginx/conf.d/hhvm.conf

server {
    listen       80;
    server_name  hhvm.example.com;
    root   /path/to/webroot;

    # root directory
    location / {
        index  index.hh index.php;
        if (!-e $request_filename) {
            rewrite ^(.+)$  /index.hh last;
        }
    }

    #index
    location /index.hh {
        fastcgi_keep_conn on;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.hh;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    #static contents
    location ~ ^/(img|css|js|files)/(.+)$ {
        try_files /$1/$2 =404;
    }
}

次に、fastcgi_paramsですが、ここの設定を誤るとhack,php-fpm側の$_SERVERの値がおかしくなるので正しく設定してください。

cp /etc/nginx/fastcgi_params /etc/nginx/fastcgi_params.orig
vim /etc/nginx/fastcgi_params

fastcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;

fastcgi_param   SCRIPT_FILENAME         $document_root$fastcgi_script_name;
fastcgi_param   PATH_INFO               $fastcgi_path_info;
fastcgi_param   PATH_TRANSLATED         $document_root$fastcgi_path_info;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   REQUEST_URI             $request_uri;
fastcgi_param   DOCUMENT_URI            $document_uri;
fastcgi_param   DOCUMENT_ROOT           $document_root;
fastcgi_param   SERVER_PROTOCOL         $server_protocol;

fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR             $remote_addr;
fastcgi_param   REMOTE_PORT             $remote_port;
fastcgi_param   SERVER_ADDR             $server_addr;
fastcgi_param   SERVER_PORT             $server_port;
fastcgi_param   SERVER_NAME             $server_name;

fastcgi_param   HTTPS                   $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;

これでstatic contentsに指定したディレクトリ意外のリクエストが/index.hhに内部リダイレクトされました。

付け焼き刃程度の設定なので、もう少しチューニングした方がいいかなとは思いますが、とりあえずうごけばいいだろ!な感じで。