Help us understand the problem. What is going on with this article?

apacheとnginxを共存させapacheから特定のドメインをnginxに転送させるようにしてみた

More than 3 years have passed since last update.

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

コンフィグ周りは以下最低限で設定。他は必要な都度入れる。

/etc/php.ini
date.timezone = Asia/Tokyo
default_charset = "UTF-8"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8

とりあえずhostsの合わせ技でドメインをhostsに登録しながらやる感じで行きます。

/etc/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
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away