• Ubuntuに関連したハード、ソフトの備忘録サイトです

ハイパフォーマンス・サーバーNginxを使おう(その03)ーPHPのインストールと設定

次に、すぐに利用できるように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とすると、下図のようになります。

nginx03

 

これで、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とすると、次のようになります。

nginx05

 

パーマリンクの設定も問題なく出来ています。

nginx06

 

次は、CakePHP2の設定例です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA