AWS EC2에서 Ubuntu18.04LTS 버전으로 진행할 것 입니다.
Putty와 FileZila 를 사용합니다.
이전 환경 세팅은 저의 이전 블로그를 참고해주시기 바랍니다.
[2022 하계 모각코] Spring boot and MySQL AWS EC2 배포 with RDS(1)
EC2 -> 인스턴스 id를 클릭하면 위와 같은 사진이 나올 것입니다.
여기서 빨간색으로 표시된 부분을 클릭하면
위와 같은 화면이 나올탠대 여기서 우측 중반부분에 안바운드 규칙 편집
을 클릭합니다.
위와 같이 80포트(http 및 DNS 위함)와 8080포트(Tomcat)를 열고 443포트(https)그리고 우측하단의 규칙 저장
을 클릭합니다.
(ssh 22포트의 경우엔 꼭 내IP로 설정해주셔야 아무나 ec2에 접속할 수 없게 막을 수 있습니다.
만약 putty를 실행시키는 환경이 카페같은 다른 곳으로 바뀌어서 작업을 하신다면 다시 위 페이지로 와서 ssh 22포트에 접속할 수 있는 ip의 소스
를 내IP로 바꿔주어야 합니다.)
브라우저에서 EC2 서버 ip를 적고 톰캣 포트인 8080을 덧붙여서 접속해보자.(AWS EC2 보안그룹의 인바운드 설정에서 8080포트를 위에서 설명한 것 처럼 열어놓아야함)
만약 index 페이지를 따로 설정하지 않았다면 다음과 같이 나타나게 될것이고 따로 설정하였다면 White Label Error
페이지가 뜰것이다(정상적인 것임 걱정하지 말자!).
그리고 테스트 URI로 데이터가 잘 리턴되는지 확인해본다. 정상적으로 작동하는 것을 확인할 수 있다.
하지만 Tomcat 포트인 8080포트로 접속했기 때문에 가능했던 것이다.
http 포트인 80포트로 접속해보면 당연히 접속이 되지 않는다.
이제 본격적으로 80포트 접속을 8080포트로 리다이렉트 하는 방법을 알아보자.
Nginx 설정 파일을 통한 포트 리다이렉트
Nginx 설치
$ sudo apt update
$ sudo apt upgrade
$ sudo apt-get install nginx
Nginx 시작
$ sudo service nginx start
Nginx를 시작하였다면 EC2 서버 ip주소(퍼블릭ipv4주소)에 80포트로 접속했을때 다음과 같이 나타난다. (사전에 AWS EC2 보안그룹 인바운드 설정에서 80포트를 맨 위에 설명한 것 처럼 열어놓아야함)
참고로 Nginx에 관련된 커맨드는 다음과 같다.
$ nginx -v
$ sudo service nginx status
$ sudo service nginx restart
$ sudo service nginx stop
$ sudo sercice nginx reload
nginx.conf는 Nginx의 메인 파일이다. /etc/nginx 경로에 위치하고 있다.
다음 커맨드를 입력하여 파일 내용을 확인해본다.
cat nginx.conf
내용을 확인해보면 여러 내용이 나타나는데, 특히 http 블록 안에 보면 다음과 같은 내용이 있다.
/etc/nginx/conf.d
의 모든 .conf
파일들과
/etc/nginx/sites-enabled
의 모든 파일들을 include 해온다는 뜻이다.
우리가 건드려야 할 곳은 sites-enabled
이다.
일단 결론부터 말하자면 다음과 같다.
/etc/nginx
디렉토리 안에는 sites-available
디렉토리와 sites-enabled
디렉토리가 있다.
우리가 실제로 설정하고 저장해야 할 설정파일들은 .conf 확장자로 sites-available에 저장하고, 해당 파일들에 대한 심볼릭 링크들을 sites-enabled에 위치시켜야 한다.
즉, 구조는 다음과 같다.
따라서
sites-available
에 설정파일을 생성하여 설정하고 싶은 내용을 적고
그에 대한 심볼릭 링크를 sites-enabled
에 만들어
Nginx를 restart하거나 reload하면
nginx.conf
에서 sites-enabled
에 있는 심볼릭 링크들을 통해 설정파일 내용들을 읽어와 적용한다.
라고 할 수 있다.
sites-available에 설정파일 생성 및 적용
sites-available 디렉토리에 들어가 .conf 파일을 생성한다. 파일 이름은 원하는 대로 하면 된다.
필자는 test.conf로 설정하였다.
$ cd /etc/nginx/sites-available
$ sudo vi test.conf
test.conf 파일에 다음 내용을 붙여넣는다(Shift + insert
키).
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
이후 해당 test.conf 파일의 수정내역을 저장(w)후 vi창을 나오고(q) 싶다면
:wq
를 입력하면 된다.
위 코드에 대해 간단히 설명하자면,
80포트로 localhost에 들어오는 모든 request에 대해 localhost 8080포트로 접속하게 해주는 것이다(redirect).
각각의 요소에 대해 더 자세히 알아보자면,
listen 80;은 80포트로 요청을 받을때라는 것을 의미하고,
listen [::]:80;은 80포트로 IPv6에 대한 요청을 받을때라는 것을 의미한다. (참고한 링크)
요청할때의 호스트 이름을 설정한다.
현재 상황은 도메인을 구입하지 않은 상태라 localhost로 작성하였고,
만약 ip와 연결된 도메인을 구입하였다면 해당 도메인을 적어주면 된다.
특정 url을 처리하는 방법을 정의한다.
위 내용에서는 '/'로 설정해 놓았기 때문에 모든 Request에 대해 적용된다.
Request에 대해 어디로 리다이렉트 할것인지 설정한다.
위 내용을 기준으로는 http://localhost:8080 으로 설정하였다.
Request에 대한 실제 데이터를 http header의 각 항목에 할당한다.
여기까지 설정하였으면 파일을 저장한 후에 sites-enabled에 심볼릭 링크를 만들어준다.
sudo ln -s /etc/nginx/sites-available/test.conf /etc/nginx/sites-enabled
그 다음 sites-enabled로 이동하여 확인해보면
$ cd /etc/nginx/sites-enabled
$ ls -l
다음과 같이 test.conf
심볼릭 링크가 추가된 것을 알 수 있다.
그런데 default
심볼릭 링크도 있는 것을 확인할 수 있다. 이것은 sites-available
에 원래부터 존재하는 기본설정 파일인 default파일을 가리키는 심볼릭 링크인데, 존재하게 되면 우리가 설정한 test.conf
파일이 적용되지 않으므로 삭제해준다.
sudo rm default
그러나 sites-enable
에서 심볼릭 링크를 삭제한 것이기 때문에 nginx.conf
에 적용만 안될뿐, sites-available
에는 default 파일이 존재하기 때문에 적용하고 싶다면 심볼릭 링크를 다시 만들면 된다.
위와 같이 text.conf 파일이 이미 존재한다는 ln: failed
에러가 발생하면 잘 된것이다.
잘 삭제 되었는지 확인해본다.
Nginx 재구동 및 확인
Nginx를 reload또는 restart 해준다.
$ sudo service nginx reload
또는
$ sudo service nginx restart
그리고
$ cd ~
$ java -jar beer_community-0.0.1-SNAPSHOT.jar
로 톰캣서버를 실행시킨 후
브라우저에서 80포트로 접속({퍼블릭ipv4 주소}:80
)해보면 이전에 8080포트로 접속했던 화면으로 redirect 되는것을 확인할 수 있다.