2017-08-15 122 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

感謝您的評論。我會試試這個! –