AWS EC2에서 포트 80 번에 배포하고 싶었습니다.

소개



Node.js에서 생성한 애플리케이션을 AWS EC2에 배포했습니다.
포트 3000번에서는 배포할 수 있었지만, 80번으로 배포할 수 없고 여러가지 조사했으므로,
조사한 내용과 해결 방법에 대해 설명합니다.

실행 환경


  • AWS EC2(Amazon Linux2 AMI)
  • Apache 2.4.46
  • Node.js 12.19.0

  • 하고 싶었던 일



    URL의 포트 번호 표기를 생략하고, 짧은 URL로 하고 싶었다.
    http://hogehoge:3000/http://hogehoge
    htps //w w. 오, ぇ. 코m:443/ 에 접속했을 때,
    자동으로 htps //w w. 오, ぇ. 코m/ 으로 리디렉션된다는 것을 알고 있었으므로 *1
    이 응용 프로그램에서 3000 대신 80 번 포트에서 배포하면,
    http:[パブリックIPv4アドレス]:3000/http:[パブリックIPv4アドレス]
    와 같이 포트 번호의 표기가 생략되어 URL을 짧게 할 수 있다고 생각했습니다.

    *1
    호스트명의 뒤에는, 포트 번호가 계속되게 되어 있습니다만, 대부분 생략됩니다. 생략하면 스키마 프로토콜의 웰 노운 포트가됩니다. HTTP라면 TCP 포트 번호 80번에 액세스합니다. 포트 번호를 지정하려면 ":"뒤에 포트 번호를 지정합니다.
    URL ~웹사이트(웹 페이지)의 주소~

    인용에 대한 보충: 443번도 HTTPS로서 HTTP처럼 행동합니다.

    어려움 & 오류 문



    아래 이미지와 같은 인바운드 규칙에서 Node.js에서 만든 응용 프로그램
    포트 번호 3000에서 node app.js 그러면 아래 URL로 웹에 게시할 수 있었습니다.
    http:[パブリックIPv4アドレス]:3000/
    한편, 소스 코드로 지정한 포트 번호를 3000에서 80번으로 바꾸면,node app.js를 실행할 때 다음 오류 문이 반환되었습니다.
    Error: listen EACCES: permission denied 0.0.0.0:80


    해결 방법



    아래를 참조하여 관리자 권한으로 실행해 보았지만 내 경우에는 다른 오류가 발생했습니다.
    $ sudo node app.js
    sudo: node: command not found
    

    서버를 시작할 때 작은 포트 번호를 지정하면 이 오류가 발생합니다.
    일반적으로는 관리자 권한이 없는 경우에는 1024번 이하의 포트 번호로 서버를 청취할 수 없다는 것입니다.sudo node app.js그리고 관리자 권한으로 실행하도록합시다.
    "listen EACCES 0.0.0.0:443" 오류가 발생하면

     

    이 오류는 또 다른 기사를 참조하여 해결했습니다.

    아래에서 인용한 기사내에서는, 대략으로 나누어 3개의 해결책이 제시되고 있었습니다만,
    나는 그 안에서 which 명령을 사용하여 문제를 해결했다.
    $ sudo `which node` app.js
    

    which는 지정한 커멘드의 패스를 표시하는 커멘드로, Linux에서는 $()로 둘러싸면 그 커멘드의 출력 결과를 커멘드로서 사용할 수 있다고 하는 기능이 있는 것 같다.
    sudo node에서 command not found가 표시되는 건

     

    sudo를 붙이지 않고 node를 실행할 때 제대로 실행되는데 왜 이래··?
    라고 생각해 조사해 보면, 아무래도 원인은 「sudo 첨부로 커멘드 실행하면 환경 변수인 PATH가 슈퍼 유저의 것으로 바뀌기 때문」이었다.
    sudo node에서 command not found가 표시되는 건

    참고


  • URL ~웹사이트(웹 페이지)의 주소~
  • "listen EACCES 0.0.0.0:443" 오류가 발생하면
  • sudo node에서 command not found가 표시되는 건
  • 좋은 웹페이지 즐겨찾기