Oracle Cloudに設定したNginxで、HTTPアクセスが来た場合にWEBアプリが起動しているポートへポートフォワードしたい。
/etc/nginx/nginx.conf
のlocationにproxy設定をしてNginxを再起動したが、「temporarily unavailable」。
エラーログを確認すると以下のメッセージ。
2020/07/22 03:51:58 [crit] 1765#0: *1 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client:x.x.x.x, server: _, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "x.x.x.x"
今回はNginxで「13: Permission denied」が出てポートフォワードできない場合の対処方法を紹介する。
原因はNginxではなくLinuxにある
いきなりだが、原因はNginxではないLinuxにある。
例えば有名な Boolean の1つとして、「httpd_can_network_connect」があります。これは httpd がCGIやPHP等のスクリプトを使って database や ldap , smtp等のプロトコルを使って外部ネットワークアクセスをする際に必要となる許可ルールが一式揃っており、httpd_can_network_connect を ON にするとそれら一式が全て許可される、というものです。
参考:【SELinux】Boolean の仕組みと getsebool / setsebool コマンドの使い方│SEの道標
設定するには以下のコマンドを実行する。
sudo setsebool httpd_can_network_connect on -P
念の為Nginxも再起動。
sudo systemctl restart nginx
すると「13: Permission denied」が解消されて、Nginx側も「temporarily unavailable」ではなくWEBアプリの画面を表示できる。
Nginxのエラーログ確認方法については、別記事を参照。