2017-08-15 44 views
0

TL FPM; DR 为什么这wordpress:latest Dockerfile是确定与nginx-proxy但这个不是wordpress:fpm Dockerfile?我怎么可以使用wordpress:fpm图像与nginx-proxy502错误与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

+0

似乎接近:https://github.com/jwilder/docker-gen/issues/196 –

回答

0

原因是这两个图片的工作方式不同。

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/nginx-proxy#per-virtual_host

+0

感谢您的评论。我会试试这个! –

相关问题