NginxでRuby on RailsとPHPを共存させる [CentOS]
共存させるにはNginxの「*.conf」ファイルとRailsプロジェクトの「config/routes.rb」「config.ru」を設定するだけです。
やること
http://IPアドレス/ | 全域でPHPを使用可能 実際のパス:/home/ユーザー名/html |
http://IPアドレス/bbb/ | Ruby on Railsプロジェクト 実際のパス:/home/ユーザー名/myapp |
※Railsはサブディレクトリを切る感じで動作させます。
前提条件
次の記事を先に済ませて下さい。
1 | Nginx/Unicorn/Ruby on Railsの本番環境構築/デプロイ |
2 | NginxでPHP7(PHP-FPM)を動作させる |
1. myapp/config/routes.rbの編集
Rails.application.routes.draw do get 'tasks/index' get 'tasks/show' get 'tasks/new' get 'tasks/edit' # root(/)をtasks#indexにする root to: 'tasks#index' end
2. myapp/config.ruの編集
RAILS_RELATIVE_URL_ROOT='/bbb' require_relative 'config/environment' if RAILS_RELATIVE_URL_ROOT then map RAILS_RELATIVE_URL_ROOT do run Rails.application end else run Rails.application end # 元のコード # require_relative 'config/environment' # run Rails.application
3. myapp/public/index.htmlの削除
初回(1)の記事で作成したので削除しておく。
4. /etc/nginx/conf.d/myapp.confの編集
sudo vi /etc/nginx/conf.d/myapp.conf
[myapp.conf]
upstream unicorn { server unix:/home/ユーザー名/myapp/tmp/unicorn.sock; } server { listen 80; server_name IPアドレス; client_max_body_size 100m; error_page 404 /404.html; error_page 500 502 503 504 /50x.html; root /home/ユーザー名/html; # /home/ユーザー名/myapp/publicの各ファイルにアクセス可能にする location ~ ^/bbb/assets/(.*) { alias /home/ユーザー名/myapp/public/assets/$1; } # Railsアプリケーション location /bbb/ { alias /home/ユーザー名/myapp/public; try_files $uri @unicorn; } # ユニコーン location @unicorn { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_pass http://unicorn; } # URLの末尾が/の場合 location / { index index.php index.html index.htm; } # 拡張子がphpの場合 location ~ \.php$ { # 存在しない場合は404 try_files $uri /404.html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
5. Nginx/ユニコーンの再起動
ユニコーンはUnicornの自動起動を参照。
// ユニコーンの再起動 その1(CentOS7以降) sudo systemctl restart unicorn_sample_app // ユニコーンの再起動 その2(CentOS6以下) cd /home/ユーザー名/myapp bundle exec rake unicorn:stop bundle exec rake unicorn:start // Nginxのリスタート sudo systemctl restart nginx
6. 確認用ファイルの作成
/home/ユーザー名/html/index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello!</title> </head> <body> あいうえお </body> </html>
/home/ユーザー名/html/test.php
<?php phpinfo(); ?>
/home/ユーザー名/html/aaa/test.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Test!</title> </head> <body> テスト </body> </html>
/home/ユーザー名/html/aaa/index.php
<?php echo "/aaa版"; phpinfo(); ?>
7. ブラウザで動作確認
http://IPアドレス/ http://IPアドレス/test.php http://IPアドレス/aaa/ http://IPアドレス/aaa/test.html http://IPアドレス/bbb/ http://IPアドレス/bbb/tasks/index http://IPアドレス/bbb/tasks/show http://IPアドレス/bbb/404.html http://IPアドレス/bbb/500.html
404/500.htmlは/home/ユーザー名/myapp/publicにあるエラーページを意図的に表示させています。既存のHTMLを表示させているだけで「エラーではない」のでご注意ください。
参考URL
nginx連載5回目: nginxの設定、その3 - locationディレクティブ
スポンサーリンク
関連記事
公開日:2019年09月16日 最終更新日:2019年11月30日
記事NO:02768