質問編集履歴

1 追記修正

darumausagi

darumausagi score 18

2020/07/14 10:03  投稿

dockerでwordpressのコンテナがリバースプロキシに失敗し、表示できない
shuudockerでwordpressのコンテナがリバースプロキシに失敗し、表示できない
サイト運営を目標に現在勉強中です。
浅学ゆえの未熟な質問、ご容赦ください。
ご助力いただけますと大変助かります。
### 前提・実現したいこと
- リストバーチャルホストによるマルチドメインサイトのウェブサーバのひとつをWordPressで構築したい
### 状況
リバースプロキシ用のコンテナを立ち上げて、ウェブサーバ用のコンテナをそれぞれバーチャルホストしてサブドメインで表示させています。
現在、WordPressのコンテナのみ、502エラーで表示ができません。
リバースプロキシのコンテナ内で振り分けを確認すると、うまくいっているコンテナとそうでないコンテナの差が
「server 172.18.0.XX:80;」「server 127.0.0.1 down;」であることがわかりました。
172.18.0.XXは調べたところdockerの内部IPで、127.0.0.1はlocalhostのIPアドレスなので、
WordPressのコンテナについても、dockerの内部IPアドレスを読み込めるようになれば、うまくいくのではないかと思い、試行錯誤しています。
nginx.confの設定でどうにかできるところなのかな、と思い、色々設定を変更してみたのですが、うまくいかないため、
設定方法をご教授いただけると助かります。
```ここに言語を入力
docker exec -it nginx-proxy /bin/bash
ls -l /etc/nginx/conf.d/default.conf
cat /etc/nginx/conf.d/default.conf
```
/etc/nginx/conf.d/default.conf
一部抜粋
```ここに言語を入力
# hoge.com
upstream hoge.com {
                               ## Can be connected with "common_link" network
                       # primary
                       server 172.18.0.8:80;
}
server {
       server_name hoge.com;
       listen 80 ;
       access_log /var/log/nginx/access.log vhost;
       return 301 https://$host$request_uri;
}
server {
       server_name hoge.com;
       listen 443 ssl http2 ;
       access_log /var/log/nginx/access.log vhost;
       ssl_session_timeout 5m;
       ssl_session_cache shared:SSL:50m;
       ssl_session_tickets off;
       ssl_certificate /etc/nginx/certs/hoge.com.crt;
       ssl_certificate_key /etc/nginx/certs/hoge.com.key;
       add_header Strict-Transport-Security "max-age=31536000" always;
       location / {
               proxy_pass http://hoge.com;
       }
}
# test01.hoge.com
upstream test01.hoge.com {
                               ## Can be connected with "common_link" network
               # test01
                       server 127.0.0.1 down;
}
server {
       server_name test01.hoge.com;
       listen 80 ;
       access_log /var/log/nginx/access.log vhost;
       return 301 https://$host$request_uri;
}
server {
       server_name test01.hoge.com;
       listen 443 ssl http2 ;
       access_log /var/log/nginx/access.log vhost;
       ssl_session_timeout 5m;
       ssl_session_cache shared:SSL:50m;
       ssl_session_tickets off;
       ssl_certificate /etc/nginx/certs/hoge.com.crt;
       ssl_certificate_key /etc/nginx/certs/hoge.com.key;
       add_header Strict-Transport-Security "max-age=31536000" always;
       location / {
               proxy_pass http://test01.hoge.com;
       }
}
# aaa.hoge.com
upstream xn--cksr0ah2kx6h781e.hoge.com {
                               ## Can be connected with "common_link" network
                       # quinary
                       server 172.18.0.11:80;
}
server {
       server_name aaa.hoge.com;
       listen 80 ;
       access_log /var/log/nginx/access.log vhost;
       return 301 https://$host$request_uri;
}
server {
       server_name aaa.hoge.com;
       listen 443 ssl http2 ;
       access_log /var/log/nginx/access.log vhost;
       ssl_session_timeout 5m;
       ssl_session_cache shared:SSL:50m;
       ssl_session_tickets off;
       ssl_certificate /etc/nginx/certs/hoge.com.crt;
       ssl_certificate_key /etc/nginx/certs/hoge.com.key;
       add_header Strict-Transport-Security "max-age=31536000" always;
       location / {
               proxy_pass http://aaa.hoge.com;
       }
}
```
参考情報
[リバースプロキシ用のdocker-compose.yml ]
/etc/vps/portal/docker-compose.yml
version: '2'
```ここに言語を入力
services:
 nginx-proxy:
   restart: always
   image: jwilder/nginx-proxy
   container_name: nginx-proxy
   ports:
     - "80:80"
     - "443:443"
   volumes:
     - /var/run/docker.sock:/tmp/docker.sock:ro
     - /etc/nginx/ssl:/etc/nginx/dhparam:ro
     - /etc/letsencrypt/live/hoge.com:/etc/letsencrypt/live/hoge.com:ro
     - /etc/letsencrypt/archive/hoge.com:/etc/letsencrypt/archive/hoge.com:ro
     - /etc/vps/portal/certs:/etc/nginx/certs:ro
   networks:
       - common_link
networks:
 common_link:
   external:
     name: common_link
```
[nginx.conf]
試してみたnginx.conf設定ファイル
```ここに言語を入力
server {
   listen      80;
   server_name localhost;
   #charset koi8-r;
   #access_log /var/log/nginx/host.access.log main;
   location / {
#       root  /usr/share/nginx/html;
       root  /var/www/html/test01;
       index index.php;
   }
   #error_page 404             /404.html;
   # redirect server error pages to the static page /50x.html
   #
   error_page  500 502 503 504 /50x.html;
   location = /50x.html {
#       root  /usr/share/nginx/html;
       root  /var/www/html/test01;
   }
location ~* \.(gif|jpe?g|png|ico)$
{
 add_header Cache-Control "s-maxage=86400, public";
root  /var/www/html/test01;
}
 location ~ \.php$ {
root  /var/www/html/test01;
   try_files $uri =404;
   fastcgi_split_path_info ^(.+\.php)(/.+)$;
   fastcgi_pass wordpress01:9000;
   fastcgi_index index.php;
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_param PATH_INFO $fastcgi_path_info;
 }
   # proxy the PHP scripts to Apache listening on 127.0.0.1:80
   #
   #location ~ \.php$ {
   #   proxy_pass  http://127.0.0.1;
   #}
   # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
   #
   #location ~ \.php$ {
   #   root          html;
   #   fastcgi_pass  127.0.0.1:9000;
   #   fastcgi_index index.php;
   #   fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
   #   include       fastcgi_params;
   #}
   # deny access to .htaccess files, if Apache's document root
   # concurs with nginx's one
   #
   #location ~ /\.ht {
   #   deny all;
   #}
}
```
**追記**  
[wordpress用のxml]  
設定を変えていくつか試してみたので、そのうちのひとつを記載いたします…  
 
