使用jwilder / nginx-proxy的fpm错误:

TL; DR为什么这个WordPress的:最新的Dockerfile是可以与Nginx 的代理,但这一个不是WordPress的:FMP的Dockerfile ? 我怎样才能使用nginx-proxy wordpress:fpm图像

嗨,

我成功地用一些wordpress容器来使用nginx-proxy。 例如这个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 - LETSENCRYPT_EMAIL=contact@my_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 [error] 347#347:* 2447 connect()失败(111:Connection refused),连接上游时,客户端:86.222.20.31,服务器:www.my_domain.fr,请求: “GET / contact / HTTP / 2.0”,上行:“ http://172.17.0.14:80/contact/ ”,主机:“www.my_domain.fr”,referrer:“ https://www.my_domain.fr/ “

和这个消息:

root @ 9408854fae4b:/etc/nginx/conf.d# nginx -s reload 2017/08/14 21:37:35 [emerg] 671#671:/ etc / nginx / conf中的“upstream”指令中的参数数目无效。 d / default.conf:53 nginx:[emerg]在/etc/nginx/conf.d/default.conf中的“upstream”指令中无效的参数个数: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; 所以我在docker-compose.yml文件中添加port:80和/或expose:80 。 我设法获得

 upstream mydomain.fr { ## Can be connect with "bridge" network # my_domain_wordpress_1 server 172.17.0.14:80; } 

但与502错误相同。

任何想法为什么?

问候

原因是这两个图像在工作上是不同的。

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 image只是用VIRTUAL_HOST环境variables检查启动了哪些容器,检查其暴露的端口,然后创build一个代理通行证模板。 你需要的是一个不同的模板。 这可以使用每个主机configuration完成。

每VIRTUAL_HOST

要在每个VIRTUAL_HOST的基础上添加设置,请将您的configuration文件添加到/etc/nginx/vhost.d下。 与代理范围内的情况不同,它允许多个以.conf结尾的任何名字的configuration文件,每个VIRTUAL_HOST文件必须恰好在VIRTUAL_HOST之后命名。

为了允许在添加和删除后端时dynamicconfiguration虚拟主机,最好将外部目录挂载为/etc/nginx/vhost.d,而不是使用派生映像或挂载单个configuration文件。

例如,如果您有名为app.example.com的虚拟主机,则可以按如下方式为该主机提供自定义configuration:

$ docker run -d -p 80:80 -p 443: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

按照下面的URL获取更多详细信息

https://github.com/jwilder/nginx-proxy#per-virtual_host