nginx経由でダイレクトアドレスでtomcatに接続する方法


久々にIT関連の記事を書きます。

最近、サーバー側の勉強を再開しました。
環境としてはVagrantでcentOSをたてて、nginxとtomcatの導入をしています。
VagrantやVirtualBoxの導入についてはまたの機会にするとして、今回はnginxからtomcatに接続するあたりの話です。

また、Vagrantの状況として、2つのcentOSを立ち上げています。
Vagrantfileはこんな感じです。

VAGRANTFILE_API_VERSION = “2”
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
 config.vm.box = “centos65”

 config.vm.define :test1 do | test1 |
  test1.vm.hostname = “test1”
  test1.vm.network :private_network, ip: “192.168.33.10”
 end

 config.vm.define :test2 do | test2 |
  test2.vm.hostname = “test2”
  test2.vm.network :private_network, ip: “192.168.33.20”
 end

 config.vm.provider :virtualbox do |vb|
  vb.customize [“modifyvm”, :id, “–memory”, “1024”]
  vb.customize [“modifyvm”, :id, “–cpus”, 1]
 end
end

このように記述することで同じ環境のvmを立ち上げることができます。

それでは本題に入ります。
今回はまったのはこのVagrantfileにforwarded_portを記述していたことと、nginx.confにproxy_redirectの流れを知らずに使ってしまっていたことです。
まず、forwarded_portですが、これはhostとguestの間にportをあける作業になります。
空いてるportの確認は

netstat -nat | grep LISTEN

のコマンドを叩けば確認できます。
このforwarded_portでnginxに8888portで接続し、tomcatのportを8081に設定してnginxとtomcatを繋げていました。
その結果、http://127.0.0.1:8888でtomcatを確認することができました。
この8888を削除するためにいろいろやってみたのですができませんでした。

まずforwarded_portをhostとguestともに80portであけてみました。
がうまくいかず…
nginx.confのproxy_redirectにhttp://127.0.0.1:80をしてみてもうまくいかず…
先輩に相談したところ、そもそもforwarded_portの設定はいらないということでした。
なぜか!?

Vagrantfileでtest1のcentOSでは新しいnetworkとしてipを作っています。
そこにnginxが立てられるので、そこにアクセスすればnginxに接続できます。
またtomcatとnginxを繋げているのでtomcatに接続することができます。

なるほど…
forwarded_portであけてしまうと8888に飛ぶ仕様なので、必ずportが必要になっていたんですね。
ただ、80を設定しても無理だったのがよくわかりません。
というのもguest側のportは開いたのに、host側のportが開きませんでした。
謎…

そしてもう一つの原因のproxy_redirectについてです。
これは特に気にすることはないんですが、tomcatのROOTディレクトリー下に新しくディレクトリーを作成し、index.htmlをおいてデプロイしてみました。
その時の環境としてredirectにhttp://127.0.0.1:80を指定していました。
するとなぜかportが8081で返ってきました。
なぜかというと、tomcat経由でredirectするとtomcatのLocation下にあるHEAD情報を取ってくるからみたいです。
今回の場合はport80を指定していたので、そもそものtomcatの8081が返されることになりました…

一つ一つのコードの流れをしっかり理解せずに書くのは危険ですね…>< 結果として、今は自分が指定したipに接続したらportなしでtomcatに接続可能であり、デプロイしたディレクトリーにも直接アクセス可能になりました。 今回でいうとhttp://192.168.33.10/ですね。 一安心... [補足] centOSでnginxの起動

sudo service nginx start

nginx.confの設定

sudo vim /etc/nginx/nginc.conf

centOSでtomcatの起動

sudo /usr/local/tomcat/bin/startup.sh

centOSでtomcatの停止

sudo /usr/local/tomcat/bin/shutdown.sh

centOSでtomcatのserver設定

sudo vim /usr/local/tomcat/conf/server.xml

ipアドレスの確認

ifconfig