Apacheは起動に失敗し、アドレスはすでに使用されています(しかし実際にはそうではありません)


58

Ubuntu 12.04を実行しているVMをセットアップしようとしています。ポート80を使用して2つの仮想ホストを構成していますが、Apacheは起動しません。

私はこのエラーを受け取ります:
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

の出力netstat -tulpnは、ポート80を使用しているものがないことを示しています。これが原因である可能性があるものは何ですか?


ルートとして起動していますか?デフォルトでは、唯一のルートは、1024の下のポートを開くことができます
オンセ

はい、そうです。仮想ホストが1つだけ構成されていたときに一時的に実行されていたため、その後、他の仮想ホストを削除して問題を解決しようとしましたが、どちらもうまくいきませんでした。
ガンナーバーンズ

ホストはポート80で何かを実行していて、ゲスト用にブリッジモードになっていますか?それができるかどうかはわかりませんが、可能性が高いようです
-RobotHumans

apacheの起動が失敗する(アドレス0.0.0.0:80にバインドできなかった)からの提案を試しましたか?そしてまたの出力を含めてくださいgrep -ri listen /etc/apachesudo netstat -ntlp | grep 80
gertvdijk

2
grep -ri listen /etc/apache2出力:etc / apache2 / httpd.conf:80を聞く/etc/apache2/httpd.conf:443を聞く/etc/apache2/ports.conf:80を聞く/etc/apache2/httpd.conf:443を聞く/ etc / apache2 / httpd.conf:Listen 443は sudo netstat -ntlp | grep 80何も出力しません。
ガンナーバーンズ

回答:


38

Listen 80.confファイルで2回宣言していないことを確認してください。

たとえば、in ports.confとinnの両方がある場合がありますsites-enabled/www.conf

調べるには、次を使用します。 grep -ri listen /etc/apache2

Listen 80単一の場所に保管してください。


19

この問題を解決した方法に答えます。将来誰かに役立つかもしれません。

試して netstat -ltnp | grep :80

これは次のようなものを返します

tcp6 0 0 ::: 80 ::: * LISTEN 1047 / apache2

次に実行する

sudo kill -9 1047

ここで、1047はポート80で実行されているプログラムのPIDです。取得したPIDは、 netstat


うわー!...ここで私はinmotionhostingにチケットを送信し、返信を待ってから48時間後です。ありがとう
Amjo

2
これは何を意味するのでしょうか?PIDまたは名前を取得していません。tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN -
アーロンフランケ

@AaronFrankeウィンドウを最大化した後、ターミナルでこのコマンドを実行してみてください。
匿名カモノハシ

2
@AaronFrankeはsudoで実行します。表示する権限がない可能性があります。
Advait S

13

この問題が発生したとき、証明書用のパスワードを入力する必要のあるSSLサイトがあるために、Apacheが起動時に開始できなかったことが判明しました。

これがあなたに当てはまるかどうかを判断する良い方法は、aを実行することps -ef | grep apacheです。これにより、表示されるプロセスが返された場合、/bin/bash /usr/share/apache2/ask-for-passphrase mysite.com:443 RSA決して表示されない端末にパスワードが入力されるのを待っています。

まず、ハングkill -HUPしたプロセスを強制終了しました(/ usr / sbin / apache2プロセスのプロセスIDにa を送信すれば、他のプロセスも強制終了できますが、ps -ef | grep apache確認のために別のプロセスを実行してください)。

次に、この投稿の指示に従って、パスワードの入力を必要としないSSLパスワードファイルを作成しました。その後、service apache2 start正常に動作し、再起動後にApacheが適切に起動しました。


11

apache2 Ubuntu 12.10の起動時に、新規インストールでこのエラーが発生しました。

これはapache2のバグです。バックグラウンドでハングします。ここに、バグがソフトウェアのどこにあるかについての私のチュートリアルがあります。

ここに私が得たエラーがあります:

el@titan:~$ sudo service apache2 start
 * Starting web server apache2               
(98)Address already in use: 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]

すでに使用されているアドレスですか?何を使用できますか?見てみな:

el@titan:~$ grep -ri listen /etc/apache2
/etc/apache2/apache2.conf:#   supposed to determine listening ports for incoming connections, and which
/etc/apache2/apache2.conf:# Include list of ports to listen on and which to use for name based vhosts
/etc/apache2/ports.conf:Listen 80
/etc/apache2/ports.conf:    Listen 443
/etc/apache2/ports.conf:    Listen 443

これは、apache2がapache2の起動を妨げていることを意味します。奇妙な。これにより確認されます:

el@titan:~$ ps -ef | grep apache2
root      1146   954  0 15:51 ?        00:00:00 /bin/sh /etc/rc2.d/S91apache2 start
root      1172  1146  0 15:51 ?        00:00:00 /bin/sh /usr/sbin/apache2ctl start
root      1181  1172  0 15:51 ?        00:00:00 /usr/sbin/apache2 -k start
root      1193  1181  0 15:51 ?        00:00:00 /bin/bash /usr/share/apache2/ask-for-passphrase 127.0.1.1:443 RSA
el        5439  5326  0 16:23 pts/2    00:00:00 grep --color=auto apache2

