Apache2가 IPv4 TCP 포트에서 실행되지 않습니다


23

데비안 7 서버에서 Apache2를 실행해야합니다. 그러나 tcpv4 포트가 아닌 tcpv6 포트에서만 실행됩니다. apt-get install로 설치했습니다. localhost 또는 127.0.0.1 또는 내 서버 IPv4 주소로 이동하면 웹 사이트가 표시되지 않습니다.

/etc/apache2/ports.conf:

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default
# This is also true if you have upgraded from before 2.2.9-3 (i.e. from
# Debian etch). See /usr/share/doc/apache2.2-common/NEWS.Debian.gz and
# README.Debian.gz

NameVirtualHost *:80
Listen 80

<IfModule mod_ssl.c>
 # If you add NameVirtualHost *:443 here, you will also have to change
 # the VirtualHost statement in /etc/apache2/sites-available/default-ssl
 # to <VirtualHost *:443>
 # Server Name Indication for SSL named virtual hosts is currently not
 # supported by MSIE on Windows XP.
 Listen 443
</IfModule>

<IfModule mod_gnutls.c>
 Listen 443
</IfModule>

netstat -plntu:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3558/sshd       
tcp        0      0 0.0.0.0:3466            0.0.0.0:*               LISTEN      2820/mysqld     
tcp6       0      0 :::80                   :::*                    LISTEN      2097/apache2    
tcp6       0      0 :::22                   :::*                    LISTEN      3558/sshd       

3
변화 시도 Listen 80에를 Listen 0.0.0.0:80. 자세한 내용은 httpd.apache.org/docs/2.2/bind.html 문서 를 참조하십시오.
pradeepchhetri

@pradeepchhetri 감사합니다. 작동합니다. 모든 컴퓨터에서 내 서버 주소에 액세스 할 수 있으며 내용 (IP 주소 /some.php)이 표시되지만이 서버에서 some.php에 액세스 할 수 없습니다. localhost, 127.0.0.1 및 다른 PC에서 작동하는 외부 IP : 포트 번호를 시도했지만 작동하지 않습니다.
Mato

1
당신의 출력을 게시 할 수 sudo iptables -nvLsudo sestatus? 나는 당신이 막고있는 로컬 방화벽이 있다고 생각합니다.
pradeepchhetri

@Mato 당신은 내용을 보여 주지만 작동하지 않을 때 명확히해야합니다, 당신은 그것이 원시 PHP를 실행하는 대신 그것을 보여주는 것을 의미합니까? 그렇다면 PHP 모듈을 활성화해야합니다. 나는 a2enmod php5당신을 위해해야 한다고 생각 합니다.
robbat2

3
Linux 시스템은 일반적으로 IPv6 주소에서 수신 대기중인 듀얼 스택 IPv4 + IPv6 소켓을 숨 깁니다 ::.
Pavel Šimerda

답변:


32

netstat가 여기에 tcp6 만 표시한다는 사실은 문제가 아닙니다. 수신 할 주소를 지정하지 않으면 apache는 단일 소켓을 사용하여 지원되는 모든 주소 계열을 청취합니다 (설계상의 이유로 sshd는 주소 및 주소 계열마다 고유 한 소켓을 사용하므로 netstat 출력에 두 번 표시됨).

내 시스템 중 하나는 아파치가 tcp6 소켓 만 가지고 있지만 여전히 IPv4와 IPv6을 통해 정상적으로 작동한다는 것을 보여줍니다.

woodpecker ~ # netstat -anp |grep apache
tcp6       0      0 :::80    :::*       LISTEN      1637/apache2        
tcp6       0      0 :::443   :::*       LISTEN      1637/apache2        
woodpecker ~ # wget http://127.0.0.1/ -O /dev/null
--2013-12-25 08:52:38--  http://127.0.0.1/
Connecting to 127.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...
# wget http://[::1]/ -O /dev/null
--2013-12-25 08:53:00--  http://[::1]/
Connecting to [::1]:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 45 [text/html]
...

wget http://127.0.0.1/ -O -서버에서 실행 하면 어떻게됩니까? 성공적으로 연결 되었습니까? 예상대로 웹 사이트의 원시 HTML을 반환합니까?


