1.前提条件
本文假设您已安装了Docker、Docker Compose和Nginx,并且已经申请了域名证书。
2.配置步骤
docker-compose.yml文件的创建与配置
首先,在工作目录下创建一个应用目录,例如命名为“wordpress”:
cd /home/user/workspace
mkdir wordpress
cd wordpress
touch docker-compose.yml
vim docker-compose.yml
以下是docker-compose.yml
文件的配置内容:
version: '3.0'
services:
db:
image: mysql:8.0 # 使用mysql镜像,不建议修改版本号,后续如果要升级,千万记得备份数据库
container_name: wordpress-db
restart: unless-stopped
command: --max-binlog-size=200M --expire-logs-days=2
environment:
MYSQL_ROOT_PASSWORD: yourrootpassword # root密码
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: userpassword # wordpress用户密码
volumes:
- './db:/var/lib/mysql'
networks:
- default
app:
image: wordpress:latest
container_name: wordpress-app
restart: unless-stopped
ports:
- 8080:80 # 按需修改,左边的8080可以改成服务器上没有用过的端口
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: userpassword # 按需修改,wordpress用户密码
volumes:
- './app:/var/www/html'
links:
- db:db
depends_on:
- db
networks:
- default
networks:
default:
name: wordpress
Nginx配置
在配置Nginx时,需注意避免重定向死循环的问题。通过添加proxy_set_header X-Forwarded-Proto $scheme;
配置,无需修改WordPress的wp-config.php
文件。
以下是Nginx的配置示例:
server {
listen 80;
server_name yourdomain.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name yourdomain.com;
#ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
#ssl on;
ssl_certificate /etc/nginx/ssl/yourdomain.public.pem; #你的证书路径
ssl_certificate_key /etc/nginx/ssl/yourdomain.private.key; #你的证书路径
location / {
proxy_pass http://127.0.0.1:8080; # 转发规则,同docker-compose.yml文件里wordpress的端口
proxy_cache_bypass $http_upgrade;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
}
}
proxy_set_header Upgrade $http_upgrade;
- 这行配置用于设置HTTP请求头中的
Upgrade
字段。如果客户端请求中已经包含了Upgrade
头(通常用于WebSocket升级连接),则Nginx会将这个值传递给后端服务器。$http_upgrade
是一个内置的Nginx变量,它包含了客户端请求的Upgrade
头的值。
- 这行配置用于设置HTTP请求头中的
proxy_set_header Connection "upgrade";
- 类似于上面的配置,这行设置HTTP请求头中的
Connection
字段为"upgrade"。这通常与WebSocket升级请求一起使用,告诉后端服务器客户端想要升级连接。
- 类似于上面的配置,这行设置HTTP请求头中的
proxy_set_header Host $host;
- 这行配置将请求头中的
Host
字段设置为客户端请求的原始Host
值。$host
是Nginx的内置变量,通常包含了请求的域名。
- 这行配置将请求头中的
proxy_set_header X-Real-IP $remote_addr;
- 这用于设置
X-Real-IP
请求头,它保存了客户端的IP地址。$remote_addr
是Nginx变量,它存储了客户端的IP地址。
- 这用于设置
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- 设置
X-Forwarded-For
头,用于记录代理服务器的链路信息。如果客户端请求已经通过了其他代理,$proxy_add_x_forwarded_for
变量会包含客户端的原始IP以及之前所有代理服务器的IP地址。
- 设置
proxy_set_header X-Forwarded-Proto $scheme;
- 这行配置用于设置
X-Forwarded-Proto
头,它告诉后端服务器原始请求使用的协议(http或https)。$scheme
变量包含了请求的协议。
- 这行配置用于设置
proxy_set_header X-Forwarded-Host $host;
- 设置
X-Forwarded-Host
头,它用于传递原始请求的Host
头给后端服务器。在某些情况下,后端服务器可能需要知道原始请求的域名。
- 设置
proxy_set_header X-Forwarded-Port $server_port;
- 这用于设置
X-Forwarded-Port
头,它包含了客户端用来连接到Nginx的端口。$server_port
变量是Nginx的内置变量,表示接受请求的服务器端口。
- 这用于设置
3.启动docker容器
在wordpress
目录下,执行下面的命令来启动服务
docker-compose up -d
完成以上配置后,您就可以通过HTTPS访问您的WordPress网站了。