お世話になっております。
しゃまとんです。
Goを使って、Webアプリケーションを作る際に80ポートを直接設定できない(しづらい)ので何か公開する際にはnginxでリバースプロキシさせたりしています。
で、nginx側の設定を行ってアクセスしたところ502になってしまいました。
nginx側の設定(nginx.conf)はこんな感じ。ちなみにEchoを使っているためfcgi.Serveではありません。(golnag nginx辺りでググると、よく結果に出る)
fcgi.Serveを使っているならそのまま下記サイトの設定で行けそうです。
Nginx + Golang でWebアプリケーション開発を試してみた
1 2 3 4 5 6 |
listen 80; server_name hostname; location / { proxy_pass http://127.0.0.1:9999; } |
本題に戻って、これですがGoのアプリケーションに繋いでるだけです。なんだろーなと思いエラーログを確認してみると、このようなものがポロポロと出ていました。
1 2 3 |
[error] 24168#0: *32 connect() failed (111: Connection refused) while connecting to upstream, client: 118.238.205.46, server: hostname, request: "GET /favicon.ico HTTP/1.1", upstream: "http://127.0.0.1:9999/favicon.ico", host: "example.com", referrer: "http://example.com/" |
このエラーですが、どうやらselinuxの設定によって起こる可能性があるようです。
そちらに関してもログを見てみました。
1 2 3 4 5 6 7 8 |
type=SYSCALL msg=audit(1512955800.388:1527): arch=c000003e syscall=42 success=no exit=-13 a0=4 a1=556160ba11f0 a2=10 a3=7ffef19c2120 items=0 ppid=10654 pid=24168 auid=4294967295 uid=996 gid=993 euid=996 suid=996 fsuid=996 egid=993 sgid=993 fsgid=993 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null) type=AVC msg=audit(1512955800.405:1528): avc: denied { name_connect } for pid=24168 comm="nginx" dest=9999 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:jboss_management_port_t:s0 tclass=tcp_socket |
何やらよくないログっぽいですね…
これに対処するには指定のパラメータを変更すると良いようです。
(selinuxを無効にしても同じ効果はあります)
1 2 3 4 5 6 |
# 確認 $ getenforce Enforcing # 変更 $ sudo setsebool -P httpd_can_network_connect 1 |
これで再度アクセスしてみると、502が解消されました。
最初はnginxの設定が悪いと思って小一時間ハマっていました。
同じような事象になっている方は試してみてくださいませ。
以上です。
■ 参考
nginx : Permission denied を解決