无法通过HTTPS访问WordPress Docker容器的静态文件

时间:2019-06-19 15:40:34

标签: wordpress apache docker ssl proxy

我正在尝试通过HTTPS创建WordPress容器,我在VPS上运行了Apache,并将其用作将请求路由到WordPress容器的代理。

我已经设法通过HTTPS访问容器以加载WordPress安装页面,但是CSS / JS文件却无法加载,因为它们是通过HTTP请求的,我不知道为什么重定向不适用于这些文件,我做了其他类似这样的网站。

Here is a print of the output

如果我访问“ http://example.com/wp-admin/css/install.min.css?ver=5.2.2”上的文件,则重定向为works fine(访问上述链接后,通过HTTPS打印CSS文件)

这是域上80到443的重定向。

<VirtualHost *:80>
    ServerName example.com
    ServerAdmin admin@example.com
    Redirect permanent / https://example.com/
</VirtualHost>

这是443上的代理:

<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerName example.com
        ProxyPreserveHost On

        ProxyPass / http://172.20.0.100/ 
        ProxyPassReverse / http://172.20.0.100/


        SSLEngine on

        SSLCertificateFile /fullchain.pem
        SSLCertificateKeyFile /privkey.pem
    </VirtualHost>
</IfModule>

WordPress容器仅在端口80上侦听

这是docker-compose文件:

version: '3'

services:
  wpdb:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
        MYSQL_ROOT_PASSWORD: pass
        MYSQL_DATABASE: wordpress
        MYSQL_USER: wordpres_admin
        MYSQL_PASSWORD: pass

  wordpress:
    depends_on:
     - wpdb
    image: wordpress:latest

    networks:
      default:
        ipv4_address: 172.20.0.100
    restart: always
    environment:
        WORDPRESS_DB_HOST: wpdb:3306
        WORDPRESS_DB_USER: wordpres_admin
        WORDPRESS_DB_PASSWORD: pass
volumes:
    db_data: {}

networks:
 default:
   external:
     name: router_default

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,看起来WP已经配置为可通过SSL代理使用,并且无需更改WP容器或WP设置中的任何内容,所需要做的就是重写的标头的请求:

RequestHeader set X-Forwarded-Proto "https"

更新后的代理配置如下:

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerName example.com

    <IfModule headers_module>
        RequestHeader set X-Forwarded-Proto "https"
    </IfModule>

    ProxyPreserveHost On

    ProxyPass / http://172.20.0.100/ 
    ProxyPassReverse / http://172.20.0.100/


    SSLEngine on

    SSLCertificateFile /fullchain.pem
    SSLCertificateKeyFile /privkey.pem
</VirtualHost>

有关更多信息:https://wordpress.org/support/article/administration-over-ssl/#using-a-reverse-proxyhttps://webmasters.stackexchange.com/questions/97005/setting-x-forwarded-proto-under-apache-2-4