Docker部署WordPress+Nginx开启HTTPS

本文使用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

配置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/`

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

### 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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容