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

조회수 5495회

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

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

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

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

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

  1. 위 문제에 대한 방법을 알고 싶습니다.
  2. 추가적으로 팁이 있으면 부탁드립니다. 감사합니다.

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.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 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.