MACでPHPをapacheとnginxを共存させてapacheよりproxyで転送させて動かしてみました。
お客さんの環境により、apacheかnginxか異なる場合がありどちらでも対応可能にするために作業しました。
まぁvagrantでサーバ作っちゃえば?ってのもあったけど、結局サーバ作るには知らなきゃできないってことと、あと仮想マシン上げると遅くなるなーってのも気になったってので作業してみました。
そのうちtomcatも連携できるようにしようと考えています。
apacheで https://xxxx1.localhost を表示、xxxx2.localhostのドメインできた場合、10443に転送しnginxで https://xxxx2.localhost で表示させる。apacheでSSLは複合させることにしました。
またDBはMysqlを使用し同一のサーバにおくことにしました。
- データベースのインストール
データベースをインストールする。homebrew及びXcodeは先にインストールしておくこと。これでローカルにMysqlがインストールされます。
・XCodeのライセンスを読みましょう。最後にagreeでOK。
sudo xcodebuild -license
・mysqlを入れる。5.7が今は入るっぽい。
brew install mysql
・grantの仕方。以下のは全権限あげるので注意して使うこと。
mysql -u root
mysql>GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'サーバ名orIP' IDENTIFIED BY パスワード;
あとコンフィグを修正。いろいろ設定ありますが以下最低限いれときました。
$ cat /etc/my.cnf
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
skip-character-set-client-handshake
default-storage-engine=InnoDB
[mysqldump]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
- アパッチ及びPHPの設定
デフォルトで入っているのでインストール作業は特にいらないです。但しPHPは最初動かないかもしれないので以下の定義が有効になっているか確認すること。
sudo vi /private/etc/apache2/httpd.conf
# LoadModule php5_module libexec/apache2/libphp5.so
※ここが#でコメントアウトされているようであれば解除すること。
PHPのバージョンが古い!って方は自分で新しいの入れてください。
以下のコマンドでいまあるPHPのレポジトリを検索し
brew search php
ほしいのを入れれば良い。
brew install php56
レポジトリがなければ追加する。
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
コンフィグ周りは以下最低限で設定。他は必要な都度入れる。
date.timezone = Asia/Tokyo
default_charset = "UTF-8"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
とりあえずhostsの合わせ技でドメインをhostsに登録しながらやる感じで行きます。
127.0.0.1 localhost xxx1.localhost xxx2.locahost #この後ろに追加していきます
次はバーチャルホストの定義
MACの場合 /etc/apache2/extra/ 配下に書きます。
以下はSSLがある場合の設定です。SSLは自前で作ってください。
ワイルドカードで作っておくと便利かもです。
Listen 443
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog builtin
SSLSessionCache "shmcb:/private/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout 300
<virtualHost xxx1.localhost:443>
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCertificateFile /private/etc/apache2/server.crt
SSLCertificateKeyFile /private/etc/apache2/server.key
ServerName xxx1.localhost
DocumentRoot ドキュメントルート
AllowEncodedSlashes On
CustomLog /private/var/log/apache2/ssl_localhost.log combined
ErrorLog /private/var/log/apache2/ssl_error.log
TransferLog /private/var/log/apache2/ssl_access.log
<Directory ドキュメントルート>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
- nginxのインストール
インストールします。
brew install nginx
以下がコンフィグファイルです。
/usr/local/etc/nginx/nginx.conf
中みると./servers/*をインクルードしているので
バーチャルホストを設定する場合は以下フォルダの配下にファイルを作成していきます。
/usr/local/etc/nginx/servers/
またコンフィグを作成したあとは以下でテストします。
以下のようにログがでれば問題なしです。
$ sudo nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
コンフィグは以下の通り。FPMも入れてみてます。
server {
listen 10443;
server_name xxx2.localhost;
root ドキュメントフォルダ;
location / {
fastcgi_index index.php;
fastcgi_pass unix:/usr/local/var/run/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
index index.html index.php;
}
}
FPMの設定も入れたので忘れずに設定
$ sudo vim /usr/local/etc/php/5.6/php-fpm.conf
listen = /usr/local/var/run/php-fpm.sock
listen.mode = 0664
listen.allowed_clients = 127.0.0.1
pm = static
pm.max_children = 1
catch_workers_output = yes
デーモンを起動するようにする。(なんか自分の環境だと~/Library/LaunchAgents/に入れても動かないのでデーモンに入れる。)
sudo ln -sfv /usr/local/opt/php56/*.plist /Library/LaunchDaemons/
デーモンを開始する。
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.php56.plist
なお、FPMのログはここにあります。(homebrew.mxcl.php56.plistの中身見るとかいてあります)
cat /usr/local/opt/php56/var/log/php-fpm.log
- Proxyの設定
これでnginxが起動できたので転送設定をします。
以下の設定を行いSSLをapacheで複合して転送させます。あとは追加していけば複数テストサイトが作成できます。
$ sudo vim /etc/apache2/extra/httpd-ssl.conf
以下追加する
<virtualHost xxx2.localhost:443>
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCertificateFile /private/etc/apache2/server.crt
SSLCertificateKeyFile /private/etc/apache2/server.key
ServerName xxx2.localhost
ProxyPreserveHost On
ProxyPass / http://xxx2.localhost:10443
ProxyPassReverse / http://xxx2.localhost:10443/
</VirtualHost>
これで各種ドキュメントフォルダに何かファイルを配置して
https://xxx1.localhost
https://xxx2.localhost
で見れればOK。
- 以下コマンド集
・アパッチの起動
sudo apachectl start
・アパッチの停止
sudo apachectl stop
・アパッチの再起動
sudo apachectl restart
・mysqlの起動
sudo mysql.server start
・mysqlの再起動
sudo mysql.server restart
・mysqlの停止
sudo mysql.server stop
・nginxの起動
nginx
・nginxの停止
nginx -s stop
・fpmの開始
launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.php56.plist
・fpmの停止
launchctl unload -w /Library/LaunchDaemons/homebrew.mxcl.php56.plist