Apache httpd 의 Listen 지시어 등에서 사용하는 Address
Apache httpd 의 httpd.conf (혹은 apache2.conf 에서 include 하는 ports.conf) 에서 80 포트를 여는 기본 설정은 다음과 같다.
Listen 80
위와 같이 하면, 모든 네트워크 인터페이스에서 연결을 받게 되고, 다음과 같이 설정을 해도 마찬가지이다.
Listen *:80
ipv4에서 다음과 같다.
Listen 0.0.0.0:80
ipv6에서 다음과 같다.
Listen :::80
포트가 열려 있는지 확인하는 명령어는 다음과 같다.
sudo ss -nlt
혹은
sudo netstat -nlt
운영체제에 따라 실행결과가 다를 수 있지만,
"Local Address:Port"
혹은
"Local Address" 는
0.0.0.0:80 혹은
*:80,
ipv6 의 경우에는 :::80 와 같이 표시된다.
Listen 지시어를 변경하고
sudo ./apachectl restart 를 하면
Apache httpd 가 다시 살아나지 않으므로 다음과 같이 해야 한다.
sudo ./apachectl stop sudo ./apachectl start
VirtualHost 설정은 다음과 같은 방식으로 할 수 있다.
<VirtualHost 0.0.0.0:80> <VirtualHost *:80> <VirtualHost :::80>
다음과 같은 VirtualHost 설정은 구문 에러가 발생한다.
<VirtualHost 80>
eth0 과 같이 특정 네트워크 인터페이스에 할당된 ip (192.168.0.2 라고 가정한다)에 대해서만 연결을 허용하는 설정은 다음과 같다.
Listen 192.168.0.2:80 <VirtualHost 192.168.0.2:80>
이 경우 localhost 혹은 127.0.0.1 로 들어오는 연결은 거부된다.
만약, 다음과 같이 한다면,
Listen 80 <VirtualHost 192.168.0.2:80>
localhost 혹은 127.0.0.1 들어오는 연결은 VirtualHost 로 연결되지 않을 것이다.
Listen 과 VirtualHost 가 서로 짝이 맞지 않으면, 어떤 순간에 한참동안 삽질을 해야 하는 불상사가 생긴다.
만약, 다음과 같이 한다면,
Listen 127.0.0.1:80 <VirtualHost 127.0.0.1:80>
외부에서 들어오는 연결을 받을 수 없다.
127.0.0.1 를 localhost 로 변경하거나,
다음과 같이 ipv6 의 loopback 표기인 ```::1```` 로 변경해도 외부에서 들어오는 연결을 받을 수 없다.
Listen ::1:80 <VirtualHost ::1:80>
Apache httpd 는 Listen 과 VirtualHost 를 ipv6 인 :::80 으로 설정해도 문제가 되지 않고,
telnet localhost 80 으로도 접속할 수 있다.
/etc/hosts 에서 ::1 를 localhost 에 매칭시키고 있지 않다면,
Listen 과 VirtualHost 를 ipv6 의 loopback 표기인 ::1:80 으로 설정했다면,
telnet ::1 80 으로는 접속 할 수 있지만,
telnet localhost 80 이나
curl --ipv6 http://localhost 으로는 접속할 수 없다.
Apache Tomcat 의 server.xml 에서
<Connector>의 address 속성 값을::1로 하면, Apache httpd 쪽에서 localhost 대신[::1]로 기재해야 한다.