502错误与WordPress:使用jwilder/nginx的代理
TL FPM; DR 为什么这wordpress:latest Dockerfile是确定与nginx-proxy但这个不是wordpress:fpm Dockerfile?我怎么可以使用
wordpress:fpm
图像与nginx-proxy
502错误与WordPress:使用jwilder/nginx的代理
嗨,
我成功地使用nginx的代理一些WordPress的容器。例如,这docker-compose.yml
完美的作品:
db:
image: mariadb
environment:
- MYSQL_ROOT_PASSWORD=password
volumes:
- /home/stack/my_domain/bdd:/var/lib/mysql
wordpress:
image: wordpress
links:
- db:mysql
environment:
- VIRTUAL_HOST=my_domain.fr,www.my_domain.fr
- LETSENCRYPT_HOST=www.my_domain.fr
- [email protected]_domain.fr
env_file:
- ./env
volumes:
- /home/stack/my_domain/wordpress:/var/www/html
,但如果我使用wordpress:fpm
图像(而不是一个Apache基于图像的)我有502错误网关的错误,并在日志中这样的信息:
的nginx .1 | 2017/08/14 21:29:51 [错误] 347#347:* 2447连接()失败(111:连接被拒绝),当连接到上游时,客户端:86.222.20.31,服务器:www.my_domain.fr,请求: “GET /接触/ HTTP/2.0”,上游: “http://172.17.0.14:80/contact/”,主机: “www.my_domain.fr”,引荐: “https://www.my_domain.fr/”
和此消息:
根@ 9408854fae4b :/etc/nginx/conf.d# nginx -s reload 2017/08/14 21:37:35 [emerg] 671#671:在/etc/nginx/conf.d/中的“upstream”指令中参数的数目无效default.conf:53 nginx:[emerg]在“upstream”指令中参数的数目无效/etc/nginx/conf.d/default.conf:53
在管线53的default.conf包含
upstream mydomain.fr {
## Can be connect with "bridge" network
# my_domain_wordpress_1
server 172.17.0.14:9000;
}
其他域具有服务器172.17.0.xx:80;
所以在添加port:80
和/或expose:80
docker-compose.yml文件。我设法获得
upstream mydomain.fr {
## Can be connect with "bridge" network
# my_domain_wordpress_1
server 172.17.0.14:80;
}
但具有相同的502错误。
任何想法为什么?
Regards
原因是这两个图片的工作方式不同。
wordpress:latest
在端口80上使用apache,并执行正确的PHP脚本来响应请求。它处理HTTP协议。
在另一方面wordpress:fpm
使用PHP-FPM,这是一个快速的CGI服务器,它不希望只是proxy_pass
但其他nginx的参数,如该容器与推出低于
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass http://fpm:9000;
fastcgi_index index.php;
include /etc/nginx/fastcgi_params;
}
nginx-proxy
图像只是检查VIRTUAL_HOST
环境变量,检查其暴露的端口,然后创建一个代理通行证模板。你需要的是一个不同的模板。这可以使用每个主机配置完成。
每VIRTUAL_HOST
要在每VIRTUAL_HOST基础上添加设置,下/etc/nginx/vhost.d添加您的配置文件。与代理范围内的情况不同,它允许多个配置文件的任何名称以.conf结尾,per-VIRTUAL_HOST文件必须恰好在VIRTUAL_HOST之后命名。
为了允许在添加和删除后端时动态配置虚拟主机,最有意义的是将外部目录挂载为/etc/nginx/vhost.d,而不是使用派生映像或挂载单个配置文件。
例如,如果有一个名为app.example.com一个虚拟主机,你可以为主机提供一个自定义的配置如下:
$泊坞窗-p 80:80 -p 443运行-d: 443 -v /path/to/vhost.d:/etc/nginx/vhost.d:ro -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy $ {echo 'server_tokens off';'; echo'client_max_body_size 100m;'; }> /path/to/vhost.d/app.example.com
按照以下网址了解更多详情
感谢您的评论。我会试试这个! –
似乎接近:https://github.com/jwilder/docker-gen/issues/196 –