지석이의 일기
하나의 리눅스 서버에 WEB서버를 추가해보자 (nginx) + 8080포트 tomcat 본문
이때까지 서버에 단 하나의 톰캣만 설치하고
iptables -t net -A PREROUTING -p tcp --dprot 80 -j REDIRECT --to-port 8080
위의 명령어 "80 PORT로 들어오는 요청을 8080으로 전환" 을 사용해 왔다.
IPTABLES 의 REDIRECT 를 사용해놨으면 다음과 같은 흐름이다. (AS-IS)

이렇게 하면 하나의 톰캣으로 도메인에 8080포트를 사용하지 않고 평상 도메인을 사용한 것처럼 보이긴 한다.
필자는 WEB서버를 붙혀 HTTPS를 사용해야할 일이 생겨 IPTABLES를 뜯어내고, 저기 위치에 NGINX를 붙히도록 하겠다.
아래과 같은 형식으로 수정하면 된다. (TO-BE)

기본 도메인 포트(80)으로 들어왔을 경우, 서버내의 PORT 8080 톰캣으로 보내는 흐름이다.
물론 이 방식으로 할 경우 평상도메인으로 사용했을떄, 톰캣이 8080으로 서버를 오픈해도 8080포트가 보이지 않는다.
중간에 WEB서버를 생성하는 일련의 과정을 진행하자.
1. IPTABLES 의 REDIRECT 삭제.
만약 IPTABLES를 사용안했다면 상관없다. 필자는 사용중이였기에 해당 설정을 삭제해주자.
포트 포워딩 확인
sudo iptables -t nat -L --line-numbers

이렇게 보면 2개의 포워딩이 있는데 num를 보자면
1 http(80)으로 요청오면 8080포트로 전환
2 https(443)으로 요청오면 8443포트로 전환
이다
이번에 WEB서버를 앞에 둘것이므로 둘다 삭제해주자.
포트 포워딩 삭제
sudo iptables -t nat -D PREROUTING 1
맨 마지막에 숫자는 위에 NUM이다.
1번을 삭제하면 2번에 있던 제약이 1번으로 내려온다. 해당점 유의하고 삭제하자
2. WEB서버 설치
우선 필자의 서버는 CENTEROS 7 이다.
niginx 가 설치하기전 repo 설정을 저장하자.
vi /etc/yum.repos.d/nginx.repo
물론 nginx를 처음 설치했다면 저런 건 없을것이다. 새롭게 작성하자
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
맨위에 [nginx]도 뺴먹으면 안된다 ㅋ
아래의 명령어로 nginx 설치 나오는 모든건 Y로 넘어가 주자.
yum install -y nginx
설치를 다하면 /etc/nginx/conf.d 경로에 default.conf 파일이 생성되어있다.
해당 파일을 백업하고, default.conf ==> default.conf.back
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.back
이번엔 필자가 tomcat에 연동할 예정이므로, tomcat.conf 를 생성해 톰캣전용 설정파일을 새로 생성하겠다.
vi /etc/nginx/conf.d/tomcat.conf
해당 설정파일에 입력되어야할 내용들은 어디서 들어온 요청들을 어디로 어떻게 보낼지를 작성하면된다.
server {
listen 80;
location / {
# 80포트로 접속한 경우 로컬 8080 포트로 넘김
#proxy_pass http://localhost:8080;
proxy_pass {도메인}:{포트};
# 넘겨받을 때의 버전을 지정
proxy_http_version 1.1;
# 넘겨받을 때의 헤더 정보를 지정
# 호스트 명
proxy_set_header Host $host;
# 클라이언트가 Host 헤더로 넘기는 오리지널 호스트명
proxy_set_header X_Forwarded-Host $host;
# 프록시 서버의 호스트명
proxy_set_header X-Forwarded-Server $host;
# proxy 서버의 IP가 아닌, 실제 클라이언트이 IP정보
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy 에서 요청할때 사용하는 프로토콜 정보 (http or https)
proxy_set_header X-Forwarded-Proto $scheme;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
여기까지가 딱 nginx 톰캣용이고, nignx가 실행할때 이 설정파일을 읽도록 해야한다.
/etc/nginx 경로에 가면 nginx.conf가 보이는데 맨아래 include /etc/nginx/conf.d/tomcat.conf 을 기입해주자.
vi /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 200;
root /home/miyata3/marsphoto/.well-known;
#gzip on;
include /etc/nginx/conf.d/tomcat.conf;
}
이제 nginx 시작 종료 재시작은 다음과 같다
#nginx 시작
sudo service nginx start
#nginx 종료
sudo service nginx stop
#nginx 재시작
sudo systemctl restart nginx
#nginx 상태보기
sudo service nginx status
#서버 재부팅시 nginx 재시작
sudo systemctl enable nginx.service
위에 내용을 합산해보면
- 서버에 첫 접근은 nginx 의 nginx.conf 의 sever 내용의 listen 포트를 읽고, 해당 객체의 proxy_pass로 보낸다.
- 들어오는건 80으로 들어오되(포트가 안보이는 도메인) 8080으로 오픈한 톰켓으로 요청을 보내는 것이다.
웹서버의 80포트를 listen해놨으니 도메인에 포트를 삭제하고 접속해보자.
Web서버(nginx)와 Was(tomcat 포트8080)서버를 둘다 기동이후 접속해보면 된다.
다음 시간엔 https를 달아 보자.
'Server' 카테고리의 다른 글
React 프로젝트 클라우드 서버에 배포 (1) | 2024.03.17 |
---|---|
AWS EC2에서 Redis 설치하고 Spring Boot에서 사용하기 (0) | 2024.01.15 |
Nginx에 https 을 연결 - letsencrypt (0) | 2023.06.12 |
AWS에 나만의 계정을 만들어보자. 키페어 (.pem)없이 접속하는 계정 만들기 (0) | 2021.06.06 |
AWS를 이용해서 서버를 호스팅(Host)하자. (1) | 2021.06.06 |