概要
新买了一个云服务器,想搭建一个站库分离的wordpress为主的网站,采用docker技术,和nginx实现反向代理,同时实现本地搭建雷池WAF过滤流量数据,实现拦截和监测
整体架构流程
以docker内的虚拟机为基础提供web服务,portainter为docker图形化的统一管理界面,服务器本机的nginx为反向代理设置server监听81端口,让雷池绑定域名使用80端口,清洗通过网站的流量返回给81端口,再溯源到8080,最后到容器内的woedpress。
技术名词解释
- docker+wordpress+mysql
Docker安装WordPress
Docker安装wordpress并配置数据库(超详细版)
Docker实战:Docker安装WordPress,快速搭建自己的博客
- Portainer CE
Portainer CE 安装汉化教程
- Nignx
docker安装wordpress,通过nginx反向代理
nginx配置反向代理,一篇搞定!
一文理清nginx中的location配置(系列一)
- 雷池WAF
同一个站点配置
- tomcat
技术细节
ssh-ubuntu服务器
Ubuntu 系统的默认用户名是 ubuntu,并在安装过程中默认不设置 root 账户和密码。您如有需要,可在设置中开启允许 root 用户登录。具体操作步骤如下:
Ubuntu 系统如何使用 root 用户登录实例?
关于Ubuntu拒绝root用户ssh远程登录
docker-映射-链接-通信
docker映射 :可以使用 -v 参数来指定挂载点。例如,假设你有一个硬盘 /data ,你可以将它挂载到 WordPress容器内的 /var/www/html 目录上,命令如下所示:
- 配置mysql容器 此时的mysql已经运行起来了,但是需要配置允许外部访问才可使用。
#进入容器
docker exec -it mysql5.7 bash
#进入mysql数据库–123456
mysql -u root -p
#设置mysql允许访问
GRANT ALL PRIVILEGES ON . TO ‘root’@‘%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;
但是我感觉现在像上面这样配置数据库不安全,下面我重新配置一下mysql密码和用户
- docker链接本地的数据库主机用host.docker.internal
- 用docker下载的mysql则用数据库ip进行连接
docker inspect <mysql-container-name> | grep IPAddress
nginx反代
我遇到2个问题,
- 如果只再location直接添加
proxy_pass http://宿主机ip:8080;
会导致我的网站重定向次数过多,直接无法正常显示,才知道
启动端口不是80,需要添加配置:
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
为什么呢?
原因:nginx中proxy_set_header Host h o s t 的作用及 host的作用及host的作用及proxy_host,h o s t 与 host与host与http_host的区别
- 如果点击网页上的某个按钮或标签,又会跳转到带有其他端口的地方,这会导致用户访问可以绕过WAF通过端口访问原站
我的解决暂时如下:不知道还会不会有绕过方法
vim /etc/nginx/sites-available/default
vim /etc/nginx/nginx.conf
wordpress网站后台这里设置不带端口
最后就可以再服务器的安全策略组关闭一些不能开放的端口了,比如8080,81,防止绕过
mysql设置数据库新密码
MySQL数据库修改用户登录密码的三种方式
mysql修改远程登录密码
但是mysql 8.x 版本修改密码,只能使用命令:alter user ‘root’@‘localhost’ identified by ‘123456’;
小结
我的mysql映射目录
/data/mysql:/var/lib/mysql
我的wordpress映射目录
/data/www:/var/www/html
以后记得备份这两个目录哟
未完待续…还没添加ssl证书
docker -wordpress镜像的SSL证书配置
WordPress网站发送邮件(配置SMTP)
成果展示
尝试sql注入:
成功被WAF拦截页面