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까지의 포트가 시스템 용으로 예약되어 있습니다. 이것은 하나를 사용하려면 기본 시스템 설정에 액세스 할 수있는 권한이 있어야합니다. 루트 사용자는 이러한 권한을 가지며 실제로 0-1024 범위의 포트를 사용할 수 있습니다.

당신이 볼 수있는 문제에 아파치 응답을 통해 시스템이 문제의 근본을 나타냅니다 ([...] 주소 저쩌구에 바인딩 할 수있다 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

아파치 HTTP 데몬이 시작되면, 그것은 HTTP에 사용되는 기본 포트로 80 포트를 결합하려고 참조 시스템에 할당 된 포트에서 포트이며, 같은 단지 루트 액세스 할 수 있습니다.

루트 권한이없는 일반 사용자로 시작 명령을 실행하여 실패했습니다.

간단히 말해서 :

당신:

안녕하세요 Apache2. 저는 Kongthap이고 시작하라고 말하고 있습니다 ( /etc/init.d/apache2 start)

아파치 2 :

승인. 시작합니다 (웹 서버 apache2 시작).

시스템, 포트 80을 사용하고 연결을 수신하십시오.

체계:

승인. 잠깐만 ...

아아 ... 아파치 2는 미안하지만 80 포트에서 뛸 수는 없다. 개인용이다.

바인딩 할 올바른 권한이 없습니다. ( Operation not permitted)

아파치 2 :

Kongthap 시작하지 못했습니다. 시스템에서이를 수행하지 못했습니다 ( (13)Permission denied:[...]).

결론

이 문제에는 주로 두 가지 해결책이 있습니다.

  1. 다음을 사용하여 루트 권한으로 Apache2 HTTP 디먼을 실행하십시오 sudo.

    sudo service apache2 start
    

    또는:

    sudo /etc/init.d/apache2 start
    
  2. 에서 기본 포트를 변경 80보다는 뭔가 더로는 1024, 말 2000, 2500, 9000이러한 상황에있을 때, 등 일반적인 포트 실행8080

    sudo vi /etc/apache2/ports.conf
    

    추가하거나 추가하지 않은 경우 :

    Listen 8080
    

    또는 다른 프로세스에서 포트 > 1024및 선택한 포트와 같이 선택한 다른 포트를 사용 하지 않습니다 .


4
정말 훌륭한 설명 !!!
Artisan

훌륭한 설명, 잘 이해했습니다!
Mwirabua Tim

좋은 설명입니다. service선호하는 방법을 사용 하는 이유는 무엇 입니까?
Holloway

그것들은 Upstart 지시문이며,이 질문을 확인하고 askubuntu.com/q/19320/12218에 답 하십시오. 자세한 내용은 upstart cookbook upstart.ubuntu.com/cookbook을 확인하십시오 . 이것들은이 질문을 서비스 (데몬) 처리 (시작 및 중지 방법)와 관련이 있으며 내 대답은 권한 문제를 해결합니다.
Stef K

말할 필요도 없습니다. 대답은 문제를 해결하지 못합니다.
reggie

7

다음은 Apache 서버를 시작 / 중지 / 다시 시작하는 명령입니다.

  • 시작한다:

    sudo /etc/init.d/apache2 start
    
  • 그만하다:

    sudo /etc/init.d/apache2 stop
    
  • 재시작하기 위해:

    sudo /etc/init.d/apache2 restart
    

컴퓨터를 다시 시작하면, 당신이 제안하는 모든 명령을 확인 보인다하지만 웹 서버 아파치 아파치를 다시 시작 ... 다시 시작하는 동안이 메시지를 받았습니다 : 안정적으로 서버가 정규화 된 도메인 이름입니다 결정할 수 없음, 서버 이름에 대한 127.0.1.1을 사용
장인

1
@ Kongthap : 오류가 아닙니다. 웹에는 해당 메시지에 대한 설명이 가득합니다.
Andrea Corbellini

예, @AndreaCorbellini가 맞습니다. ip에는 정규화 된 도메인 이름 (예 : mail.google.com)이 없기 때문에 오류가 아닙니다.
Saurav Kumar

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 connect network 허용"을 찾으십시오. 복사하고 목록에 "-off"가 표시되는 "on"을 바꾸십시오.


우분투는 SELinux가 아닌 AppArmor를 사용하므로 귀하의 답변은 우분투와 관련이 없습니다.
sgx1

이 문제를 겪은 centos 사용자로서 이것이 처음으로 오는 stackoverflow 질문이 문제를 해결 한 도움에 감사드립니다
Cacoon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.