본문 바로가기

오라클 클라우드

완전무료서버셋팅4) Tomcat, Nginx 설치 및 도메인 연결 [Oracle Cloud Always Free, Tomcat, Nginx, Linux, Ubuntu, iptables]

반응형

2021.06.23 - [오라클 클라우드] - 완전무료서버셋팅2) 인스턴스 원격 접속 [Oracle Cloud Always Free, SSH, 인스턴스, 가상 컴퓨터]

 

완전무료서버셋팅2) 인스턴스 원격 접속 [Oracle Cloud Always Free, SSH, 인스턴스, 가상 컴퓨터]

이전 포스팅으로 생성한 인스턴스에 접속해보자 ​ 준비물: Oracle Cloud 계정, 리전 완료된 인스턴스(와 인스턴스의 전용키), MobaXterm 프로그램 ​ MobaXterm을 실행하고 Session을 생성 1번: 생성한 인스

gaebalsaebal-developer.tistory.com

인스턴스에 원격 접속하는 방법은 위 포스팅 참고바람


이번에는 Ubuntu 환경에서 Tomcat과 Nginx를 설치하여 도메인을 연결해볼건데, 도메인은 이미 구매하여 설정완료했다는 전제하에 포스팅을 진행할 예정이다.

도메인 구매 및 Cloudflare 에 관련된 포스팅은 추후에 작성하려고 함.

 

왜 굳이 Tomcat과 Nginx를 사용했는지는.. 따로 이유는 없고 그냥 인스턴스 하나 망치기 전에 Tomcat과 Nginx로 구축했었기 때문에 똑같은 설정으로 재구축할거다.. 암튼 그런거다..


1.  root 계정으로 전환

sudo -i

2. apt의 패키지 리스트를 업데이트/업그레이드

apt update
apt upgrade
apt update 는 설치가 가능한, 즉 설치가 되어있지 않은 패키지에 대하여 최신버전으로 업데이트하고
apt upgrade 는 이미 설치되어 있는 패키지를 최신버전으로 업그레이드한다. (현재 포스팅에선 선택사항임)

3. 필요한 패키지들을 다운로드

본인은 JDK 1.8 (Java 8) 을 사용할 것이기 때문에 Tomcat9를 다운로드받아 사용할 것이지만, 그 외의 버전을 사용하고 싶다면  아래 페이지를 참고해 본인의 Java 스펙에 맞춰 다운로드 받으면 된다.
추가로 다운로드 도중 y/n 뜨는건 추가 디스크 공간을 사용해야한다는 메세지라 그냥 y하면 됨

http://tomcat.apache.org/whichversion.html

 

Apache Tomcat® - Which Version Do I Want?

Apache Tomcat® is an open source software implementation of a subset of the Jakarta EE (formally Java EE) technologies. Different versions of Apache Tomcat are available for different versions of the specifications. The mapping between the specifications

tomcat.apache.org

 

- jdk 설치

apt install openjdk-8-jdk //jdk 1.8
/*설치생략*/
java -version	//Java 버전확인

openjdk version "1.8.0_292" 와 같은 jdk 버전이 출력되면 정상설치가 된거고,  Command 'java' not found 와 같은 메세지가 출력되면 jdk가 제대로 설치되지 않은 것이므로 재설치를 시도해본다.

 

- tomcat 설치

apt install tomcat9

 

- nginx 설치

echo "deb http://nginx.org/packages/mainline/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
apt-key fingerprint ABF5BD827BD9BF62
apt install nginx

출처 : https://hoing.io/archives/5340?unapproved=1947&moderationhash=8f01ae3ed8c23bb1091ab0eac5ee535d

 

우분투(Ubuntu) Nginx Tomcat 9 연동 및 JDK 설치

 

hoing.io

- 방화벽관련 설치

apt install iptables-persistent
apt install netfilter-persistent

본인은 ufw가 아닌 iptables 를 사용해 방화벽을 수정하려고 하는데, iptables 의 경우 인스턴스를 재시작할 경우 방화벽설정이 날라갈 수 있으므로 위 두가지 패키지를 설치해 그 설정을 유지하려고 한다.

 

- net-tools 설치

apt install net-tools

방화벽을 손보고, 서버를 올리면서 netstat 같은 명령어를 심심찮게 사용할 것이기 때문에 net-tools를 설치한다.

 

 

 

4. 방화벽 설정

기본적으로 필요한 패키지를 모두 다운로드했다면 톰캣에서 기본적으로 사용하는 포트인 8080포트를 열어줘야 하는데,

위에서 말했듯 ufw가 아닌 iptables를 사용할 것이기 때문에 ufw를 끄고 iptables로 방화벽 설정을 해주려고 한다.

그리고 SSH 포트가 22번으로 계속 사용할 경우 좀 더 공격당하기 쉽기 때문에 SSH 포트도 같이 변경한다.

먼저 현재 열려있는 포트가 무엇이 있는지 확인해보자

netstat -nlp | grep LISTEN

현재 열려있는 포트중, LISTEN중인 포트만을 간추려서 보여달라는 명령어이다. 위와같이 톰캣에서 사용하는 8080포트가 열려있지 않고 sshd 로는 22번 포트가 열려있다.

vi /etc/ssh/sshd_config

위에서 15번째줄정도를 보면 #Port 22 로 주석처리되어있는 부분이 있다. 키보드자판에서 i를 누른 뒤 화살표키로 이 라인까지 이동해 아래에 Port [원하는 SSH포트] 를 추가하고 키보드자판에서 Esc키를 누른 뒤 :wq!를 입력하고 엔터를 누른다. 본인은 임의로 1234번을 오픈

