Nginx反向代理背后的Wordpress Docker

时间:2019-04-10 08:22:43

标签: wordpress docker nginx proxy reverse

多年来,我一直使用此页面及其线程来解决问题,但我必须提出一个问题。

我试图在我的Vserver机器上安装WordPress Docker。它很有效,但只有HTTP。 要安装Wordpress Docker,我必须使用以下Link中的教程。

此外,我总是在--restart命令中添加docker 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插件,但都无法正常工作。

我希望这是一个小毛病,您可以轻松地帮助我。

1 个答案:

答案 0 :(得分:0)

首先在Ubuntu上安装Docker

要么与诸如Bluemix的Docker提供程序一起使用,要么从softlayer或任何其他提供程序获得虚拟机。就我而言,我选择了一个虚拟服务器,因此必须在Ubuntu LTS上安装docker。这真的很容易。基本上,您将一个新的存储库条目添加到apt源中,并安装最新的稳定docker软件包。 get.docker.com上也提供了一个脚本,但是我不愿意通过具有root用户访问权限的网络直接执行shell脚本。但这取决于你。

wget -qO- https://get.docker.com/ | sh

与Mac上的docker安装相比,Linux上的Docker不包含docker-compose。安装docker compose很简单。可以从github上下载docker compose脚本: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"

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

此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;
    }
}

第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

参数“ -d”在后台(守护程序)开始设置。对于第一次运行,我建议不带“ -d”参数使用它来查看所有调试消息。