VM上のNginxからProxypassでMac上で起動しているRailsを動かすお話
かずまです。
お久しぶりです。
社会人になってはや3ヶ月、元気にやっております。
Rubyのエンジニアとしてどうにか勉強中です。
さて、今日はネットワークネタになります。
Ansibleを使ってVagrant上にNginxを起動し、ローカル環境のMacで動いているRailsを動かしてみようというお話です。
その時に詰まったのでメモしておきます。
Vagrant
簡単にMac上にVMを建てられます。
AnsibleやChef、Itamaeを使うと環境構築が一発にできます。
今回はCentos7を使って行きます。
Vagrant Fileにprivate ipをお忘れなく。
www.vagrantup.com
ちなみに、外からも見えるようにしたい場合はpublicを使うと良さそうです。
Nginx
静的なページを表示したりするWebサーバー。
RailsとかNodeJSはアプリケーションサーバーです。
今回の構造
あるPCからNginxのIPアドレスでアクセスして、それをNginxが受けて、Rails側にリクエストを送るという構造。
このボックス一つは一つのサーバーになっています。
ただし、今回は面倒なので、リクエストの送る先と受ける先を同じにするということです。
Nginxの設定
今回はインストールなどの導入は省きます。
Ansibleを使う場合は一度手動でサーバー構築してからやるほうが良さそうです。
とりあえず今回はdefault.confをいじることにします。
アクセスしたものをプロキシーパスでローカル環境のMacを指し示しているわけですね。
# on VM Terminal # vim /etc/nginx/conf.d/default.conf server { listen 80; server_name localhost; access_log /var/log/nginx/log/host.access.log main; error_log /var/log/nginx/log/host.error.log; location / { # rails ip address in other server proxy_pass http://192.168.0.2:3000; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
一応、ミニマムな感じで書きました。
実際に運用する場合はヘッダーに色々記述する必要があると思いますので。
後はログは出力する設定にしたので、もしディレクトリがなければ生成してください。
権限はrootでも大丈夫なはずです。書き込み権限だけは与えてください。
proxy_passに自分のローカル環境のip + Railsを立ち上げたポートを記述しておきます。
Railsを立ち上げる
# on Mac Terminal $ rails s -b 0.0.0.0
これで同じネットワーク内であればIPでアクセスが可能です。
一応、Macのip+ポート番号でアクセスできるか確認して、VM側でもCurlとかして確認すると良さそうです。
Headerのみ返す場合は
# on VM Terminal $ curl --head http://192.168.0.2:3000
多分こんな感じだったはず。
アクセス時にPermissionがないといわれる
これでNginxを再起動してIPでアクセスしたところ、一応反応はあるけど502が返ってくるようになりました。
先程設定したログを見てみるとパーミッションでコケているらしいです。
# on VM Terminal failed (13: Permission denied) while connecting to upstream, client: 192.168.0.2, server: localhost, request: "GET / HTTP/1.1", upstream:
ぐぐってみたところ似たような問題が!
SELinuxがだめっていっているそうですね。
まぁそもそも違うサーバーにプロキシーで飛ばすのおかしいよというお話だと思いますが、とりあえず、動かすことが目的なので、
SELinuxをDisableにしてみます。
もちろんSELinuxにProxypassを有効にしてあげればいいのですが、その前にまず原因がSELinuxなのかを判別したかったのでとりあえずオフにしました。
# on VM Terminal $ setenforce 0
これでNginxを介して、ローカルのRailsを動かすことに成功しました。
参考URLに書いてある感じで、止めるのではなくSELinuxの設定をすると良さそう。
以上です。
参考URL
Vagrant + Ansible参考本
- 作者: Lorin Hochstein,Sky株式会社玉川竜司
- 出版社/メーカー: オライリージャパン
- 発売日: 2016/04/16
- メディア: 大型本
- この商品を含むブログ (2件) を見る
SELinux参考URL
Linux:CentOS6でmod_proxyが動かない - HiiHahWIKI - making some notes for... -
CentOS 7 : Apache httpd : mod_proxy を利用する#1 : Server World
sysadminsjourney.com