Docker部署WordPress+Nginx开启HTTPS

内容分享2小时前发布 Tvioyu_
0 0 0

本文使用docker-compose运行wordpress,使用已有的mysql数据库,外部的nginx开启https反向代理到wordpress。如果你的域名还没有备案请先去备案。

 编写启动文件

编写docker-compose.yml,然后执行 docker-compose  up -d 启动容器

由于我还又nextcloud云盘,因此已经有myqsl数据库了,可以直接连,172.18.0.1:3306是我自己的mysql地址

“`

version: “3”

services:

  wordpress:

    image: wordpress:latest

    ports:

      – “8000:80”

    restart: always

    volumes:

      – ./wordpress:/var/www/html

    environment:

      – WORDPRESS_DB_HOST=172.18.0.1:3306

      – WORDPRESS_DB_USER=wordpress

      – WORDPRESS_DB_PASSWORD=wordpress

“`

如果你之前没有现成的mysql数据库,可以按照官网的教程编写配置文件

“`

version: 3.1

services:

  wordpress:

    image: wordpress

    restart: always

    ports:

      – 8080:80

    environment:

      WORDPRESS_DB_HOST: db

      WORDPRESS_DB_USER: wordpress

      WORDPRESS_DB_PASSWORD: wordpress

      WORDPRESS_DB_NAME: wordpress

    volumes:

      – ./wordpress:/var/www/html

  db:

    image: mysql:5.7

    restart: always

    environment:

      MYSQL_DATABASE: wordpress

      MYSQL_USER: wordpress

      MYSQL_PASSWORD: wordpress

      MYSQL_RANDOM_ROOT_PASSWORD: 1

    volumes:

      – /opt/mysql:/var/lib/mysql

“`

这里需要去wordpress后台配置地址,修改为我们最后带域名的地址。

访问 ip:8077/admin

Docker部署WordPress+Nginx开启HTTPS

配置Nginx

这里使用nginx开启https并反向代理到worpress,如果没有安装nginx,请先安装nginx。HTTPS证书可以去阿里云申请免费的SSL证书,这里的坑比较多,请注意仔细看配置文件。

我们的案例域名是limvs.cn,无论是否带www,都会转发到内网的服务上。

由于我的nginx的配置文件最后下面这句

“`

include /etc/nginx/conf.d/*.conf;

“`

因此,我在conf.d文件夹下新建一个wordpress的配置文件

vi /etc/nginx/conf.d/wordpress_ng_443.conf

“`

server {

      listen  80;

      server_name    limvs.cn;

      rewrite ^(.*) https://$host$1 permanent;

}

server {

        listen  80;

        server_name  www.limvs.cn;

        rewrite ^(.*) https://$host$1 permanent;

}

server {

        listen      443 ssl http2  ;

        server_name  www.limvs.cn;

        ssl_certificate certs/www.limvs.cn.pem;

        ssl_certificate_key certs/www.limvs.cn.key;

        ssl_session_cache shared:SSL:1m;

        ssl_session_timeout  10m;

        ssl_prefer_server_ciphers on;

        location / {

          proxy_pass  http://**dockeip**:8077;

          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;

          proxy_set_header  X-Forwarded-Proto https;

          proxy_set_header  Upgrade $http_upgrade;

          proxy_set_header  Connection “upgrade”;

          proxy_read_timeout 86400;

        }

    }

server {

        listen      443 ssl http2 ;

        server_name  limvs.cn;

        ssl_certificate certs/limvs.cn.pem;

        ssl_certificate_key certs/limvs.cn.key;

        ssl_session_cache shared:SSL:1m;

        ssl_session_timeout  10m;

        ssl_prefer_server_ciphers on;

        location / {

          proxy_pass  http://**dockeip**:8077;

          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;

          proxy_set_header  X-Forwarded-Proto https;

          proxy_set_header  Upgrade $http_upgrade;

          proxy_set_header  Connection “upgrade”;

          proxy_read_timeout 86400;

        }

}

“`