はい、この場合、apache2が実行されています。同じポートでapache2を2回起動しようとしました。

私を混乱させるのは、serviceapache2が実行されていないことを報告することです:

el@titan:~$ sudo service apache2 status
Apache2 is NOT running.

また、apache2ctlのステータスを照会すると、ハングします。

root@titan:~# /usr/sbin/apache2ctl status
**hangs until Ctrl-C is pressed.

そのため、Ubuntuは起動時のapache2の管理に問題があるようです。apache2を停止する時間:

root@titan:~# /usr/sbin/apache2ctl stop
httpd (no pid file) not running

大きな手がかり!apache2を停止しようとすると、プロセスIDが失われます!そのため、Ubuntuはapache2を停止できません。

再起動すると修正されると思いますが、apache2が起動時に起動してハングするため、修正されません。apache2の通常のブートプロセスは正常に動作していません。

だからそれを修正するには?

psコマンド出力を分析することでこれを修正できました。このpsコマンドは、そのプロセスが「/etc/rc2.d/S91apache2 start」によって開始されたことを示していることに注意してください。

それは迅速なキックを必要とする問題のあるプログラムです。

/etc/rc2.d/S91apache2コンピューターの起動時にapache2を起動するために使用されるシンボリックリンクです。なんらかの理由で、apache2を起動してハングしたようです。したがって、それを行わないように指示する必要があります。

だから、それを見てみましょう/etc/rc2.d/S91apache2

el@titan:/etc/rc2.d$ ls -l
lrwxrwxrwx   1 root root    17 Nov  7 21:45 S91apache2 -> ../init.d/apache2*

私たちがそこにいたくないのはシンボリックリンクです。ブート時にapache2が起動しないようにするには、これを実行します。

root@titan:~# sudo update-rc.d -f apache2 remove
 Removing any system startup links for /etc/init.d/apache2 ...
   /etc/rc0.d/K09apache2
   /etc/rc1.d/K09apache2
   /etc/rc2.d/S91apache2
   /etc/rc3.d/S91apache2
   /etc/rc4.d/S91apache2
   /etc/rc5.d/S91apache2
   /etc/rc6.d/K09apache2

コンピューターを再起動して、apache2が起動およびハングしないことを確認します。いいよ。これでapache2を元の状態に戻すことができますが、それにより再び失敗します。

root@titan:~$ sudo update-rc.d apache2 defaults     //(don't do this)
 Adding system startup for /etc/init.d/apache2 ...
   /etc/rc0.d/K20apache2 -> ../init.d/apache2
   /etc/rc1.d/K20apache2 -> ../init.d/apache2
   /etc/rc6.d/K20apache2 -> ../init.d/apache2
   /etc/rc2.d/S20apache2 -> ../init.d/apache2
   /etc/rc3.d/S20apache2 -> ../init.d/apache2
   /etc/rc4.d/S20apache2 -> ../init.d/apache2
   /etc/rc5.d/S20apache2 -> ../init.d/apache2

代わりに、次のようにapache2を起動します。

sudo service apache2 start

そして、apache2がバックアップされ、再びページを提供しています。apache2 / Ubuntu 12.10には、apache2の起動とハングアップを引き起こす重大なバグがあるようです。これは回避策であり、修正はapache2とUbuntuの新しいバージョンを取得することであり、最善の結果を期待していると思います。


ヒントを読んで使用して楽しんだ!「デバッグ方法」を書いてくれてありがとう!
ラム

10

AWS EC2サーバーでリッスンしているNginxサーバーがありました。EC2を構築しているときに設定されたと思うので、Address in useエラーが発生しました。そこで、サービスを停止し、Apache2サービスを開始しました。

sudo service nginx stop
sudo service apache2 start

トンありがとう!すべての試みの後、これは私のために働いた。
Vivek

4

私はそれを理解しました。httpd.confとports.confの両方でListen 80コマンドが重複していた

また、仮想化されているサーバーの構成ファイルをコピーする際に、エラーログディレクトリが変更されたことに気付きませんでした。そのエラーログを調べると、mime.typesファイル内の構成ファイルのディレクトリが正しくないことがわかりましたhttpd.conf。そのパラメーターを更新すると、サーバーは正常に起動しました。


3
またListen 80、私httpd.confports.conf
Gunner Barnesの

2

これは、ポート80がすでに使用されていることを意味します。編集することにより、apache2のポートを変更します(推奨しません)。

/etc/apache2/ports.conf

または、ポート80で実行されているアプリケーションを閉じます。

netstat -antp | grep 80

ポート80で実行されているものを見つける。


netstat -antp | grep 80何も出力しません。
ガンナーバーンズ

netstat -antpの出力をコピーして貼り付けてください| grep 80?
ディランドッズ

文字通り出力はありません。
ガンナーバーンズ

うーんそれは奇妙だ、ポートがあなたが/var/log/apache2/error.logにapache2のエラーを確認することができます別のエラーがありますブロックされていない81にポートを変更してみていない場合
ディランドッズ

2

おそらくNATネットワークを使用してVirtualBoxを実行している人のためのヒントです。ゲストとホスト間にNATルールが設定されていて、ポートがバインドされていることがわかりました


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.