본문 바로가기

[Terry] ETC

tomcat에서 80포트로 접속이 안될때

리눅스에 톰캣을 설치할 때 root 계정 보다는 tomcat과 같은 톰캣 전용 계정을 만들어서 설치한다.
이때 톰캣을 기본으로 설치하면 8080포트를 이용해 통신하게 된다.
ex) http://localhost:8080
하지만 테스트 할때마다 8080을 붙여주는게 불편해서 server.xml에서 포트를 8080에서 80으로 변경하고자 하면 문제가 발생한다.
8080포트로는 웹페이지가 정상적으로 브라우저에 출력되는데, 80포트로는 출력이 되지 않는다.
그래서 리눅스에서 포트를 확인해 보면 아래와 같은 출력을 볼 수 있다.

[root@www ~]# telnet localhost 80

Trying 127.0.0.1...

telnet: connect to address 127.0.0.1: Connection refused

telnet: Unable to connect to remote host: Connection refused

[root@www ~]#


이유는 리눅스나 유닉스에서 1024 이하의 포트(well-known port)들은 일반유저 권한에서 바인딩 할 수가 없기 때문이다.

해결방법은 아래의 두가지가 있다.
1. root 계정으로 톰캣을 설치하고 운영한다.
2. 리눅스 자체 방화벽인 iptables를 이용해서 포트포워딩을 한다

[root@dp ~]# iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080
[root@dp ~]# iptables -t nat -A OUTPUT -d 192.168.64.207 -p tcp --dport 80 -j REDIRECT --to-ports 8080
[root@dp ~]# iptables -t nat -A PREROUTING -d 192.168.64.207 -p tcp --dport 80 -j REDIRECT --to-ports 8080
[root@dp ~]#  service iptables save

    굵게 표시한 부분에 해당 아이피를 넣어주면 된다. 그러면, 80포트로 접근한 요청이 리눅스 커널단에서 8080포트로 포워딩시켜준다.