docker 安装 wordpress,通过nginx反向代理,绑定域名,配置https

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 怎么样配置https呢?以下回答解决你的疑问。

一. 下载镜像


默认下载最新版本,如果想指定对应版本,可以用冒号后加版本,像这样mysql:5.7

docker pull mysql:5.7
docker pull wordpress
docker pull nginx


二. 启动container实例


已经下载好了image,接下来启动container,需要分别启动mysql,wordpress,nginx。


1. 启动mysql


因为wordpress是需要安装数据库的,这里安装mysql并且启动:

docker container run -d \
--name wordpressdb \
-p 3306:3306 \
--env MYSQL_ROOT_PASSWORD=123456 \
--env MYSQL_DATABASE=wordpress \
mysql:5.7


各个参数含义:


-d: 指定容器以守护进程方式在后台运行;


--name: 指定容器名称,此处我指定的是wordpressdb;


-env 环境参数,MYSQL_ROOT_PASSWORD设置root用户的密码


-p: 指定主机与容器内部的端口号映射关系,


[宿主机端口号]:[容器内部端口],此处我使用了主机3306端口,映射容器3306端口;

mysql:5.7 是nginx的镜像IMAGE ID前4位


这些参数中涉及了一些名词,如果看不懂,建议去看看docker的基本概念。简单来说就是,docker技术通过image这种模板,生成contaienr实例,下次还可以再生成一个contaienr实例,image像是一个模板,可以多次使用。contaienr实例可以看作小型的虚拟机,多个虚拟机在局域网里面,需要将端口映射到宿主机上面,我们都知道直接访问局域网的内网ip是不能访问的,通过宿主机的公网ip:映射的端口即可访问了。


2. 启动wordpress


docker安装wordpress,相比docker安装mysql,这里相比多了两个参数,后面会解释。如果安装成功,通过docker ps可以看到wordpress的进程,浏览器输入ip:8080,应该是可以在网页安装wordpress了。

docker run -d \
--name wordpress \
--link wordpressdb:mysql \
--volume "$PWD/wordpress":/var/www/html \
-p 8080:80 \
wordpress

--link:关联mysql容器,如果是使用非docker安装的mysql,比如自己手动安装的mysql,可以通过参数--env指定数据库连接:

-e WORDPRESS_DB_HOST=192.168.80.129:3306 \
-e WORDPRESS_DB_USESR=root \
-e WORDPRESS_DB_PASSWORD=123456


--volume:将容器的/var/www/html映射到当前目录下,这样直接操作当前目录,即可操作容器目录,否则还得进去容器操作,我们都知道容器是一个阉割版的小型虚拟机,像vim这种常用命令默认是没有的;


注意:wordpress容器默认开的是80端口,这里将容器的80端口映射到宿主机的8080端口,为什么不也映射到80端口呢,因为后面要安装nginx,nginx一般要监听80端口,云服务商一般配置域名:ikeguang.com绑定云主机的80端口,所以最后nginx只能由nginx占用宿主机的80端口,避免不必要的麻烦。


3. 启动nginx


如果上面wordpress安装好了,网站可以通过ip地址正常访问,发布文章了,可以考虑绑定域名了,加个nginx进行反向代理。


1). 配置http访问:


nginx配置


http访问的时候,默认一个server监听80端口即可;如果配置https,需要加个server,监听443端口,这里先把http访问配置好再说,贴出了我的配置:

include /etc/nginx/conf.d/*.conf;
server{
   listen 80;
   server_name ikeguang.com www.ikeguang.com;
   location / {
      proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主机ip:8080;
   }
}


这里http://宿主机ip:8080,因为前面我们的wordpress映射宿主机的端口是8080,这里nginx代理宿主机8080端口,也就是说你访问80端口(nginx),相当于代理访问了8080端口(wordpress),并且云服务商配置的域名也是绑定80端口,这样访问域名,就访问了8080端口的wordpress了,就能访问网站了。


说明:因我wordpress启动端口不是80,需要添加配置:

proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;


启动nginx容器


既然nginx.conf配置好了,接下来启动nginx容器:

docker run -d -p 80:80 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx


这里需要注意:


  • 这里将容器的目录/etc/nginx映射,需要先通过docker cp命令复制一份完整nginx的目录到宿主机,然后修改文件,再执行上面docker run命令。文件夹映射的时候,文件夹里面的所有文件应该是一样的,文件内容可以不一样。

经过上面的配置,应该是可以通过浏览器输入域名:ikeguang.com访问网站了。


2). 配置https访问:


经过前面的配置,通过域名应该可以访问网站了,接下来配置https:


nginx.conf配置:

include /etc/nginx/conf.d/*.conf;
server {
    #监听443端口
    listen 443 ssl;
    #对应的域名
    server_name ikeguang.com www.ikeguang.com;
    ssl_certificate ssl/1_ikeguang.com_bundle.crt;
    ssl_certificate_key ssl/2_ikeguang.com.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_prefer_server_ciphers on;
    location / {
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主机ip:8080;
   }
}
server{
   listen 80;
   server_name ikeguang.com www.ikeguang.com;
   #把http的域名请求转成https
   rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
   location / {
      proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_pass http://宿主机ip:8080;
   }
}


把前面启动http的nginx容器删除,配置好ssl证书,再次启动,需要启动80端口和443端口。

docker run -d -p 80:80 -p 443:443 --name nginx -v /usr/share/nginx/html:/usr/share/nginx/html -v /etc/nginx:/etc/nginx -v /var/log/nginx:/var/log/nginx nginx


  • -p 443:443,如果配置ssl,才需要这个参数,开始去掉,这里先把域名绑定成功,http可以访问了,再进行第二步配置https访问,ssl证书可以在云服务商那里申请免费的,然后按照帮助文档安装即可,没啥坑。
目录
相关文章
|
8月前
|
安全 网络协议 网络安全
只有IP地址没有域名,如何实现HTTPS访问?
在仅有IP地址而无域名的情况下,实现HTTPS访问并非不可能。主要挑战包括证书颁发机构(CA)对IP地址的支持有限及浏览器兼容性问题。解决方案有:1) 搭建私有CA为内部IP地址颁发证书;2) 使用支持IP地址的公共CA服务。选择合适的方案需根据需求权衡。具体步骤包括选择证书类型、生成CSR文件、提交并完成验证、安装SSL证书和配置强制HTTPS访问。确保IP地址稳定,并定期维护安全性。 **申请优惠**:访问JoySSL官网并填写注册码“230907”可优惠申请IP地址证书。
1233 5
|
10月前
|
域名解析 安全 数据建模
没有域名只有IP地址怎么申请https证书?
IP 地址 SSL 证书是一种特殊的 SSL/TLS 证书,允许直接为 IP 地址配置 HTTPS 加密,适用于内部服务、私有网络和无域名的设备管理。与基于域名的证书不同,申请过程较为复杂,需选择支持 IP 的证书颁发机构(CA),并完成额外的身份验证步骤。浏览器对 IP 地址的支持有限,可能会显示警告。通过正确配置服务器(如 Nginx 或 Apache),可以确保通信安全。
1169 12
|
11月前
|
网络协议 应用服务中间件 网络安全
免费泛域名https证书教程—无限免费续签
随着互联网安全意识提升,越来越多网站采用HTTPS协议。本文介绍如何通过JoySSL轻松获取并实现免费泛域名SSL证书的无限续签。JoySSL提供永久免费通配符SSL证书,支持无限制域名申请及自动续签,全中文界面适合国内用户。教程涵盖注册账号、选择证书类型、验证域名所有权、下载与安装证书以及设置自动续签等步骤,帮助网站简化SSL证书管理流程,确保长期安全性。
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
151 4
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
247 3
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
Linux Docker Windows
docker中使用绑定挂载(Bind mounts)
【10月更文挑战第9天】
866 1
|
安全 应用服务中间件 Shell
nginx配置https的ssl证书和域名
nginx配置https的ssl证书和域名
将http和https的非www顶级域名301重定向至www
将http和https的非www顶级域名301重定向至www
222 0

热门文章

最新文章