node.js 3000번 포트에서 80번 적용이 안될 때: iptables
iptables를 이용하여 80번 포트로 라우팅을 시키고 브라우저 주소창에 포트를 없앴는데도 안되는 경우.
iptables의 PREROUTING이 여러 번 적용되어 있는 경우 그럴수도 있습니다. 아래 명령어를 통해 iptables 등록 상태를 확인합니다.
$ sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 8080
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 3000
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 3000
REDIRECT tcp -- anywhere anywhere tcp dpt:http redir ports 3000
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
PREROUTING 부분에 보면 제가 처음에 다른 포스트를 보며 8080 -> 80 포트로 세팅해뒀는데 생각해보니 내 서버는 3000번 포트를 설정하고 있던 걸 깨달았습니다.
그래서 다시 3000 -> 80 포트로 세팅하는 명령어를 입력했는데도 원하는대로 세팅이 안되어서 여러 번 같은 명령어를 입력한 것을 볼 수 있습니다(…)
해결 방법
해결 방법은 PREROUTING 부분을 한 항목만 남기면 되는 것이었습니다.
다음은 맨 위 항목을 하나 삭제하는 명령어입니다.
sudo iptables -t nat -D PREROUTING 1
이후 다시 라우팅 항목들을 확인해보면
$ sudo iptables -t nat -L
하나가 사라져 있을겁니다.
이렇게 해서 항목을 하나만 남겨두고 다시 node.js 앱을 실행시키면 정상적으로 실행됩니다.