
nginx reverse proxy로 특정 경로로는 wordpress 서버 연결, 이외 경로는 별도 웹페이지를 구성하고 있는 내부 nginx 서버로 이동 시킨다.
version: "3"
services:
nginxproxy:
depends_on: # 다른 컨테이너들이 모두 실행 된 후 요청을 포워딩 해줘야하기 때문
- nginx
- db
- wordpress
image: nginx:latest
ports:
- "80:80" # 해당 컨테이너만 외부에 포트를 열어둔다.
restart: always # 서버가 항상 돌아가도록 설정.
volumes:
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
nginx:
image: nginx:latest
restart: always
db: # 워드프로세스는 기본적으로 db가 필요함.
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on: # db가 먼저 실행된 후 워드프레스가 동작해야 정상 동작.
- db
image: wordpress:5.7.0
ports:
- "8080:80" # 워드프레스 테스트를 위한 테스트용 포트를 열어둔다.
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
user nginx;
worker_processes auto;
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" "$request_uri" "$uri"'
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
upstream docker-wordpress {
server wordpress:80;
}
upstream docker-web {
server nginx:80;
}
server {
location /blog/ {
#rewrite ^/blog(.*)$ $1 break;
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 / {
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;
}
}
}
nginx reverse proxy 서버에서 경로에 /blog 부분이 매칭되므로, 내부 wordprocess 서버로 동일 주소로 요청하게 된다.
따라서 워드 프레스 기본 설치 주소 /wp-admin/install.php에서 /blog에 매칭이 될 수 있도록 기존 파일들을 /blog/ 폴더로 옮겨야한다. 옮긴 후 파일 경로는 /blog/wp-admin/install.php가 된다.
wordpress 설치 경로 변경
wordpress 컨테이너 쉘 실행
docker exec -it 06_wordpress_nginx_proxy-wordpress-1 /bin/bash
blog 폴더를 만들어 해당 폴더로 현재 디렉토리의 모든 하위 폴더/파일 이동
mkdir blog
move * blog/
해당 move 명령 시 cannot move 'blog' to a subdirectory of itself, 'blog/blog'가 발생하는데 blog 폴더까지 blog 폴더에 넣는다는 의미이므로 오류가 나는 것이 당연한 것이다.
따라서 현재 디렉토리(/var/www/html)에서 blog를 제외한 폴더와 파일들이 blog 디렉토리 하단으로 이동한다.
해당 URl을 입력하여 wordpress 사이트가 정상 동작하는지 테스트한다.
http://자신의 서버 IP/blog/wp-admin/install.php
해당 URl을 입력하여 nginx 사이트가 정상 동작하는지 테스트한다.
http://자신의 서버 IP