docker 설치 + nginx 설치
https://velog.io/@sherlockid8/centos7%EC%97%90-Docker%EC%84%A4%EC%B9%98-%ED%9B%84-nginx-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
centos7에서 nginx와 tomcat 연동 작업을 해본적이 있는데 거의 비슷합니다.
제 방법이 100프로 정답은 아니지만 제가 한 경험을 기록해보자 합니다.
docker ps로 확인해보면 저는 nginx라는 이름으로 nginx가 올라가 있습니다 실행 시켜주세여
docker exec -it nginx /bin/bash
etc/nginx로 가시면 nginx.conf파일이 있습니다
exit하시고
docker cp nginx:/etc/nginx/nginx.conf /home/nginx.conf
해서 저는 home밑으로 파일을 가져 왔습니다.
가져온 파일은
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
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 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
이렇게 생겼을 것 입니다.
include /etc/nginx/conf.d/*.conf; 이부분 때문에
conf.d아래에 conf파일이 실행되는데 확인해보시면 거기엔 default.conf 파일이 있습니다. 그 곳에서 server을 정의하고 있는데 그 파일을 두고 여기서 바로 서버를 세팅해줄 것 입니다. 따라서 아래와 같이 수정해주세요
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 65;
#gzip on;
#include /etc/nginx/conf.d/*.conf; 이 아래로는 새로 작성한 부분입니다
upstream tomcat {
server 컨테이너ip:8080;
server 컨테이너ip:8080;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
proxy_pass http://tomcat;
}
}
}
저는 upstream으로 서버 2개를 정의해 주었는데 하나는 main서버고 하나는 backup서버입니다. proxy_pass http://tomcat 이 부분이 upstream tomcat과 같아야합니다. upstream tomcat1로 하였다면 proxy_pass http://tomcat1로 해주어야합니다.
그리고 컨테이너 ip는 아래 명령어로 확인이 가능합니다.
docker inspect 컨테이너명 | grep IPAddress
포트는 기본포트인 8080으로 해주셔야합니다.
수정이 완료 되었으면 수정한 파일을 다시 docker로 옮겨줍니다.
docker cp /home/nginx.conf nginx:/etc/nginx/nginx.conf
그리고 docker restart nginx을 하면 끝입니다!
서버ip:서버nginx포트 치면 아래와같이 tomcat이 연동되어 톰캣화면이 나오는걸 확인하실 수 있습니다
만약 오류가 난다면
docker logs -f --tail 100 nginx
로그를 확인해보기!
헤맨 부분은 tomcat과 연동할때 ip 부분인데 컨테이너끼리 연동이기때문에 해당 컨테이너의 ip를 정확히 입력해주어야 합니다... 그리고 nginx도 서버에서 설정한 포트와 컨테이너에서는 다르다는 것을 알아야한다.!
나의 경우엔 서버 80 포트가 사용중이라서 8089로 nginx를 올렸고 톰캣은 8888과 8080으로 올렸는데 내 서버포트와 상관없이 conf파일은 컨테이너 내에서 돌아가는 실행환경이란걸.. 생각이 짧은 바보(나)는,, 빠르게 알지 못했고,, 나와같은 사람이 더 있길 ㅎ 바란다..ㅎㅎ