修改wordpress配置文件

如果直接代理过去,会有许多问题,列如循环重定向转发,js、css等资源走的是http请求,地址重定向为localhost,是踩了许多坑才配置好。

修改在/wordpress文件夹下的 wp-config.php,这个是docker容器挂载的卷,增加如下内容

新增的域名就是你接下来访问的主页域名,我的是www.limvs.cn

vi wp-config.php

“`

define( FORCE_SSL_ADMIN , true);

if (strpos($_SERVER[ HTTP_X_FORWARDED_PROTO ], https ) !== false){

    $_SERVER[ HTTPS ] = on ;

    $_SERVER[ SERVER_PORT ] = 443;

}

if (isset($_SERVER[ HTTP_X_FORWARDED_HOST ])) {

    $_SERVER[ HTTP_HOST ] = $_SERVER[ HTTP_X_FORWARDED_HOST ];

}

define( WP_HOME , https://www.limvs.cn/ );

define( WP_SITEURL , https://www.limvs.cn/ );

“`

以上配置后如果仍无法访问,就需要检查数据库数据是否正确

登录mysql,找到wordpress数据库

找到wp-options表,将option_name的site_url,和home,的值都修改成`https://www.limvs.cn/`

Docker部署WordPress+Nginx开启HTTPS

设置后重启容器,应该可以解决问题

### FTP账户信息问题

在服务器安装wordpress 后,

在后台自动升级时,或者更新、删除主题或者插件的时候,如果提示需要输入FTP账户信息,不过即使我们正确输入了FTP用户名和密码也无法完成升级,这个是服务器端的权限设置问题,不是用户的问题。

可以在wordpress安装路径下的配置文件wp-config.php的最后加入下面代码:

“`

  define(“FS_METHOD”, “direct”);

  define(“FS_CHMOD_DIR”, 0777);

  define(“FS_CHMOD_FILE”, 0777);

“`

问题就得到了解决。

上述代码实际上是为WordPress更新或下载插件时,提供了权限。

### 上传文件问题

无法将上传的文件移动至wp-content/uploads/

如果遇到以上问题,我们可以尝试以下解决方法:

找到 wp-config.php 配置文件;

找到 require_once(ABSPATH .’wp-settings.php’);

也可能是

/** Sets up WordPress vars and included files. */

require_once ABSPATH . wp-settings.php ;

在搜索的代码上方,添加以下语句:

“`

define(‘CONCATENATE_SCRIPTS’, false );

“`

参考文档

https://jingyan.baidu.com/article/495ba841e3f93938b30ede0a.html

###  wp-config.php文件配置

根据上面的说明,到最后我的wp-config.php文件最后内容如下

“`

—–以上省略默认内容———

/** Sets up WordPress vars and included files. */

define(‘CONCATENATE_SCRIPTS’, false );

require_once ABSPATH . wp-settings.php ;

define( FORCE_SSL_ADMIN , true);

if (strpos($_SERVER[ HTTP_X_FORWARDED_PROTO ], https ) !== false){

    $_SERVER[ HTTPS ] = on ;

    $_SERVER[ SERVER_PORT ] = 443;

}

if (isset($_SERVER[ HTTP_X_FORWARDED_HOST ])) {

    $_SERVER[ HTTP_HOST ] = $_SERVER[ HTTP_X_FORWARDED_HOST ];

}

define( WP_HOME , https://www.limvs.cn/ );

define( WP_SITEURL , https://www.limvs.cn );

define(“FS_METHOD”, “direct”);

define(“FS_CHMOD_DIR”, 0777);

define(“FS_CHMOD_FILE”, 0777);

“`

参考文档

https://www.jianshu.com/p/fc5b6bd297b8?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin

http://www.mustenaka.cn/index.php/2020/04/06/stovewordpressneedauthorityin/

https://jingyan.baidu.com/article/495ba841e3f93938b30ede0a.html

© 版权声明

相关文章

暂无评论

none
暂无评论...