问题描述
正在尝试使用Docker、Nginx反向代理和Let’s Encrypt来设置多个WordPress站点的生产环境。他使用了jwilder/docker-gen、jwilder/nginx-proxy和jrcs/letsencrypt-nginx-proxy-companion镜像创建了3个代理组的容器。此外,他还有单独的mysql和WordPress容器。一切都正常运行,网站也能正常加载。然而,在WordPress中,他遇到了以下Site Health错误:
The REST API request failed due to an error. Error: cURL error 28:Connection timed out after 10000 milliseconds (http_request_failed)
The loopback request to your site failed, this means features relying on them are not currently working as expected. Error: cURL error 28:Connection timed out after 10001 milliseconds (http_request_failed)
Background updates ensure that WordPress can auto-update if a security update is released for the version you are currently using.
Warning Could not confirm that the wp_version_check() filter is available
他已经确认在WordPress容器内cURL正常工作,并且所有容器都在同一个Docker网络中。他尝试禁用WordPress中的所有插件并使用默认主题(twentytwenty),但问题仍然存在。他可以更新插件和主题。他还在WP容器中更新了php设置,将max_execution_time设置为600,memory_limit设置为1024M。同样的网站在LAMP堆栈上运行时,所有Site Health测试都通过。他认为这一定与Nginx有关,但无法找出问题所在。他非常感谢任何帮助。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
根据用户的描述,问题可能是由于WordPress站点URL的设置不正确导致的。为了解决这个问题,我们可以在WordPress容器的配置中使用extra_hosts
指令,将Nginx容器的IP指向WordPress站点的URL。
以下是解决方案的步骤:
1. 打开WordPress容器的docker-compose配置文件。
2. 在wp
服务的配置中,找到extra_hosts
指令。
3. 将Nginx容器的IP和WordPress站点的URL添加到extra_hosts
指令中。
下面是一个示例的docker-compose配置文件片段:
services:
wp:
# 其他配置
extra_hosts:
- "www.my-domain-name.com:192.168.80.2"
在上面的示例中,我们将Nginx容器的IP(192.168.80.2)和WordPress站点的URL(www.my-domain-name.com)添加到了extra_hosts
指令中。这将确保WordPress能够正确访问Nginx容器。
请注意,根据用户的描述,WordPress站点URL包含了www。因此,在extra_hosts
指令中,我们需要包含完整的URL。
方案2
如果方案1无法解决问题,你可以尝试检查Nginx配置文件和WordPress配置文件是否正确。确保Nginx容器和WordPress容器之间的网络连接正常,并且端口映射正确设置。另外,你还可以尝试使用其他的WordPress和Nginx镜像来重新构建容器。
请注意,这些操作可能需要一些技术知识,并且可能会导致一些服务中断。在进行任何更改之前,请确保备份所有相关数据和配置文件。
总结
在使用Docker和Nginx时,如果遇到WordPress Site Health错误,可能是由于WordPress站点URL设置不正确导致的。通过在WordPress容器的配置中使用extra_hosts
指令,将Nginx容器的IP指向WordPress站点的URL,可以解决这个问题。如果问题仍然存在,可以尝试检查Nginx和WordPress的配置文件,并确保网络连接和端口映射正确设置。