まとめ
- nginxとrailsは同じサーバー上で動かしていて
- nginxの80ポートで受けたリクエストをrailsの3000ポートに流そうとしたら
-
connect() to 127.0.0.1:3000 failed (13: Permission denied)
と言われ接続できず - 原因はSELinuxでしたというお話
概要
- vagrant上のCent OS 6
- nginxは80番ポート, 443番ポートで動かす(443はSSLラッパも)
- RailsアプリはPumaで3000番ポートで動かす
nginxの設定
server{
listen 80;
server_name rails.example.com;
location / {
proxy_pass http://localhost:3000;
}
}
server{
listen 443 ssl;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
server_name rails.example.com;
location / {
proxy_pass http://localhost:3000;
}
}
Railsの設定
- rails newしただけ。
bundle exec rails s Puma -b 0.0.0.0
アクセス確認
-
http://rails.example.com:3000 にアクセス
- 繋がった!
-
http://rails.example.com にアクセス
- nginxのBad Gateway 502でアクセスできず
- ログを見ると
connect() failed (111: Connection refused) while connecting to upstream
と出ている
解決
- nginxでホームディレクトリを公開ディレクトリに設定する の記事を参考に
-
$ setenforce 0
でselinuxを一時停止
→アクセスできた
あとがき
- ローカルの検証環境なのでここで終わらせたが、本番環境でやるのであればselinuxの設定をしっかりしてやるべき
- 何かの記事でnginxの実行ユーザーとrailsの実行ユーザーが違うからだというミスリードをしてしまい、頑張ってrootでrailsを動かしてみたけど、ダメでした。。。