Nginx 의 버전을 체크하다가 배포에 대한 고민을 해봤습니다.
Nginx 에서 지원하는 Stable 한 버전은 1.4버전과 1.6버전이고
현재 개발은 1.9버전까지 진행중입니다.
yum 과 docker hub 에서 제공하는 버전은 1.1x.x 버전으로 제가 진행중인 예제와 같습니다.
Stable 버전을 갈지.. 배포를 쉽게갈 수 있는 1.1 버전으로 갈지 고민하다 결국 1.1버전으로 선택.
이번 예제에서는 Docker 를 이용하여 Nginx 를 세팅해보겠습니다.
우선 Docker Compose 를 다운받습니다.
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
다운이 끝났다면 해당 파일에 접근권한을 부여합시다.
$ sudo chmod +x /usr/local/bin/docker-compose
버전확인이 된다면 설치 완료.
$ docker-compose --version
버전이 확인되는군요.
Docker-compose 는 Docker 컨테이너들을 하나로 관리해서
컨테이너들이 따로 작동할 때 생길 수 있는 문제들을 방지해줍니다.
이제 docker-compose 를 구성할 폴더를 만들고 이미지를 다운받아봅시다.
$ mkdir docker-compose-nginx
$ sudo docker search nginx
$ sudo docker pull nginx
(위 처럼 다운받게 되면 1.17 버전이 다운로드 됩니다.
앞에서 예제로 사용했던 버전이 1.14.1 버전이라 1.14.1 버전으로 수정했습니다.)
$ sudo docker pull nginx:1.14.1
이제 docker-compose 에서 사용할 yml 파일을 작성해줍시다.
$ vi docker-compose.yml
version: '3'
services:
nginx:
container_name: nginx
user: root
image: "nginx:test"
ports:
- "80:80"
- "443:443"
network_mode: host
컨테이너 이름은 nginx 이며 nginx:test 라는 이미지를 사용합니다.
해당 이미지의 설정파일들을 변경하기위해 Dockerfile 을 만들어줍시다.
$vi Dockerfile
FROM nginx:1.14.1
User root
COPY ./nginx /etc/nginx
COPY ./ssl /etc/ssl
COPY ./html /usr/share/nginx/html
COPY ./nginx.pid /run/nginx.pid
CMD ["nginx", "-g", "daemon off;"]
FROM nginx:1.14.1 : nginx:1.14.1 이미지를 사용하며
User root : root 계정으로 실행한다.
COPY : 각 설정파일 위치에 해당파일들을 덮어쓴다.
(host 에 있는 파일들을 미리 옮겨서 사용합니다.)
CMD : 해당 container 가 실행될 때 실행되는 명령어 입니다.
./nginx : /etc/nginx (설정파일)
./ssl : /etc/ssl (ssl key 설정파일들. ssl/private ssl/certs)
실제 certs 폴더는 /etc/pki/tls 에 있었음. etc/ssl/certs 는 symbolic link
./html : /usr/share/nginx/html Docker Image 와 yum 에서 다운받은 패키지의 html 파일이 달라서 바꿔줬음
./nginx.pid : 실제 pid 를 인식하지 못해서 docker-compose 를 종료해도 nginx 가 살아있는 케이스가 발생했었음.
이제 설정을 마쳤으면 Docker Image 를 빌드해줍시다.
$ sudo docker build -t nginx:test .
option -t : tag 남기기
. : 해당 위치에 있는 Dockerfile 기준으로 build
docker ip 확인
$ ip addr show docker0
docker0 에게 host ip port 접근권한 부여
$ iptables -A INPUT -i docker0 -j ACCEPT
build 된 이미지를 docker-compose 로 실행해봅시다.
$ docker-compose up
127.0.0.1 접속~
경고가 있지만 https 페이지로 접속이 되네요.
기본 포트로 접속했지만 443 포트로 redirect 된 페이지를 확인할 수 있습니다.
Load Balancing 기능을 확인해봅시다.
예전에 사용했던 플라스크 기본앱 2개를 각각 5000번, 5001번 포트로 실행시켜줍니다.
Load Balancing 기능 확인 완료.
설정에서 막혔던 부분을 공유합니다.
docker-compose 가 sudo 권한을 요청할 때가 많습니다.
그래서 저는 root 계정으로 예제를 진행했습니다.
root(sudo) 권한으로 사용하시려면 다음과 같은 설정을 해야합니다.
root 계정에서 다운받으신분은 넘기셔도 됩니다.
# 1
$ sudo vi /root/.bashrc
alias docker-compose="/usr/local/bin/docker-compose"
추가 후 root 계정으로
$ source /root/.bashrc
명령 실행
# 2
호스트 -> 컨테이너로 copy
$ docker cp [host 파일경로] [container name]:[container 내부경로]
컨테이너 -> 호스트로 copy
$ docker cp [container name]:[container 내부경로] [host 파일경로]
# 3
build 에 사용된 ssl 폴더에 certs 폴더가 symbolic link 로 저장되어 있음.
docker container 에서 실행된 nginx 가 해당 폴더 안에 데이터를 접근 못하는 상황
실제 certs 폴더는 /etc/pki/tls 에 있었음.
- 확인방법
- certs 파일이 존재하는 곳에서 ls -al 로 파일 권한을 확인하면 실제 경로가 나옴.
[root@solar ssl]# ls -al
total 12
drwxr-xr-x. 3 root root 34 Apr 14 13:54 .
drwxr-xr-x. 138 root root 8192 Apr 14 09:20 ..
lrwxrwxrwx. 1 root root 16 Dec 12 04:19 certs -> ../pki/tls/certs
drwx------. 2 root root 34 Apr 10 16:37 private
symbolic link 로 잡힌곳은
lrwxrwxrwx. 라는 권한으로 표기됨.
# 4
Cert Warning 제거하기
nginx | 2020/04/14 06:50:01 [warn] 1#1: "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/ssl/certs/nginx-selfsigned.crt"
nginx | nginx: [warn] "ssl_stapling" ignored, issuer certificate not found for certificate "/etc/ssl/certs/nginx-selfsigned.crt"
nginx conf 파일에서 ssl_stapling 옵션을 off 로 바꿔주면 표기되지 않음.
제 예제를 따라오신분은
/etc/nginx/conf.d/ssl.conf 파일에서 수정하시면 됩니다.
# 5
80 포트와 443 포트를 사용중이라는 메세지가 나올 때
- netstat -tnlp
- 80 포드와 443 포트를 사용중인 pid 확인
- kill -9 [pid]
docker-compose 에서 CMD 로 실행된 Nginx 가 정상적으로 종료되지 않을 때 발생했다.
해당 예제에서 언급된 nginx.pid 를 옮겨주면 해당 현상이 발생하지 않는다.
'Linux > nginx' 카테고리의 다른 글
nginx 에 vue 연동하기 (403 Error 해결) (0) | 2021.01.18 |
---|---|
CentOS 8 Nginx Load Balancing 설정 (0) | 2020.04.07 |
CentOS 8 Nginx Openssl 설정하기 (https) (0) | 2020.04.02 |
CentOS 8 Nginx Flask 연동 (GET, POST) (0) | 2020.03.24 |
CentOS 8 Nginx Reverse Proxy Config (0) | 2020.03.24 |
최근댓글