RedHat系のOSで下記のようなエラーが出てnginxが起動しない時の話。
nginx[89735]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx[89735]: nginx: [emerg] bind() to 0.0.0.0:4500 failed (13: Permission denied)
nginx[89735]: nginx: configuration file /etc/nginx/nginx.conf test failed
systemd[1]: nginx.service: Control process exited, code=exited, status=1/FAILURE
上記はnginx.confに4500番ポートでLISTENさせる設定を加えた後に、それを適用しようとサービスを再起動した所でした。rootで実行してるのだから普通はPermission deniedになる事はないのだけど、そういえばSELinux環境だった事を思い出しました。
下記を確認。
# semanage port -l | grep http_port_t
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
ここで使用可能なポートが決められており、デフォルトで4500番ポートはありません。という事で下記のように追加します。
# semanage port -a -t http_port_t -p tcp 4500
再確認
[root@kvm1 ~]# semanage port -l | grep http_port_t
http_port_t tcp 4500, 80, 81, 443, 488, 8008, 8009, 8443, 9000
4500番が追加されました。その後nginxは無事起動しました。
ちなみに削除する場合は下記。
# semanage port -d -t http_port_t -p tcp 4500