Nginx 反向代理背后的 Wordpress Docker

Jan*_*ndt 3 wordpress proxy reverse nginx docker

我使用这个页面和他们的线程来解决问题多年,但我知道我必须提出一个问题。

我尝试在我的 Vserver 机器上安装 WordPress Docker。它非常有效,但唯一的 HTTP。要安装 Wordpress Docker,我必须使用以下链接中的教程。

此外,我添加了--restartalways atdocker run -e ...命令。

然后我安装了 nginx 1.12.xxx 来拥有一个反向代理。但是 SSL 不起作用。之后,我尝试从 nginx 存储库安装更新的 1.15.xx 版本,但没有更好的结果。

我使用 Let's Encrypt 和 Certbot 安装了证书。

之后 WordPress 运行并且 wp-admin.php 可以访问。

但我没有让 SSL/HTTPS 工作。我已经尝试了很多代码,我工作场所的同事甚至找不到解决方案。

我希望你能得到一个:)

我尝试配置 wp-config.php 以使用类似"$_SERVER['HTTPS'] = 'on';"和其他命令启用 https ,但没有工作而破坏效果。

我也尝试启用"X-Forwared-Proto $scheme;""FastCGI"但效果不佳。我尝试了它们的许多变体。

我尝试了 Wordpress 的一些 SSL 插件,但没有一个正常工作。

我希望它是一个小错误,你可以轻松地帮助我。

小智 9

首先在 Ubuntu 上安装 Docker

要么选择像 Bluemix 这样的 docker 提供商,要么从 softlayer 或任何其他提供商那里获得虚拟机。就我而言,我选择了一个虚拟服务器,所以我必须在 Ubuntu LTS 上安装 docker。这真的很容易。基本上,您向 apt 源添加一个新的存储库条目并安装最新的稳定 docker 包。在 get.docker.com 上也有一个脚本可用,但我不喜欢直接从具有 root 访问权限的网络执行 shell 脚本。但这取决于你。

wget -qO- https://get.docker.com/ | sh
Run Code Online (Sandbox Code Playgroud)

与 mac 上的 docker 安装相比,linux 上的 Docker 不包含 docker-compose。安装 docker compose 很简单。docker compose 脚本可以从这里的 github 下载:https : //github.com/docker/compose/releases

Docker-compose

Docker-compose 负责处理包含多个 docker 容器的 docker 设置,包括网络和基本监控。以下脚本使用 nginx、mysql 和 wordpress 启动并构建所有 docker 容器。它还导出主机文件系统上的卷,以便在 docker 容器重建过程中轻松备份和持久化,并监控 docker 容器是否启动并运行。

version: '3'

services:
   db:
     image: mysql:latest
     volumes:
       - ./db:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: easytoguess
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: eveneasier

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     restart: always
     volumes:
       - ./wordpress:/var/www/html/wp-content
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: eveneasier
       WORDPRESS_DB_NAME: wordpress

   nginx:
     depends_on:
       - wordpress
     restart: always
     build:
       context: .
       dockerfile: Dockerfile-nginx
     ports:
       - "80:80"
Run Code Online (Sandbox Code Playgroud)

Mysql 是我们为数据库提供环境变量的第一个容器,如用户名、密码和数据库名称。第 7 行负责将数据库文件保存在 docker 容器之外,这样您就可以删除 docker 容器,启动一个新容器,并且仍然可以启动并运行相同的数据库。把它指向你想要的地方。在这种情况下,在同一目录下的“db”中。还要确保你想出了合适的密码。

第二个容器是 wordpress。此处与第 21 行的主机文件夹相同。此外,请确保您配置的用户、密码和数据库名称与 mysql 容器配置中的相同。

最后一个是 nginx 作为面向互联网的容器。您在此处公开端口 80。虽然您只是在其他两个中指定了一个容器,但在这个容器中,您配置了一个 Dockerfile 和一个构建上下文,以根据网络设置自定义 nginx。如果你只想托管静态文件,你可以通过卷挂载来添加它,但在我们的例子中,我们需要配置 nginx 本身,所以我们需要一个定制的 Dockerfile,如下所述。

用于 nginx 设置的 Dockerfile

FROM nginx:latest
COPY   default.conf /etc/nginx/conf.d/default.conf
VOLUME /var/log/nginx/log/
EXPOSE 80
Run Code Online (Sandbox Code Playgroud)

这个 dockerfile 继承了最新的 nginx 的所有内容,并将 default.conf 文件复制到其中。有关如何设置配置文件,请参阅下一章。

Nginx 配置文件

server {
    listen            80;
    listen       [::]:80;
    server_name  www.23-5.eu ansi.23-5.eu;
    access_log  /var/log/nginx/log/unsecure.access.log  main;
    location / {
        proxy_read_timeout    90;
        proxy_connect_timeout 90;
        proxy_redirect        off;
        proxy_pass http://wordpress;
        proxy_set_header      X-Real-IP $remote_addr;
        proxy_set_header      X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header      Host $host;
    }
}
Run Code Online (Sandbox Code Playgroud)

第 2 行和第 3 行配置了我们要侦听的端口。我们需要一个用于 ip4,一个用于 ip6。重要的是第 8 行到第 15 行中的代理配置。第 11 行将所有对“/”的调用(因此 URL 中没有路径)重定向到服务器 wordpress。当我们使用 docker-compose 时,docker 负责通过内部 DNS 服务器使地址可用。第 13-15 行重写了 http 标头,以便将所有内容映射到不同的 URL,否则我们最终会在 docker 中自动生成指向http://wordpress 的链接

启动系统

如果一切都配置好了,并且 docker-compose.yml、default.conf、Dockerfile-nginx 和文件夹 db 和 wordpress 都在同一个文件夹中,我们可以启动这个文件夹中的所有内容:

docker-compose up --build -d
Run Code Online (Sandbox Code Playgroud)

参数“-d”在后台启动设置(守护进程)。对于第一次运行,我建议在没有“-d”参数的情况下使用它来查看所有调试消息。

  • 我想信用应该转到 https://ansi.23-5.eu/2017/06/wordpress-docker-nginx/ 从复制这个答案的地方。 (4认同)