Apache2の起動時に「アクセスが拒否されました:make_sock:アドレスにバインドできませんでした」というメッセージが表示されるのはなぜですか?


25

私はそれを止めることができます

/etc/init.d/apache2 stop

しかし、私はそれを使用して再び起動したいとき:

/etc/init.d/apache2 start

私はこのエラーを受け取ります:

Starting web server apache2                                                  /usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
Action 'start' failed.
The Apache error log may have more information.
                                                                         [fail]

回答:


50

将来的に同様の状況からあなたを救うことを願う、あなたが得るエラーについてのいくつかの言葉。

Linuxでは、0〜1024のポートはシステム用に予約されています。つまり、使用するには、変更する権限が必要です-基本的なシステム設定にアクセスします。rootユーザーにはこのような特権があり、実際には0から1024の範囲のポートを使用できます。

あなたが見ることができるあなたの問題では、Apache2応答を介したシステムは問題の根本を示しています([...]アドレスblah blah 80にバインドできませんでした):

(13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80

Apache2 httpデーモンが起動すると、HTTP seeで使用するデフォルトのポートである80ポートをバインドしようとします。これはシステムに割り当てられたポートであり、rootのみがアクセスできます。

root権限を持たない一般的なユーザーとしてstartコマンドを実行しましたが、実行に失敗しました。

簡単な言葉で:

君は:

こんにちはApache2。私はKongthapで、開始するように言っています(/etc/init.d/apache2 start

Apache2:

OK。開始しています(Webサーバーapache2の開始)

システム、接続を使用してリッスンするポート80を教えてください。

システム:

OK。確認する瞬間...

ああ...申し訳ありませんがApache2ですが、80ポートで実行させることはできません、それは個人使用のためです。

また、それをバインドするための正しい特権がありません。(Operation not permitted

Apache2:

おお、Kongthap私は起動に失敗し、システムが(私はそれを行うことはできませんでした(13)Permission denied:[...]

結論

この問題には主に2つの解決策があります。

  1. 次を使用して、ルート権限でApache2 HTTPデーモンを実行しますsudo

    sudo service apache2 start
    

    または:

    sudo /etc/init.d/apache2 start
    
  2. 変更のデフォルトのポート80よりも何か大きいと1024言う、200025009000このような状況で実行する、などの典型的なAポートがあります8080

    sudo vi /etc/apache2/ports.conf
    

    探すか、ない場合は追加します:

    Listen 8080
    

    または、ポート> 1024や選択したポートなど、選択した他のポートは別のプロセスで使用されません


4
本当に素晴らしい説明!!!
職人

素晴らしい説明、よく理解されています!
ムウィラブアティム14

素晴らしい説明。なぜservice好ましい方法を使用しているのですか?
ホロウェイ14年

これらはUpstartディレクティブです。この質問を確認してaskubuntu.com/q/19320/12218に回答し、より詳細なビューについてはupstart cookbook upstart.ubuntu.com/cookbookを確認してください。これらはサービス(デーモン)の処理(開始と停止のタイミングと方法)を参照していることを覚えておいてください。私の質問も許可の問題に取り組んでいます。
Stef K 14年

無駄な言葉遣い。答えは問題に対処しません。
レジー

7

Apacheサーバーを起動/停止/再起動するコマンドは次のとおりです。

  • 始めること:

    sudo /etc/init.d/apache2 start
    
  • 止まる:

    sudo /etc/init.d/apache2 stop
    
  • 再起動します:

    sudo /etc/init.d/apache2 restart
    

後にコンピュータを再起動し、あなたが提案したすべてのコマンドでOKと思われるが、私は再起動...再起動するWebサーバapache2のapache2のを中にこのメッセージが表示されました:確実にServerNameのために127.0.1.1を使用して、サーバーの完全修飾ドメイン名を特定できませんでした
職人

1
@Kongthap:それはエラーではありません。ウェブにはそのメッセージの説明がたくさんあるはずです。
アンドレアコルベリーニ

はい、@ AndreaCorbelliniは正しいです。それはエラーではありません、それはあなたのIPが例えばmail.google.comのような完全修飾ドメイン名を持っていないからです。
Sauravクマール

4

コマンドを発行してselinuxポートコンテキストを確認します

semanage port -l | grep http

http_port_tリストに存在する場合は問題ありませんが、そうでない場合はポートを追加します

semanage port -a -t http_port_t -p tcp 80

または割り当てたいもの。


1

これはselinuxエラーであるか、少なくとも私の場合はそうでした。ブール値を変更するか、selinuxを無効にするか、で許可するように設定しsetenforce 0ます。

ブール値を変更するには、を実行getenforce -a | grep httpし、「http接続ネットワークを許可する」を探す必要があります。コピーして、リストに「-off」と表示されている「on」を置き換えます


UbuntuはSELinuxではなくAppArmorを使用しているため、あなたの答えはubuntuとは無関係です。
sgx1 14年

この問題を持って、これが出てくるための最初のstackoverflowの質問であるCentOSのユーザーとして、私は助け、この固定私の問題を認識
Cacoon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.