Apache 反向代理背后的 WordPress 站点不断重定向到本地主机

时间:2021-01-09 08:39:04

标签: wordpress docker docker-compose podman podman-compose

我正在尝试使用 podman-compose(工作方式类似于 docker-compose)在生产服务器上部署一个容器化的 Wordpress。 Web 服务在主机上的端口 8080 上公开。然后,我利用 Apache 的 ProxyPass 指令创建一个反向代理并将请求发送到 localhost:8080,其中提供 WordPress,从而使 WordPress 在 http://example.com 上可用。
我成功地将数据库和 wordpress 卷迁移到服务器。我遇到的第一个问题是 WordPress 在 wpoptions 中将 localhost 存储为 siteurlhome,因此它无法在生产服务器上运行。将这些值更改为 example.com(我的域)后,它会一直重定向到 localhost。疯狂的! 这是我的 docker-compose.yaml:

version: "3.8"
services: 
  web:
    image: wordpress
    restart: always
    volumes:
      - wordpress:/var/www/html
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_NAME: db
      WORDPRESS_DB_PASSWORD: mypass
      WORDPRESS_DEBUG: 0
    depends_on:
      - db
    networks:
      - wpnet
  db:
    image: mariadb:10.5
    restart: always
    ports:
      - 6603:3306

    volumes:
      - wpdbvol:/var/lib/mysql

    environment:
      MYSQL_DATABASE: db
      MYSQL_USER: user
      MYSQL_PASSWORD: mypass
      MYSQL_ROOT_PASSWORD: mypass
    networks:
      - wpnet
volumes:
  wordpress: {}
  wpdbvol: {}

networks:
  wpnet: {}

这是我的反向代理配置:

<VirtualHost *:80>

ServerName example.com
ServerAlias www.example.com

ProxyPass "/"  "https://localhost:8080"

#Allows modification of Location: headers from backend server to point to the reverse proxy
ProxyPassReverse "/"  "http://localhost:8080"
</VirtualHost>

2 个答案:

答案 0 :(得分:1)

这是一个远景,很可能不会奏效。

也许可以尝试在 compose yml https://example.com environment 设置中将 WORDPRESS_CONFIG_EXTRA 定义为您的主页网址。

services: 
  web:
    image: wordpress
    restart: always
    volumes:
      - wordpress:/var/www/html
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_NAME: db
      WORDPRESS_DB_PASSWORD: mypass
      WORDPRESS_DEBUG: 0
      WORDPRESS_CONFIG_EXTRA: |
        
        /** define our home url */
        define('WP_HOME', 'https://example.com');
        define('WP_SITEURL', 'https://example.com');

    depends_on:
      - db
    networks:
      - wpnet

可能强制安装 wordpress 到它的目的地并阻止它重定向回 localhost




此外,当我在让 ngrok tunnelling 访问我的本地 wordpress 环境时遇到问题时,我不得不安装 Relative URL wordpress 插件让我的隧道正常工作。

不确定这是否与您的问题相关,但可能值得安装 Relative URL 插件并在尝试上述 WORDPRESS_CONFIG_EXTRA 想法之前查看这是否解决了您的 localhost 重定向问题。

该插件已 2 年未更新,但仍可与 ngrok 一起正常工作。插件实际上是 20 行 php,我想可以将它们放入您的函数中。

Ngrok 允许我通过像 http://example.ngrok.io/ 这样的 https 协议 url 访问我的本地 docker compose wordpress 环境,这对我处理本地 webhook 响应回调(我与 Stripe 一起使用)很方便。< /p>

答案 1 :(得分:1)

对于在 ssl 上运行 WP 遇到此问题的每个人:

如果你有 Nginx 作为 Apache 的代理,HTTPS 全局必须在 PHP 中显式设置(最好在 wp-config.php 中)和 $_SERVER['HTTPS'] = 'On';,否则 WP 将继续重定向,因为Nginx 在 ssl 上运行,但 Apache 不是,WP 只能看到 Apache 环境。