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

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

新規登録して質問してみよう
ただいま回答率
85.50%
CentOS

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

nginx

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

Q&A

解決済

1回答

4547閲覧

dockerでnginx + php-fpmの502Bad Gatewayエラーが解消できない

butasan

総合スコア1

CentOS

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

nginx

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

0グッド

0クリップ

投稿2021/11/18 07:53

編集2021/11/18 09:23

前提・実現したいこと

Docker上でnginx、php-fpm、nextjs、mysql、CentOS、Linuxの環境を作っています。
ポートを変えてステージング環境を作ろうとしていますが、502Bad Gatewayが出て解消できません。
本番環境は問題なく動いており、何が問題か分かりません。
本番とステージングとの差分はポート番号とコンテナ名のみです。
お力添えいただけると助かります。

発生している問題・エラーメッセージ

$docker-compose logs nginx-stg nginx-stg | 2021/11/18 05:40:38 [error] 8#8: *10 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: , server: , request: "GET / HTTP/1.1", upstream: "", host: "localhost:28000" nginx-stg | { "time_local": "18/Nov/2021:05:40:38 +0000", "remote_addr": "", "remote_user": "", "request": "GET / HTTP/1.1", "status": "502", "body_bytes_sent": "150", "request_time": "0.001", "http_referrer": "", "http_user_agent": "curl/7.29.0" }
$ curl http://localhost:28000 <html> <head><title>502 Bad Gateway</title></head> <body> <center><h1>502 Bad Gateway</h1></center> <hr><center>nginx</center> </body> </html>

該当のソースコード

docker-compose.yml

version: "3" services: nginx-stg: image: shin1x1/laravel-nginx118 container_name: nginx-stg ports: # - "8000:80" - "28000:80" volumes: - .:/var/www/html - ./docker/nginx/conf.d:/etc/nginx/conf.d links: - php-stg php-stg: build: ./docker container_name: php-stg volumes: - .:/var/www/html ports: # 本番環境はポート指定なし - "9001:80" depends_on: - db-stg db-stg: image: mysql:8.0 container_name: mysql-stg environment: MYSQL_ROOT_USER: ------- MYSQL_ROOT_PASSWORD: ------- MYSQL_DATABASE: app MYSQL_USER: ------- MYSQL_PASSWORD: ------- TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/docker-entrypoint-initdb.d ports: # - 3306:80 - "3307:80" phpmyadmin-stg: image: phpmyadmin/phpmyadmin container_name: phpmyadmin-stg depends_on: - db-stg environment: - PMA_ARBITRARY=1 - PMA_HOSTS=mysql-stg ports: # - "10080:80" - "10081:80" nextjs-stg: container_name: nginx-nextjs-stg build: context: ./docker/images/nextjs-nodejs/ dockerfile: dockerfile ports: # - "8080:80" # - "80:3001" - "3010:3000" volumes: - ./nextjs:/usr/share/nextjs command: bash -c "npm --prefix /usr/share/nextjs run start /usr/share/nextjs"

Dockerfile

FROM php:7.4.0-fpm COPY --from=composer:latest /usr/bin/composer /usr/bin/composer RUN apt-get update && apt-get install -y \ git \ && docker-php-ext-install pdo_mysql

default.conf

server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /var/www/html/public; index index.php index.html index.htm; charset utf-8; location ~ .(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|svg|mp3)$ { try_files $uri =404; } location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ .php$ { # fastcgi_pass php:9000; fastcgi_pass php-stg:9001; fastcgi_index index.php; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
$ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------- mysql-stg docker-entrypoint.sh mysql ... Up 3306/tcp, 33060/tcp, 0.0.0.0:3307->80/tcp nginx-nextjs-stg /docker-entrypoint.sh bash ... Up 0.0.0.0:3010->3000/tcp, 80/tcp nginx-stg nginx -g daemon off; Up 0.0.0.0:28000->80/tcp php-stg docker-php-entrypoint php-fpm Up 0.0.0.0:9001->80/tcp, 9000/tcp phpmyadmin-stg /docker-entrypoint.sh apac ... Up 0.0.0.0:10081->80/tcp

試したこと

default.conf

  • php-stg:をポート番号に変更。→同様のエラー
  • listen 80listen 28000に変更。→curlを投げると下記エラーになる。

(56) Recv failure: 接続が相手からリセットされました

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

default.conffastcgi_pass php-stg:9001;fastcgi_pass php-stg:9000;にしてみてください。

追記

現状ですが、
Nginxコンテナ、PHP-FPMコンテナ共にログが出力されていますので、
ホスト<=>Nginxコンテナ、及びNginxコンテナ<=>PHP-FPMコンテナの接続はできていると思われます。
また、PHP-FPMのエラーログも出力されていないようなので、Laravelアプリケーションが500エラーを返していると予想しております。
しかしながら、Laravelアプリケーションのエラーログも出力されていないとのことなので、
ここからは処理の流れを追って原因を特定する必要があるかもしれません。

一度/var/www/html/index.phpの中身を以下に置き換えて、アクセスできるか試してみてください。
(元のindex.phpはどこかにバックアップしておいてください)

php

1<?php 2phpinfo();

投稿2021/11/18 08:59

編集2021/11/18 10:12
KAOsaka

総合スコア531

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

butasan

2021/11/18 09:17

ありがとうございます。 9000にすると```*10 recv() failed (104: Connection reset by peer) while reading response header from upstream,```のerrorが消えました。 ですが、webからhttp://ポート番号:28000にアクセスすると、 ``` このページは動作していません [ポート番号]では現在このリクエストを処理できません。 HTTP ERROR 500 ``` と表示されます。 本番環境の8000ポートにアクセスした場合はLaravelのスタートページが表示されます。 curlを投げると何も返ってこないです。
KAOsaka

2021/11/18 09:22

NginxのエラーログとPHP-FPMのエラーログを確認してみてください。
butasan

2021/11/18 09:28

確認しましたがエラーログは出ていないようでした。 $ docker-compose logs nginx-stg Attaching to nginx-stg nginx-stg | { "time_local": "18/Nov/2021:09:11:55 +0000", "remote_addr": "", "remote_user": "", "request": "GET / HTTP/1.1", "status": "500", "body_bytes_sent": "5", "request_time": "0.117", "http_referrer": "", "http_user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36" } $ docker-compose logs php-stg Attaching to php-stg php-stg | 172.27.0.7 - 18/Nov/2021:09:11:55 +0000 "GET /index.php" 500
KAOsaka

2021/11/18 09:37

Laravelのエラーログはどうですか?
butasan

2021/11/18 09:54

Laravelにも何も出ていません。
KAOsaka

2021/11/18 10:13

回答追記しました。
butasan

2021/11/19 09:03

ご教授いただいた通りindex.phpを置き換えると、phpinfo()が出力できました。 index.phpが問題だったようです。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問