고마워, 지금은 작동하지만 작은 문제는 아직 하나뿐입니다. 나는 위에 그것에 대해 썼다.
Mato

당신은 미친 것이 이것이 항상 내 경험 이었다는 것을 알고 있습니다. 당연히. 네트워크 프로그래머로서 INADDR_ANY및에 대해 잘 알고 있습니다 IN6ADDR_ANY_INIT. 그러나 오늘 나는 정말 이상한 행동을 보았습니다. 방화벽 변경, Apache 변경은 없지만 원격 호스트는 IPv6을 통해서만 연결할 수 있습니다. 이는 여전히 IPv6이없는 사용자에게는 문제입니다. 그것은 확실히 내가 해결할 것이지만 당신은 절대적으로 정확합니다 (불행하게도 내 호출에는 적용 할 수 없지만).
Pryftan


1
  1. 127.0.0.1은 머신에만 로컬이므로 로컬 루프백 ip / address를 사용하려면 브라우저 자체에서 서버 자체에 있어야합니다.

  2. 방화벽 차단 포트가있을 수 있습니다.

  3. 아파치가 실행 중이고 제대로 작동하는지 확인하고 오류 로그를 확인하십시오.

  4. 모든 아파치 설정을 다시 확인하십시오.

  5. 루트 www 또는 사용자 public_html 디렉토리에서 호스팅하고 있습니까?

  6. 소유자 및 권한을 다시 확인하십시오.


거의 2019 년 (미래에 오신 것을 환영합니다) :

  • 기본적으로 대부분의 세계는 ipv6을 사용하고 실패하면 ipv4로 대체됩니다.

  • 이제 ipv6을 통한 ipv4 터널이 있으며 그 반대도 마찬가지입니다.

  • 대부분의 OS, 프로그램, 클라이언트 및 서버는 대부분 현재이 작업을 수행합니다.

  • 더 이상 NAT가없는 세상에 오신 것을 환영합니다. 이제 장치에 방화벽 / 필터를 사용해야합니다.

  • ipv4와 ipv6을 동시에 지원하여 시스템을 모두 이중 스택으로 유지하는 것이 좋습니다. 따라서 매직 스위치가 발생할 때 여전히 작동합니다. 내 OS, 네트워크, 심지어 ISP도 듀얼 스택 엔드 투 엔드입니다. 원하는 경우 ipv4를 완전히 끌 수 있지만 ipv4에서 ipv6으로 돌아가는 터널이 없으면 더 이상 작동하지 않을 수 있습니다.


'폴더'라는 단어를 사용했기 때문에 나는 당신에게 +1을 줄지 여부에 대한 텐 터훅에있었습니다. 그러나 방화벽이 IPv6에 맞게 올바르게 구성되어 있는지 확인해야하므로 IPv6을 비활성화하지 않는 것이 중요합니다. 많은 사람들이 NAT가 보안이라고 생각하지만 기껏해야 환상이라고 생각합니다 (많은 서비스의 문제이기도 함). 그 점과 다른 점은 모두 유효하므로 +1이 있습니다.
Pryftan

죄송합니다. 디렉토리를 의미했습니다
:-P

내가 할 수 있다면 또 다른 +1을 줄 것이다. 나는 오히려 놀랐고 또한 당신이 그것을 바꿀 것이라고 겸손했습니다. 나는 순수 주의자입니다. 그것은 나를 놀라게하고 특정 회사가 그것을 수정하고 '폴더'로 변경 했었다고 나에게 묻습니다. 아마도 그것은 사람들에게 더 친근한 것이되지만 더 잘 알고 있어야하는 다른 사람들에게 올바른 단어로 받아 들여진 것 같습니다. 모르겠어요 어쨌든 전체 목록은 더 많은 사람들이 이해하기를 정말로 바랍니다. 아아 많은 사람들은 ...
Pryftan

-1

*

wget http://127.0.0.1/ -O / dev / null

*는 IPv4 또는 IPv6을 처리하지 않고 로컬 서버에 대한 연결을 나타냅니다. localhost (또는 127.0.0.1)를이 서버의 실제 IPv4 IP 주소로 변경하면 연결이 거부되어 아무 것도 얻을 수 없습니다.

구성 파일에서 IP를 설명하십시오. NameVirtualHost : 80 Listen : 80

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