復習。
以前はsuPHPを試したこともあるけど
d.hatena.ne.jp
php 5.3から各コンテンツディレクトリで.user.ini 置くことで
設定上書きできるようにもなったので、apacheとphpだけのsimple構成を復習する。
概要
- suexecしてcgiはユーザ権限で動かす
- phpはmoduleではなくcgi modeで動かす
- ユーザコンテンツはexample.com/~user1/ ではなくて個別のvirtualhost user1.example.com でホストする
- ユーザのホームディレクトリは/home/username (/home以下にまとめる)
apache
'./configure' \ '--prefix=/usr/local/apache-2.2.29' \ "--enable-suexec" \ "--with-suexec-caller=apache" \ "--with-suexec-docroot=/home" \ "--with-suexec-logfile=/var/log/httpd/suexec.log" \ ### 以下その他のmodule 適当に make && make install ln -s /usr/local/apache-2.2.29 /usr/local/apache2
なお、--with-suexec-userdir=public_html はapacheのUserDir (/home/user1/public_html <=> example.com/~user1/) に関するものなのでここでは設定不要
php
cgi版を入れるので--with-apxs2は指定してはいけない。
'./configure' \ '--prefix=/usr/local/php-5.6.10' \ '--with-libdir=lib64' \ ### 以下適当 make && make install ln -s /usr/local/php-5.6.10 /usr/local/php-5.6 cp php.ini-production /usr/local/php-5.6.10/lib/php.ini
- php.ini
cgi.force_redirectがdefault 1なので0に変更。
expose_phpなど、その他はいつものように設定
cgi.force_redirect = 0
apache virtualhost 設定
suexecをするのでphp-cgiはユーザ権限にして、かつdocroot以下にする必要がある。
つまり、ユーザ増えるごとにphp-cgiをコピーする必要がある。
これがやや面倒くさいけど仕方ない。(他の方法思いつかない)
suexecをせずに単にphpをcgi modeで動かすだけなら、共通の場所に置いたphp-cgiを利用できる。
sampleを見るとphp-cgiはScriptAliasの/cgi-bin/ に置くのを見かけるけど、virtualhost内でuserが好き勝手に使う可能性のある/cgi-bin/ のpathはあんま使いたくなかったのでちょい変えてみるパターンで。この辺は好みで適当に。
mkdir /home/uesr1/php-cgi/ cp /usr/local/php-5.6/bin/php-cgi /home/user1/php-cgi/php56-cgi chown -R user1:user1 /home/user1/php-cgi/
php56-cgiと名前を変えた理由は、php 5.X系の場合はphp55-cgiを置いてあげれば
割といつでも変更できるかなと思ったので。
ここはmod_actionで指定するだけで目に見える表の部分にに出てこない部分なので割とどうでも良い。
- httpd.conf
<FilesMatch "^\.user\.ini"> Order allow,deny Deny from all Satisfy All </FilesMatch>
- virtualhost
<VirtualHost *:80> DocumentRoot /home/user1/public_html ServerAlias user1.example.com SuexecUserGroup user1 user1 ScriptAlias /php-cgi/ /home/user1/php-cgi/ Action php-script /php-cgi/php56-cgi AddHandler php-script .php <Directory /home/user1/php-cgi> Options followsymlinks execcgi Order deny,allow Deny from all Allow from all </Directory> ### あとは各ユーザごとのdocumentrootの設定 </VirtualHost>
apache moduleでphpを読み込んでいないため、virtualhost内、.htaccessでphp_valueなどは使えない。代わりにユーザディレクトリ以下に.user.ini を置いてini形式でユーザ側で設定する。
# key = value max_post_size = 20M