이번에도 저번에 공부했던 것 복습 겸 Nginx의 Reverse Proxy를 이용하여 포워딩을 해보겠습니다.
먼저 아키텍처 구조는 다음과 같습니다.
URL로 포워딩을 했습니다!
뭔가 더 예쁘게 아키텍처 그려보고싶은데, 맘대로 잘 안되네용
구성은 다음과 같습니다.
앞단에 nginx_proxy 서버를 이용하여 뒷단의 두 서버로 URL 포워딩을 합니다.
도커 컨테이너는 nginx_proxy, app1, app2, mysql 총 4개입니다.
그리고 app2의 서버는 wordpress를 이용했는데,
wordpress는 db로 mysql 또는 마리아DB가 주로 사용되는데, 저는 제가 자주쓰는 mysql을 이용했습니다.
root
│
└───docker-compose.yml
│
└───nginx
└───nginx.conf
version: "3"
services:
nginx_proxy: # 컨테이너1
depends_on:
- nginx
- db
- wordpress
image: nginx:latest
ports:
- "80:80"
restart: always
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
nginx: # 컨테이너2
image: nginx:latest
restart: always
db: # 컨테이너3
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: sujin
MYSQL_DATABASE: mydb
MYSQL_USER: sujin
MYSQL_PASSWORD: sujin
wordpress: # 컨테이너4
depends_on:
- db # 종속성: db -> wordpress
image: wordpress:5.7.0
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: mydb
WORDPRESS_DB_USER: sujin
WORDPRESS_DB_PASSWORD: sujin
wordpress는 db가 먼저 실행된 뒤에 실행해야하므로,
depends_on 옵션으로 순서를 지정해주었습니다.
추가적으로 설정한 부분은 다음과 같습니다.
.
.
.
upstream docker-wordpress {
server wordpress:80;
}
upstream docker-web {
server nginx:80;
}
server {
location /app2/ {
proxy_pass http://docker-wordpress;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
location /app1/ {
rewrite ^/app1(.*)$ $1 break;
proxy_pass http://docker-web;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
.
.
.
wordpress도 rewrite옵션을 써서 했었는데,
이게 뭐가 깨지더라구요...?
뜨긴 뜨는데, 깨지는 게 있어서
그냥 rewrite옵션을 제거하구 따로 루트html 디렉토리에 app2파일을 추가하고 여기에 루트html 디렉토리의 모든 파일들을 app2로 이동시켰습니다!
(이 부분은 도커 컨테이너 먼저 띄운 후, 직접 컨테이너에 접속해서 실행하면 됩니다.)
docker-compose up -d 명령어를 통해 도커 컨테이너를 띄우면 다음과 같습니다.
ubuntu@ip-172-31-38-68:~$ docker-compose up -d
Building with native build. Learn about native build in Compose here: https://docs.docker.com/go/compose-native-build/
Creating network with the default driver
Pulling nginx (nginx:latest)...
latest: Pulling from library/nginx
5eb5b503b376: Pull complete
1ae07ab881bd: Pull complete
78091884b7be: Pull complete
091c283c6a66: Pull complete
55de5851019b: Pull complete
b559bad762be: Pull complete
Digest: sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Status: Downloaded newer image for nginx:latest
Pulling db (mysql:5.7)...
5.7: Pulling from library/mysql
6552179c3509: Pull complete
d69aa66e4482: Pull complete
3b19465b002b: Pull complete
7b0d0cfe99a1: Pull complete
9ccd5a5c8987: Pull complete
2dab00d7d232: Pull complete
64d3afdccd4a: Pull complete
6992e58be0f2: Pull complete
67313986b81d: Pull complete
7c36a23db0a4: Pull complete
d34c396e3198: Pull complete
Digest: sha256:afc453de0d675083ac00d0538521f8a9a67d1cce180d70fab9925ebcc87a0eba
Status: Downloaded newer image for mysql:5.7
Pulling wordpress (wordpress:5.7.0)...
5.7.0: Pulling from library/wordpress
f7ec5a41d630: Pull complete
941223b59841: Pull complete
a5f2415e5a0c: Pull complete
b9844b87f0e3: Pull complete
5a07de50525b: Pull complete
caeca1337a66: Pull complete
5dbe0d7f8481: Pull complete
a12730739063: Pull complete
fe0592ad29bf: Pull complete
c3e315c20689: Pull complete
8c5f7fdfcedf: Pull complete
8b40a9fa66d5: Pull complete
81830aebb3f8: Pull complete
7b04d4658443: Pull complete
0e596b6c428e: Pull complete
ec84879c7faf: Pull complete
5f211a0d2061: Pull complete
47c48169dcd4: Pull complete
19b34857b097: Pull complete
78810a623bdc: Pull complete
25db262383c2: Pull complete
Digest: sha256:975d87d59a52d806a5049040cbb0867f9988bfecd17342637b70c3811c3dc991
Status: Downloaded newer image for wordpress:5.7.0
Creating db_1 ... done
Creating nginx_1 ... done
Creating wordpress_1 ... done
Creating nginx_proxy_1 ... done
총 4개의 컨테이너가 생성되었음을 확인할 수 있습니다.
ubuntu@ip-172-31-38-68:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a38c61d562d nginx:latest "/docker-entrypoint.…" 47 minutes ago Up 47 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp nginx_proxy_1
b491c5f4c249 wordpress:5.7.0 "docker-entrypoint.s…" 47 minutes ago Up 47 minutes 80/tcp wordpress_1
399794b99e72 nginx:latest "/docker-entrypoint.…" 48 minutes ago Up 47 minutes 80/tcp nginx_1
3485c5aabde7 mysql:5.7 "docker-entrypoint.s…" 48 minutes ago Up 47 minutes 3306/tcp, 33060/tcp db_1
- ip주소/app1 -> app1서버(nginx)로 포워딩
- ip주소/app2 -> app2서버(wordpress)로 포워딩
먼저 간단히, 설정을 완료한 이후에 접속하면 다음과 같습니다.
아직 아무것도 안 꾸며서 허접?하지만
나름 제 사이트 블로그가 만들어졌습니다!