次に、すぐに利用できるようにPHP-FPMをインストールし、LAMPならぬLNMP環境を構築してみましょう。
PHP-FPMをインストールするとphp5とphp5-commonも同時にインストールしてくれるようです。
ここも、リポジトリが用意されています。
sudo add-apt-repository ppa:ondrej/php5 sudo apt-get update sudo apt-get install php5-fpm
となります。設定ファイルは/etc/php5ですが、apach2, cli, fpm用とそれぞれ作成されています。
michiaki@ubuntu01:/etc/php5/apache2$ tree /etc/php5 /etc/php5 ├── apache2 │ ├── conf.d │ │ ├── 05-opcache.ini -> ../../mods-available/opcache.ini │ │ ├── 10-pdo.ini -> ../../mods-available/pdo.ini │ │ ├── 20-gd.ini -> ../../mods-available/gd.ini │ │ ├── 20-json.ini -> ../../mods-available/json.ini │ │ ├── 20-mcrypt.ini -> ../../mods-available/mcrypt.ini │ │ ├── 20-mysql.ini -> ../../mods-available/mysql.ini │ │ ├── 20-mysqli.ini -> ../../mods-available/mysqli.ini │ │ ├── 20-pdo_mysql.ini -> ../../mods-available/pdo_mysql.ini │ │ └── 20-readline.ini -> ../../mods-available/readline.ini │ └── php.ini ├── cli │ ├── conf.d │ │ ├── 05-opcache.ini -> ../../mods-available/opcache.ini │ │ ├── 10-pdo.ini -> ../../mods-available/pdo.ini │ │ ├── 20-gd.ini -> ../../mods-available/gd.ini │ │ ├── 20-json.ini -> ../../mods-available/json.ini │ │ ├── 20-mcrypt.ini -> ../../mods-available/mcrypt.ini │ │ ├── 20-mysql.ini -> ../../mods-available/mysql.ini │ │ ├── 20-mysqli.ini -> ../../mods-available/mysqli.ini │ │ ├── 20-pdo_mysql.ini -> ../../mods-available/pdo_mysql.ini │ │ └── 20-readline.ini -> ../../mods-available/readline.ini │ └── php.ini ├── fpm │ ├── conf.d │ │ ├── 05-opcache.ini -> ../../mods-available/opcache.ini │ │ ├── 10-pdo.ini -> ../../mods-available/pdo.ini │ │ ├── 20-gd.ini -> ../../mods-available/gd.ini │ │ ├── 20-json.ini -> ../../mods-available/json.ini │ │ ├── 20-mcrypt.ini -> ../../mods-available/mcrypt.ini │ │ ├── 20-mysql.ini -> ../../mods-available/mysql.ini │ │ ├── 20-mysqli.ini -> ../../mods-available/mysqli.ini │ │ ├── 20-pdo_mysql.ini -> ../../mods-available/pdo_mysql.ini │ │ └── 20-readline.ini -> ../../mods-available/readline.ini │ ├── php-fpm.conf │ ├── php.ini │ └── pool.d │ └── www.conf └── mods-available ├── gd.ini ├── json.ini ├── mcrypt.ini ├── mysql.ini ├── mysqli.ini ├── opcache.ini ├── pdo.ini ├── pdo_mysql.ini └── readline.ini
さて、NginxにPHPを認識されるために、/etc/nginx/sites-available/defaultにPHPの設定を追加する必要があります。なお、Nginx実際の動作は/etc/nginx/sites-enable/defaultに従いますので、必ずsudo ln -s /etc/…でシンボリックリンクファイルを作成しておく必要があります。そこのところは、
# You may add here your # server { # ... # } # statements for each of your virtual hosts to this file ## # You should look at the following URL's in order to grasp a solid understanding # of Nginx configuration files in order to fully unleash the power of Nginx. # http://wiki.nginx.org/Pitfalls # http://wiki.nginx.org/QuickStart # http://wiki.nginx.org/Configuration # # Generally, you will want to move this file somewhere, and start with a clean # file but keep this around for reference. Or just disable in sites-enabled. # # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples. ## server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; # root /usr/share/nginx/html; root /var/www/html; index index.html index.htm index.php; # Make site accessible from http://localhost/ server_name localhost; location / { # First attempt to serve request as file, then # as directory, then fall back to displaying a 404. try_files $uri $uri/ =404; # Uncomment to enable naxsi on this location # include /etc/nginx/naxsi.rules } # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /usr/share/nginx/html; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; } }
としてあります。/etc/php5/fpm/php.iniでcgi.fix.pathinfo = 0;として下さいとあるので、そうします。rootディレクティブがドキュメントルートを指定しますので、Ubuntu14.04LTSのデフォルトを尊重して/var/www/htmlとなったディレクトリを指定しておきました。ここに、
と書いたinfo.phpを作っておき、sudo service nginx restartと再起動し、http://localhost/info.phpとすると、下図のようになります。
これで、mysql-server, mysql-client, php5-mysqlをaptでインストールすると、LNMP環境が出来上がります。そこで、wordpressをダウンロードして、/var/www/wordpressにインストールし、次のようにserver { }を記入するとWordpress環境が出来上がります。
# for WordPress server { listen 80; # listen [::]:80 default_server ipv6only=on; root /var/www/wordpress; index index.php index.html index.htm; # Make site accessible from http://localhost/ server_name www.wordpress.jp; # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /usr/share/nginx/html; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
ただし、SEO対策のためのパーマリンクの設定ファイル.htaccessが含まれており、その内容が次のような場合には、serverデイレクトリに追加設定が必要になります。
# BEGIN WordPress RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] # END WordPress
このファイルは、SEO対策のためにGoogleのロボットが探しやすいようにURLをパーマリンク機能を使って設定し直した場合に、Wordpressがindex.phpを使ってURLを書き直すルールを定めたファイルです。Nginxでは.htaccessは利用できませんので、次のリライトルールをNginxのserverディレクティブに追加する必要があるとのことです。ただし、Wordpressの3.9では、関連の.httaccessやhtaccessはありませんでした。
location / { # 要求されたURLが既存のファイル、ディレクトリ、シンボリックリンクにに # 対応していなければ、URLをindex.phpに置き換える。 if (!-e $request_filename) { rewrite ^(.+)$ /index.php last; } }
ということで、最終的には下記のようになります。
# for WordPress server { listen 80; # listen [::]:80 default_server ipv6only=on; # root /usr/share/nginx/html; root /var/www/wordpress; index index.php index.html index.htm; # Make site accessible from http://localhost/ server_name www.wordpress.jp; location / { if (!-e $request_filename) { rewrite ^(.+)$ /index.php?url=$1 last; break; } } # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests #location /RequestDenied { # proxy_pass http://127.0.0.1:8080; #} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /usr/share/nginx/html; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } }
こうしておいて、/etc/hostsに、192.168.1.xx www.wordpress.jpの行を付け加えて、http://www.wordpress.jpとすると、次のようになります。
パーマリンクの設定も問題なく出来ています。
次は、CakePHP2の設定例です。