nginxでhttp2(2):PHPを動かす

[VirtualBox]:https://www.virtualbox.org/wiki/Downloads
[Ubuntu]:http://ftp.riken.jp/Linux/ubuntu-releases/
[nginx]:http://nginx.org/
[Launching nginScript and Looking Ahead]:https://www.nginx.com/blog/launching-nginscript-and-looking-ahead/
[nginScript Documentation]:https://www.nginx.com/resources/wiki/nginScript/
[HTTP/2 and SPDY indicator]:https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin?hl=ja

関連記事:

 * [VirtualBox+UbuntuにLEMP環境構築]
 * [nginScriptを試す(1):nginxをソースコンパイル]
 * [nginxでhttp2(1)]

[VirtualBox+UbuntuにLEMP環境構築]:http://qiita.com/dozo/items/1c21c8758121c366ba90
[nginScriptを試す(1):nginxをソースコンパイル]:http://qiita.com/dozo/items/98077bdd9cbf928cc422
[nginxでhttp2(1)]:http://qiita.com/dozo/items/866b2e0be6fcc0b46697

次はPHPを動かす

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪
***
------------------- ↓ 余談はここから ↓-------------------
HTTP/2の動作確認はできたので、
今度はアプリケーションサーバを作ってみる。
PHP側で特に設定はいらないので、
インストールはdebianのパッケージを使用した。

リバースプロキシで受けてもいいけど、
今回はSOCK経由で受けてみようと思う。

ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪
***
------------------- ↓ 本題はここから ↓-------------------

# [nginx]をHTTP/2対応のサーバにPHPを入れる

HTTP/2対応の[nginx]構築は前回やったのでそっちを見てほしい。

## PHPインストール

```shell-session
sudo apt-get install php5-fpm
```

## nginxの調整

### 設定ファイル調整

nginx側にsockのpathを登録

```:/usr/local/nginx/conf/nginx.conf
http {
    server {
        listen       443 ssl http2;
        server_name  localhost;
        ・・・
        location ~ \.php$ {
            root           html;
        #    fastcgi_pass   127.0.0.1:9000;
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}
```

### 再起動
```shell-session
sudo /usr/local/nginx/sbin/nginx -t # 設定変更確認
sudo /usr/local/nginx/sbin/nginx -s quit # 終了
sudo /usr/local/nginx/sbin/nginx # 起動
```

## 動作確認

```php:/usr/local/nginx/html/index.php
<?php phpinfo();
```

![nginx07.PNG](https://qiita-image-store.s3.amazonaws.com/0/40697/c7128d7a-40ac-eb92-9e33-211088eaf058.png)


ヾ(・ω<)ﾉ"　三三三●　ⅱⅲ コロコロ♪
***
------------------- ↓ 補足はここから ↓-------------------

さて、動作確認はできたので、
ここではリライト方法について考えよう。
最近のフレームワークならばURLを綺麗にする(SEOに最適なURLにする)という手法が一般的に実装されている。
対応方法はフレームワークによってまちまちであるが、
主に以下の二つだと思う。

* クエリストリング
特定のクエリストリングをURLのパラメータとして取り込む方法

* PATHINFO
cgiのPATHINFOをパラメータとして取り込む方法


# リライト運用

#### クエリストリング

PHPファイルをindex.php
クエリストリングのパラメータ名をqとすると

```:/usr/local/nginx/conf/nginx.conf
http{
    ・・・
    server{
        listen 443 ssl http2
        ・・・
        root   html;
        index  index.html index.htm;
        location / {
            try_files = $uri $uri/ /index.php?q=$uri&$args;
        }
        location ~ \.php {
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }
    }
}
```

#### PATHINFO
PHPファイルをindex.phpとすると

```:/usr/local/nginx/conf/nginx.conf
http{
    ・・・
    server{
        listen 443 ssl http2
        ・・・
        root   html;
        index  index.html index.htm;
        location / {
            try_files = $uri $uri/ /index.php$uri?$args;
        }
        location ~ [^/]\.php(/|$) {
            fastcgi_split_path_info ^(.+?\.php)(/.*)$;
            fastcgi_pass   unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
            fastcgi_param  PATH_INFO        $fastcgi_path_info;
        }
    }
}
```