```ここに言語を入力  
version: '3'  
services:  
 
 mariadb:  
   image: mariadb:latest  
   container_name: mariadb  
   volumes:  
     - /etc/vps/portal/mysql:/var/lib/mysql  
   environment:  
     - MYSQL_ROOT_HOST=${MYSQL_ROOT_HOST}  
     - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}  
     - MYSQL_USER=${MYSQL_USER}  
     - MYSQL_PASSWORD=${MYSQL_PASSWORD}  
     - MYSQL_DATABASE=${MYSQL_DATABASE}  
   env_file: .env  
   networks:  
       - common_link  
 
 wordpress01:  
   image: wordpress:php7.4-fpm  
   container_name: wordpress01  
   environment:  
     - WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}  
     - WORDPRESS_DB_USER=${WORDPRESS_DB_USER}  
     - WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}  
     - WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}  
   env_file: .env  
   depends_on:  
     - mariadb  
   volumes:  
     - /etc/vps/portal/portal/public:/var/www/html  
   restart: always  
   networks:  
       - common_link  
 
 
 test01:  
   restart: always  
   image: nginx  
   build:  
     context: .  
     dockerfile: Dockerfile  
   container_name: test01  
   environment:  
     - VIRTUAL_HOST=test01.hoge.com  
   volumes:  
     - /etc/vps/portal/test01/conf/default.conf:/etc/nginx/nginx.conf  
     - /etc/vps/portal/public:/var/www/html  
   depends_on:  
     - wordpress01  
   networks:  
     - common_link  
 
 
networks:  
 common_link:  
   external:  
     name: common_link  
```  
 
[.env]  
```ここに言語を入力  
# mariadb  
MYSQL_ROOT_HOST=db  
MYSQL_ROOT_PASSWORD=password  
MYSQL_USER=root  
MYSQL_PASSWORD=password  
MYSQL_DATABASE=wordpress  
 
# wordpress  
WORDPRESS_DB_HOST=db  
WORDPRESS_DB_USER=root  
WORDPRESS_DB_PASSWORD=password  
WORDPRESS_DB_NAME=wordpress  
```  
 
 
[Dockerfile]  
```ここに言語を入力  
FROM nginx:latest  
 
COPY nginx/default.conf /etc/nginx/conf.d/wordpress.conf  
 
CMD ["nginx", "-g", "daemon off;"]  
```  
 
 
### 環境
<利用サービス>
DNS:さくらのクラウドDNS
サーバ:さくらのVPS
CDN:さくらのウェブアクセラレータ
メールサーバ:さくらのメールボックス
<バージョン>
OS
CentOS Linux release 7.8.2003 (Core)
Docker
Docker version 19.03.11
docker-compose version 1.14.0 
 
 
 
 
お手数ですが、よろしくお願いいたします。
  • nginx

    1827 questions

    nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

  • CentOS

    4766 questions

    CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

  • WordPress

    15442 questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

  • Docker

    3282 questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

  • さくらのVPS

    194 questions

    さくらのVPSは、さくらインターネット社が提供するVPS(仮想専用サーバー)です。高速なSSDの選択や複数台構成も可能。利用者に応じた柔軟なプランが用意されています。大規模システムにも対応可能なスケーラビリティを備えたホスティングサービスです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る