아파치가 시작하지 못합니다, 이미 사용중인 주소


58

Ubuntu 12.04를 실행하는 VM을 설정하려고합니다. 포트 80을 사용하여 구성된 두 개의 가상 호스트가 있지만 Apache가 시작되지 않습니다.

이 오류가 발생합니다.
(98) Address already in use: make_sock: could not bind to address 0.0.0.0:80

의 결과는 netstat -tulpn포트 80을 사용하는 것이 아무것도 없다는 것을 보여줍니다.이 원인의 원인은 무엇입니까?


루트로 시작하고 있습니까? 기본적으로 루트 만 1024 미만의 포트를 열 수 있습니다.
onse

네 하나의 가상 호스트 만 구성했을 때 한 시점에서 실행되었으므로 다른 가상 호스트를 제거하여 문제를 해결하려고 시도했지만 운이 좋지 않습니다.
Gunner Barnes

호스트가 포트 80에서 실행중인 항목이 있고 게스트의 브리지 모드에 있습니까? 그것이 그렇게 될지 모르겠지만, 가능성이있는 것 같습니다
RobotHumans

아파치 시작 실패 의 제안을 시도 했습니까 (0.0.0.0:80 주소에 바인딩 할 수 없음) ? 또한의 출력을 보내 주시기 바랍니다 grep -ri listen /etc/apache그리고 sudo netstat -ntlp | grep 80.
gertvdijk

2
grep -ri listen /etc/apache2출력 : etc / apache2 / httpd.conf : Listen 80 /etc/apache2/httpd.conf : Listen 443 /etc/apache2/ports.conf : Listen 80 /etc/apache2/httpd.conf : Listen 443 / etc / apache2 / httpd.conf : Listen 443은 sudo netstat -ntlp | grep 80아무 것도 출력하지 않습니다.
Gunner Barnes

답변:


38

Listen 80.conf 파일에서 두 번 선언하지 않아야 합니다.

예를 들어, in ports.conf과 inn 둘 다 가질 수 있습니다 sites-enabled/www.conf.

알아 보려면 다음을 사용하십시오. grep -ri listen /etc/apache2

한 곳에만 보관하십시오 Listen 80.


19

이 문제를 해결하는 방법에 대한 답변. 미래에 누군가에게 도움이 될 수 있습니다.

시험 netstat -ltnp | grep :80

이것은 다음과 같은 것을 반환합니다

tcp600 ::: 80 ::: * 듣기 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 -
Aaron Franke

@AaronFranke 창을 최대화 한 후 터미널에서이 명령을 실행 해 볼 수 있습니까?
익명 오리너구리

2
@AaronFranke는 sudo로 실행합니다. 볼 권한이 없을 수 있습니다.
Advait S

13

이 문제가 발생했을 때 인증서에 암호를 입력 해야하는 SSL 사이트가 있기 때문에 Apache가 부팅시 시작할 수 없기 때문입니다.

대상 여부를 알려줄 수있는 좋은 방법은 실행하는 것입니다 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

그것은 아파치 2가 아파치 2의 시작을 막고 있다는 것을 의미한다. 기괴한. 이것은 확인합니다 :

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를 시작하려고했습니다.

나를 혼란스럽게하는 service것은 apache2가 실행되고 있지 않다는 보고입니다.

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

그리고 상태에 대해 apache2ctl을 쿼리하면 중단됩니다.

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

따라서 우분투는 부팅시 apache2를 관리하는 데 문제가있는 것 같습니다. 아파치를 멈출 시간 2 :

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

큰 단서! apache2를 중지하려고하면 프로세스 ID가 손실됩니다! 그래서 우분투는 어디에 있는지 모르기 때문에 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를 가져 와서 최선을 다하기를 희망한다고 생각합니다.


팁을 읽고 사용하는 것을 즐겼습니다! '디버깅 한 방식'을 작성해 주셔서 감사합니다!
Ram

10

AWS EC2 서버에서 수신 대기중인 Nginx 서버가 있는데 EC2를 구축 할 때 서버가 구성되었다고 생각합니다. 따라서 이미 사용중인 주소 오류가 발생했습니다. 그래서 서비스를 중단하고 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
포수 반즈을

2

이것은 포트 80이 이미 사용되고 있다는 것을 의미합니다. 편집하여 apache2의 포트를 변경하십시오 (권장하지 않음).

/etc/apache2/ports.conf

또는 포트 80에서 실행중인 응용 프로그램을 닫습니다.

netstat -antp | grep 80

포트 80에서 실행중인 것을 찾으십시오.


netstat -antp | grep 80아무것도 출력하지 않습니다.
Gunner Barnes

netstat -antp | grep 80?
Dylan Dodds

말 그대로 출력이 없습니다.
Gunner Barnes

그건하지 않으면 흠 그 이상한 아닌 포트는 /var/log/apache2/error.log에서 아파치 오류를 확인할 수있는 또 다른 오류가있을 차단되는 81 포트를 변경 시도
딜런 Dodds가

2

NAT 네트워크를 사용하여 VirtualBox를 실행중인 사람에게는 힌트 만 제공됩니다. 게스트와 호스트 간의 NAT 규칙이 설정되어 포트를 바인딩하는 것을 발견했습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.