nginxのサブドメインでrailsの複数アプリを運用
新しいサイトを作成しているのですが、まだドメイン名も決まってないので、現在あるサイトのサブドメインでとりあえず表示確認できる場所まで運用をしようと考えました。
ここを抜かしてやってしまうと、サイトの立ち上げが出来なくて、断念する可能性があります。
一度設定ファイルができあがれば、あとはコードを書くだけの状態に追い込めます。
では、nginxでサブドメインで運用を行えるようにします。
準備
ここは色んなサイトが書かれているので、割愛させていただきますが、こんな内容です。
お名前.com
さくらvps
お名前.comだけで終わると思ったら、さくら側の設定があるのを忘れて少しはまりました。
nslookup hoge.hogehoge.com
をすることで、ドメインが有効かの確認ができます。
自分はお名前.comだけの設定を見て、上記コマンドを叩いてもエラーになっていたので、原因がわからずはまっていました。
nginx
nginx側の設定は簡単です。
server_nameをサブドメインにするだけです。
/etc/nginx/conf.d/hoge.conf
upstream hoge { server unix:/tmp/unicorn-hoge.sock fail_timeout=0; } server { listen 80; server_name hoge.hogehoge.com; # Application root, as defined previously root /var/www/hoge/current; location ~ ^/assets/ { root /var/www/hoge/shared/public; } try_files $uri/index.html $uri @hoge; location @hoge { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://hoge; } error_page 500 502 503 504 /500.html; client_max_body_size 4G; keepalive_timeout 10; }
自分はこんな感じで新しく作成しました。
upstreamの部分をunicorn.rbのlistenに合わせないといけません。
config/unicorn.rb
# paths app_name = 'whoge' app_path = "/var/www/#{app_name}" working_directory "#{app_path}/current" # listen listen "/tmp/unicorn-#{app_name}.sock", backlog: 64 ←ここを合わせる # pid(Process ID) fileの位置を指定 pid "#{app_path}/current/tmp/pids/unicorn.pid" # ワーカーの数を指定する worker_processes 2 # リクエストのタイムアウトの秒数を指定する timeout 15 # ダウンタイムをなくすため、アプリを事前に読み込む preload_app true # Unicornのログの出力先を指定する stdout_path "log/unicorn_stdout.log" stderr_path "log/unicorn_stderr.log" before_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.connection.disconnect! end old_pid = "#{ server.config[:pid] }.oldbin" unless old_pid == server.pid begin Process.kill :QUIT, File.read(old_pid).to_i rescue Errno::ENOENT, Errno::ESRCH end end end after_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.establish_connection end end
これで設定は終わりです。
nginxの設定で自信がない場合は、まずはdefaultのnginxが読めるかを確認するなどして、読み込みが正しいかを確かめながらやるのがいいと思います。
いきなりやると分からなくなります。
以上です。