web-dev-qa-db-ja.com

(ubuntu)nginx:[emerg] 0.0.0.0:80へのbind()が失敗しました(13:許可が拒否されました)

この許可拒否エラーの根本原因を突き止めるのに助けが必要です。 nginxにはどのような権限が必要ですか?なぜそんなに複雑なのですか?

21
user2350858

記載されているタイトルの80など、1024未満のポートへのソケットAPI bind()には、rootアクセスが必要です。

ここに「 ルートアクセスなしで1024未満のポートにバインド

もう1つの簡単な方法は、nginxをルートとして実行することです。

21
vvy

1024より大きなポートとルート権限を使用している場合でも、この問題が発生します。これはSELinuxが原因である可能性があります。

このポート、たとえば8024をsegangeポートで確認します

Sudo semanage port -l | grep http_port_t

ポートリストに8024がない場合は、それをsegangeポートに追加します

Sudo semanage port -a -t http_port_t  -p tcp 8024

2017.12.22に更新

SELinuxがdisabledである場合、最初にenforcingする必要があります。 SELinuxのステータスを確認するには

$ sestatus

次の素晴らしい記事を読むことができます: https://www.digitalocean.com/community/tutorials/an-introduction-to-selinux-on-centos-7-part-1-basic-concepts

7
Belter

「nginx -t」の実行後にこのメッセージが表示される場合、ルート「Sudo nginx -t」として実行する権限がありません。

2
Koudi

最適なソリューションは次のとおりです。

1)sudoersにユーザーを追加します(私のユーザーはprodです)

usermod -aG Sudo prod

2)サーカス(プロセスマネージャー)内で、nginx実行可能ファイルの前にSudoを追加します。

[watcher:nginx]
cmd = Sudo /usr/sbin/nginx
args = -c /home/t/Projects/x_b_11/etc/nginx.conf -p /home/t/Projects/x_b_11

3)最後に、ファイル/ etc/sudoersに行を追加します(私のユーザーはprodです)。この行はエラーを回避します(Sudo:ttyが存在せず、askpassプログラムが指定されていません)。おそらくセッションを再起動する必要があります(再起動)。楽しい。

prod ALL = NOPASSWD: /usr/sbin/nginx
1
Taras Vaskiv

nginxにはルートアクセスが必要です。使ってください

Sudo nginx

パスワードとともに次のステップ

0
Pren Jak