Apache는 모든 포트에서 시작을 거부합니다.

Apache는 모든 포트에서 시작을 거부합니다.

어떤 포트에서도 Apache를 시작할 수 없는 것 같습니다. 항상 오류가 발생합니다.

apache2(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80

netstat -plant|grep 80나는 실행에 문제가 없는지 확인하기 위해 포트 80에서 아무것도 실행되지 않는지 확인했습니다 . sudo nc -l 80나는 이것이 권한 문제일지도 모른다고 생각했습니다(initscript에서 시작해야 하기 때문에 그럴 필요는 없습니다). 그래서 Apache의 수신 포트를 8080을 제외하고 8080으로 변경했는데 동일한 오류가 발생했습니다(아무 것도 실행되지 않았습니다). 포트). 심지어 해당 주소와 포트가 표시되는 것을 제외하고는 거의 동일한 오류가 발생 ports.conf하도록 설정을 시도했지만 여전히 발생합니다.Listen 127.0.0.1:80Listen 127.0.0.1:8080

저는 Debian Unstable을 사용하고 있다는 점을 지적하고 싶습니다.

이 시점에서는 무엇을 더 확인해야 할지 모르겠습니다.

답변1

귀하의 strace 파일에서 귀하의 질문은 다음과 같습니다.

[pid 23020] setsockopt(5, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
[pid 23020] setsockopt(5, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 23020] setsockopt(5, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
[pid 23020] setsockopt(5, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 23020] bind(5, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
[pid 23020] listen(5, 511)              = 0
[pid 23020] setsockopt(7, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
[pid 23020] setsockopt(7, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0
[pid 23020] setsockopt(7, SOL_IPV6, IPV6_V6ONLY, [0], 4) = 0
[pid 23020] setsockopt(7, SOL_TCP, TCP_NODELAY, [1], 4) = 0
[pid 23020] bind(7, {sa_family=AF_INET6, sin6_port=htons(80), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = -1 EADDRINUSE (Address already in use)
[pid 23020] write(2, "(98)Address already in use: AH00"..., 82(98)Address already in use: AH00072: make_sock: could not bind to address [::]:80
) = 82

bind당신은 그것이 호출되고 있음을 알게 될 것입니다두 배. 처음으로 작동합니다. 두 번째에는 주소가 이미 사용 중이었기 때문에 실패했습니다. 즉, 방금 바인딩되었기 때문입니다.

Listen 80내 Apache 구성(Debian의 Apache 2.4 테스트/불안정)에서 두 가지 구성으로 이를 달성할 수 있음을 확인했습니다. 나는 당신도 같은 일을 했거나 매우 유사한 일을 했다고 생각합니다.

답변2

귀하의 문제는 IPV4 대신 IPV6 주소를 바인딩하려는 시도와 관련이 있는 것 같습니다. 예 Apache는 IPv6을 구성하지 않았기 때문에 ::1 및 127.0.0.1에 바인딩을 시도합니다. 즉, 127.0.0.1에 두 번 바인딩을 시도합니다. 해결책:

  • localhost가 IPv4 IP(getent 호스트 localhost)로 확인되는지 확인하세요.

  • IPv6(특히 localhost 주소)를 사용하지 않는 경우 /etc/hosts를 확인하고 모든 IPv6 주소를 제거하세요.

업데이트할 수 없는 경우 이름 대신 IP를 /etc/hosts변경 httpd.conf하거나 바인딩합니다(127.0.0.1:80에서 수신).ports.conf

답변3

오류 메시지로 판단하면 Apache는 IPv6을 사용하여 바인딩을 시도하고 있습니다. 호스트에 IPv6가 활성화되어 있습니까?

관련 정보