wordpress - 无法通过 HTTPS 访问 WordPress docker 容器的静态文件

标签 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 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="3a5b5e5753547a5f425b574a565f14595557" rel="noreferrer noopener nofollow">[email protected]</a>
    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

如何解决这个问题?

最佳答案

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

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

关于wordpress - 无法通过 HTTPS 访问 WordPress docker 容器的静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56671455/

相关文章:

css - 为输入字段的文本添加边框

php - mySQL 查询在 WordPress 网站上执行两次

php - WooCommerce 如何检查产品是否有货

apache - 如何在集群中配置两台 jack 兔服务器?

java - FTPSClientretrievefile() 挂起

java - 创建项目时发生错误 - Eclipse

php - zend 站点也需要别名

amazon-web-services - AWS Fargate 网络 - 端口 80 : Connection refused

docker - 从 docker 容器访问 windows 机器的文件

amazon-web-services - AWS Blue/Green ECS部署中的Codebuild在执行命令时返回错误:docker build -t:latest