質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.78%

shuudockerでwordpressのコンテナがリバースプロキシに失敗し、表示できない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 835

score 18

サイト運営を目標に現在勉強中です。
浅学ゆえの未熟な質問、ご容赦ください。
ご助力いただけますと大変助かります。

前提・実現したいこと

  • リストバーチャルホストによるマルチドメインサイトのウェブサーバのひとつを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   

お手数ですが、よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • masibw

    2020/07/12 12:55

    wordpressのdockerfile,docker-composeのファイルはありませんか?

    キャンセル

  • darumausagi

    2020/07/14 10:04

    返信いただきありがとうございます。追記修正いたしました。参考になりますでしょうか…?

    キャンセル

  • masibw

    2020/07/14 11:16

    記載ありがとうございます。
    server 127.0.0.1 down;
    となっているのはおそらく wordpressのコンテナが起動失敗or起動した後終了しているからだと思われます。

    docker-compose up コマンドを実行した際に何かエラーログなど出ていませんか?
    または docker-compose up -d 後に docker-compose ps コマンドの結果はどうなっていますか?

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.78%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る