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

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

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

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

PHP

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

Docker

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

解決済

nginxとphp-fpmの接続で何故www-dataを記述する必要があるのか

yuina711
yuina711

総合スコア9

nginx

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

PHP

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

Docker

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

1回答

0評価

1クリップ

1712閲覧

投稿2021/03/14 03:39

編集2021/03/14 08:31

##はじめに
私はプログラミング初学者であり、現在サーバー関連の知識を学んでいる段階です。
自分で可能な限り調べた上で質問しておりますが、意味不明な質問をしている場合はお許しください、、。

##環境
Docker 20.10.0
nginx 1.18.0
php 7.4.15

##質問内容
dockerを使用している状況で、nginxとphp-fpmを接続する場合、主にnginx側ではnginx.confとdefault.conf、php側ではzzz-www.confで設定を変更すると思いますが、その設定に関していくつか質問がございます。

1.nginx.confでは実行ユーザーをwww-dataに変更したり、zzz-www.confではlisten.owner = www-data、listen.group = www-dataと設定することがあると思います。
このwww-dataに関して、私の考えが正しいか、また何故www-dataを記述する必要があるのか分からない点がございますので、ご意見を頂きたく存じます。

2.zzz-www.conf内のlisten.mode = 0666の役割について、私の理解が正しいかご意見を頂きたく存じます。

よろしくお願い致します。

##nginx側で実行ユーザーをwww-dataに変更することに対する私の考え

私の理解としましては、/var/run/php-fpm/php-fpm.sockのパーミッションはphp-fpmのデフォルト設定で下記のようになっており、

$ ls -l /var/run/php-fpm/php-fpm.sock srw------ 1 www-data www-data 0 3月 12 11:01 /var/run/php-fpm/php-fpm.sock

nginx側のデフォルトの実行ユーザーに対して権限が与えられておらず、nginxの実行ユーザーをデフォルトのまま(www-dataではない実行ユーザー)でphp-fpmとの接続を試みると502エラーとなる。

この502エラーを避ける為に、nginxの実行ユーザーをデフォルトからwww-dataに変更してphp-fpm側のwww-dataと統一することで、nginx側にphp-fpmのデフォルトで設定されているパーミッションと同一の権限が与えられ502エラーが起きない。

従って、docker内でnginx.confを用意し、user www-data;を追記することで、nginx側の実行ユーザーをwww-dataにする必要があると考えております。

##zzz-www.confでlisten.owner = www-dataとlisten.group = www-dataを設定する理由は何故か
申し訳ございませんが、この点に関してどのような場合に、下記のようにwww-dataを記述する必要があるのかが分かりません。

#略 listen.owner = www-data listen.group = www-data listen.mode = 0666

分からないなりに考えたのですが、nginx.confで、実行ユーザーをuser www-data;(php-fpmのデフォルトユーザー名と同じ名前に変更)と指定して、その実行ユーザー(www-data = owner)や同一のサーバーを利用するグループ全体に対してアクセス権限を設定したい場合に、listen.owner = www-dataとlisten.group = www-dataを書き、アクセス権限をlisten.mode = 0660のように指定する。このような理解で正しいでしょうか?

##zzz-www.conf内のlisten.mode = 0666の役割について
/var/run/php-fpm/php-fpm.sockのパーミッションはphp-fpmのデフォルト設定で下記のようになっており、

$ ls -l /var/run/php-fpm/php-fpm.sock srw------ 1 www-data www-data 0 3月 12 11:01 /var/run/php-fpm/php-fpm.sock

デフォルトではnginx側の実行ユーザー(www-dataに変更済 = owner)にしか権限を与えていない為、listen.mode = 0666でパーミッションを666することで、nginx側の実行ユーザー(owner)や同一のサーバーを利用するグループ全体(group)に対しても、読み書きの権限を与えている役割を果たしている、という理解で正しいでしょうか?

何卒ご意見くださいますようお願い致します。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

nginx

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

PHP

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

Docker

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