ufw disable	//ufw 중지
service ssh restart //ssh 재시작
iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT	//8080포트 개방
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT	//80포트 개방 (nginx)
iptables -A INPUT -p tcp --dport 22 -j DROP	//22번포트 삭제
iptables -I INPUT 1 -p tcp --dport 1234 -j ACCEPT //SSH포트 개방, 본인은 1234로 했으나 자신이 정한 포트입력
netfilter-persistent save	//iptables 변경사항저장
netfilter-persistent restart	//netfilter-persistent 재실행
service iptables restart	//iptables 재실행
netstat -nlp | grep LISTEN	//LISTEN 포트 출력

하지만 우리는 로컬서버가 아니기때문에 Oracle Cloud의 인스턴스에서도 방화벽규칙을 수정해주어야 한다.

Oracle Cloud 인스턴스 세부정보에서 서브넷의 링크를 클릭하여 보안그룹을 수정하자.
보안 목록에 자동으로 생성되어있는 리스트를 클릭한다.
디폴트 리스트를 보면, 8080, 1234포트가 열려있지 않으니 수신 규칙 추가 버튼을 눌러 수신 규칙을 추가한다.
소스 CIDR 에 "0.0.0.0/0" 은 사실상 모든 IP 주소에서 오픈하도록 입력한 것인데, 초록색 상자의 경우 SSH 접근이기때문에 본인의 컴퓨터 IP 주소만 오픈하는 것이 좋지만 나는 테스트용이기 때문에 모두 오픈으로 입력했다.

본인은 이미 전에 80포트를 추가해놔서 이미지를 첨부할 때 설명을 빠뜨렸는데, 똑같이 80포트도 추가한다

 

이후 수신 규칙 추가가 완료되면 주소창에 http://[공용IP주소]:8080를 입력해보면 톰캣 디폴트페이지가 나온다.

대충.. 지금뜨는 html을 어디서 찾을 수 있으며 톰캣이 어느 경로에 깔려있고 그런 내용들이니 읽어보세요..네..

잘 설치되어 실행된 것은 확인이 되었고 nginx의 proxy_pass로 리다이렉트해줄 것이기 때문에 8080포트는 더 이상 열어놓지 않아도 된다. 8080번 포트에 대한 수신규칙도 삭제하고, 리눅스의 방화벽에서도 삭제해준다.

iptables -A INPUT -p tcp --dport 8080 -j DROP	//8080번포트 삭제
netfilter-persistent save	//iptables 변경사항저장
netfilter-persistent restart	//netfilter-persistent 재실행
service iptables restart	//iptables 재실행

그리고서 MobaXterm 을 종료하지 말고, 아직 작업중이던 터미널이 켜져있는 상태로 터미널을 하나 더 켜서 접속이 되는지 확인해봐야한다. 절대로 확인해!!!!!! 본인은 진지하다. 아주 진지하다. 궁서체다. 확인안하고 막 껐다가 인스턴스에 접근 못해서 날려먹으면 절대 내 탓이 아니다.

다시한번 말한다 절대 확인하고 꺼!!!!!!!!!!!!!!!!!!!!!!!!!!!
포트번호를 수정한 후 더블클릭해서 정상작동되면 OK 근데 접속안되면 방화벽이 안열렸거나, 기타 문제이니 꼭 해결해야함. 아니면 접속 안돼서 인스턴스 날려먹음 그럼 처음부터 다시해야함


 

 

 

5. 도메인 포워딩

nginx 를 설정해야할 차례다. nginx를 까는 순간부터 실행되고 있으니 http://[공용IP]로 접속하여 잘 접속되는지부터 확인하자

음 영롱하네 나도 네가 좋아 nginx


이제 구매했던 도메인을 입력하여 tomcat으로 접근할 수 있도록 설정해보겠다.

cd /etc/nginx
cat nginx.conf

 

conf 파일을 확인해보니, /etc/nginx/conf.d안에 있는 모든 *.conf 파일을 불러온다고 써져있는 것을 보아하니 /etc/nginx/conf.d의 하위에 설정파일을 추가하면 될 듯 하다.

 

cd conf.d
vi default.conf

빨간 박스친 곳만 봐도 무방하다.

8080포트를 사용할거면 위에서 왜 8080포트를 닫은거냐고 물어볼 수도 있다.
proxy_pass는 내부 -> 내부 이기때문에 위에서 포트를 닫음으로써 "외부에서 8080포트에 접근하는 것"은 제한하고 "내부에서 8080포트에 접근하는 것"은 가능하도록 설정한 것이다.
외부에선 최소한의 포트만 접근가능하도록 하는 것이 맞다는 게 내 의견이다. 본인은 보안전문가가 아니기 때문에 그냥 개인적인 의견임ㅎ
8080포트로는 tomcat이 돌아가고 있기 때문에 proxy_pass로 http://localhost:8080를 설정해주면 톰캣의 경로로 이동시켜준다. 이후 nginx를 재시작해주고 도메인으로 접근해보자
service nginx restart

톰캣페이지다. 아름답다.


이로써 방화벽을 간단히 수정하고 tomcat과 nginx를 사용해 기본적인 페이지 연결을 해보았다.

다음 포스팅에서는 실제 프로젝트 war를 tomcat으로 실행시키고, 오라클 DB를 연동해보겠다.

 

이전글

2021.06.25 - [오라클 클라우드] - 완전무료서버셋팅3) 오라클 DB 만들기 [Oracle Cloud Always Free, ATP, 오라클, Oracle]

다음글

포스팅예정