我正在尝试使用Docker、Nginx反向代理为多个WordPress站点设置一个生产环境,让我们来加密。
我使用jwilder/docker-gen、jwilder/nginx-代理和jrcs/letsencrypt代理伴生映像为代理组提供了3个容器。
我还为mysql和WordPress提供了单独的容器。
一切正常运行,网站加载。但是,我在WordPress中得到了以下站点健康错误:
REST请求由于错误而失败。错误: cURL错误28: 10000毫秒(http_request_failed)后连接超时--对站点的回送请求失败,这意味着依赖它们的特性目前无法正常工作。错误: cURL错误28:在10001毫秒(http_request_failed)后台更新后连接超时,确保WordPress可以自动更新,如果您正在使用的版本发布了安全更新。警告无法确认wp_version_check()筛选器是否可用
我已经确认cURL在WordPress容器内工作,并且所有容器都在同一个码头网络上。
我尝试过禁用WordPress中的所有插件,并使用默认主题(二十个)。
我能够更新插件和主题。
我已经更新了WP容器中的php设置,以便max_execution_time = 600和memory_limit = 1024M。
这个站点运行在一个灯堆栈上,并且所有的站点健康测试都通过了。
我还会提到,在码头集装箱中运行时,该站点的响应速度似乎也较慢。
我认为这肯定与Nginx有关,但我想不出它会是什么。任何帮助都将不胜感激。
包括我的对接组合配置。
对于Nginx:
services:
nginx:
image: jwilder/nginx-proxy
container_name: nginx
restart: always
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: 'true'
ports:
- 80:80
- 443:443
# environment:
# - VIRTUAL_PROTO=https
# - VIRTUAL_PORT=443
volumes:
- /srv/nginx/data/conf.d:/etc/nginx/conf.d
- /srv/nginx/data/vhost.d:/etc/nginx/vhost.d
- /srv/nginx/data/html:/usr/share/nginx/html
- /srv/nginx/data/certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- proxy
dockergen:
image: jwilder/docker-gen
container_name: dockergen
command: -notify-sighup nginx -watch /etc/docker-gen/templates/nginx.tmpl /etc/nginx/conf.d/default.conf
volumes:
- /srv/nginx/data/conf.d:/etc/nginx/conf.d
- /srv/nginx/data/vhost.d:/etc/nginx/vhost.d
- /srv/nginx/data/html:/usr/share/nginx/html
- /srv/nginx/data/certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./nginx.tmpl:/etc/docker-gen/templates/nginx.tmpl:ro
networks:
- proxy
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: letsencrypt
depends_on:
- nginx
- dockergen
environment:
NGINX_PROXY_CONTAINER: nginx
NGINX_DOCKER_GEN_CONTAINER: dockergen
volumes:
- /srv/nginx/data/conf.d:/etc/nginx/conf.d
- /srv/nginx/data/vhost.d:/etc/nginx/vhost.d
- /srv/nginx/data/html:/usr/share/nginx/html
- /srv/nginx/data/certs:/etc/nginx/certs:rw
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- proxy
networks:
proxy:
driver: bridge关于工作方案:
services:
db:
container_name: $DB_CONTAINER
image: mysql:5.7
restart: always
volumes:
- ./db_data:/var/lib/mysql
environment:
#MYSQL_RANDOM_ROOT_PASSWORD: 1
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MYSQL_DATABASE: $DB_NAME
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
wp:
container_name: $WP_CONTAINER
image: wordpress:latest
depends_on:
- db
expose:
- 80
restart: always
extra_hosts:
- "my-domain-name.ca:192.168.80.2"
volumes:
#- ./wp-config.php:/var/www/html/wp-config.php:rw
- ./wp-content:/var/www/html/wp-content:rw
- ./config/php-config.ini:/usr/local/etc/php/conf.d/php-config.ini
environment:
WORDPRESS_DB_HOST: $DB_CONTAINER
WORDPRESS_DB_NAME: $DB_NAME
WORDPRESS_DB_USER: $DB_USER
WORDPRESS_DB_PASSWORD: $DB_PASSWORD
WORDPRESS_TABLE_PREFIX: $WP_TABLE_PREFIX
VIRTUAL_HOST: $VIRTUAL_HOST
VIRTUAL_PORT: $VIRTUAL_PORT
LETSENCRYPT_HOST: $LETSENCRYPT_HOST
LETSENCRYPT_EMAIL: $LETSENCRYPT_EMAIL
WORDPRESS_CONFIG_EXTRA: |
define('ALTERNATE_WP_CRON', true);
define('FORCE_SSL_ADMIN', true);
networks:
default:
external:
name: nginx_proxy发布于 2020-12-10 20:49:39
这太简单了,自从我搞清楚出了什么问题后,我就一直在自责。
在WP堆栈坞文件中,这一行是正确的,但遗漏了'www‘。
extra_hosts:
- "www.my-domain-name.com:192.168.80.2"在我的WordPress设置中,网站网址包括www。因此,我将域名指向Nginx容器的IP是正确的,但不包括WP中指定的完整URL是造成问题的原因。
对于在使用Docker时遇到WP站点健康问题的任何人,Nginx的解决方案是在wordpress容器设置中使用"extra_hosts“指令,并将Nginx容器的IP指向WordPress站点URL。
https://devops.stackexchange.com/questions/12957
复制相似问题