AWS 의 EC2 로 우분투 서버 구축하였습니다. 포트 포워딩에 대해서.


아마존웹서비스의 EC2 솔루션으로 우분투 서버에 node.js 환경을 구축하였습니다.

접속 포트를 80번이 아닌 3000번 8080번 등으로 사용하려 합니다.

그러면 접속 URL이 http://XXX.XXX.XXX.XXX:8080 으로 접속해야 하는데,

http://XXX.XXX.XXX.XXX 로 접속할 수 있게 하고 싶습니다.

이를 포트 포워딩 한다고 지칭하는거 맞죠?

  1. 위 문제에 대한 방법을 알고 싶습니다.
  2. 추가적으로 팁이 있으면 부탁드립니다. 감사합니다.
  • 2016년 04월 28일에 작성됨
    웹 사이트 공부 중입니다. 많은 도움 주시면 좋아요.

조회수 765


1 답변


좋아요
2
싫어요
채택취소하기

일반적인 포트포워딩

포트포워딩은 리눅스에서 iptables로 할 수 있습니다.

웹 기술 상의 다양한 보안 공격에 대해 탄력적으로 대응하기 어렵습니다. 따라서 웹서버를 사용하는 것이라서 추천하지 않습니다만, 방법은 다음과 같습니다.

iptables -t nat -A PREROUTING -p tcp -d ${Local IP} --dport ${외부에서 들어오는 Port} -j REDIRECT --to-port ${리다이렉션할 Port}

질문하신 것에서는 다음과 같이 되겠습니다.

iptables -t nat -A PREROUTING -p tcp -d ${Local IP} --dport 80 -j REDIRECT --to-port 8080

웹 서버일 경우 보편적인 방법

다른방법으로는 nginx나 apache와 같은 웹 서버를 이용하여 Proxy 서버를 구축하는 방법이 있습니다.

apache의 경우 다음과 같이 합니다. 먼저 apache를 설치해주세요.

먼저 apache 모듈에서 proxy 모듈을 활성화합니다.

# 우분투에서는 다음과 같이 합니다.
$ a2enmod proxy proxy_http

다음은 추가해야하는 아파치 설정파일입니다.

   ProxyPass / http://127.0.0.1:8080/
   ProxyPassReverse / http://127.0.0.1:8080/
   ProxyPreserveHost On # 접근 도메인을 전달하려면 추가해야함.

그리고 나서 apache 서버를 시작(혹은 재시작)해준 후에 80 port로 접근해보세요. 물론 AWS 방화벽과 우분투 자체 방화벽에서 80 port 를 열어주여야 합니다.

수정답변 NGINX로 하셨으면, 링크를 참고하셔보세요.

nginx의 index 페이지가 보이는 것이라면 설정상에서 / 를 proxy 로 처리하지 않은것 같습니다.

/etc/nginx/sites-available/default

server {
    listen HTTP서버포트;

    server_name 도메인.com;

    location 전달할경로 {
        proxy_pass http://APP_PRIVATE_IP_ADDRESS:PORT;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

예시>

server {
    listen 80;

    server_name 도메인.com;

    location / {
        proxy_pass http://127.0.0.1:9000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

위와 같이 하시면 http://도메인.com/ 로 요청들어올 경우에 전달합니다. 만약 아직 도메인이 없으신 경우, 외부에서 접근하게 되는 IP를 써주거나, 잘 모르겠으면

listen 80;
server_name 도메인.com;

대신에 다음과 같이 쓰고 해보세요.

listen 80 default_server;
server_name _;

그리고 뒤의 location 부분이 중요합니다. location 다음에 오는 경로가 URL의 Path Prefix입니다. 위 예제는 /로 되어 있기 때문에 전체에 대한 설정이 됩니다.

  • 2016년 05월 01일에 수정됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.
  • 2016년 04월 28일에 작성됨
    리눅스(유닉스) 기반의 시스템에서 웹 서비스를 개발하고 있습니다.

  • 제가 하고자 하는 목적에 두 번째 방법을 추천하신다는 말씀이죠? 정말 감사합니다. 두 번째 방법으로 더 알아보고 적용해야겠네요.    상남자   2016.4.28 14:00     
  • 네, 키워드를 "우분투 아파치 reverse proxy" 로 검색해보시면 많은 글들이 있습니다.    허대영(Daeyoung Heo)   2016.4.28 14:05     
  • 말씀해주신 키워드로 검색하여 구축해보았는데, nodejs 웹 애플리케이션 포트 9000, ubuntu nginx 설치 후 proxy_pass 값을 localhost:9000 하여 서버에 접속해보니 nginx index 페이지가 보입니다... url 에 :9000를 붙여야 nodejs웹 애플리케이션 페이지가 나오는데 어디가 문제일까요... 무엇을 간과하고 있는걸까요... ㅠㅠ    상남자   2016.4.29 17:41     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close