目的
AWSにLinuxとNginxを導入して、Webアプリの環境構築をしていく中で、
「権限設定どうだっけ?」「シンボリックリンクってどう使うんだっけ?」と迷うことがよくある。
この記事では、自分自身の理解を深め、再利用できるように設計・権限周りを整理しておく。
ディレクトリ構成の基本
プロジェクトフォルダの置き場所
- 実際のプロジェクトコードは、
~/
以下(例:/home/ubuntu/web/your-project
)に置くのが一般的。 - 公開用フォルダ(Nginxのドキュメントルート)は
/var/www/
以下。
なぜ2つに分けるのか?
- 公開エリアと管理エリアを分離するため。
- 公開用の
/var/www/your-project
には、実際のプロジェクトの中身を置かず、シンボリックリンクを貼るのが基本。
sudo ln -s /home/ubuntu/web/your-project/public /var/www/your-project
これで /var/www/your-project
を Nginx が root として扱い、実態は ~/web/your-project/public
にある。
シンボリックリンクのメリット
- 本体を動かさずに切り替えが可能
- デプロイのたびに
/var/www/your-project
の中身を削除・コピーする必要がない - 複数のバージョンを切り替えるのも簡単(例:v1, v2, v3 に切り替え)
クライアントリクエストの流れと Nginx の役割
- クライアントから HTTP リクエストが来る
- Nginx がリクエスト内容を見て適切なファイル or 処理へ振り分ける
- 静的サイトならそのままファイルを返す
- 動的サイト(PHPなど)は php-fpm へ処理を渡す
静的サイト(HTML/CSS/JS)の Nginx 設定例
server {
listen 80;
server_name example.com;
root /var/www/your-project;
location / {
try_files $uri $uri/ =404;
}
}
→ 静的ファイルをそのまま Nginx が www-data
ユーザーとして読み取って返す。
動的サイト(PHP)の場合
server {
listen 80;
server_name example.com;
root /var/www/your-project;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
php-fpm と Nginx の関係
- Nginx は
.php
ファイルを直接処理できない。 -
fastcgi_pass
を使って php-fpm に処理をバトンパスする。 - PHP-FPM 側が
.php
ファイルを読み取り・実行して、結果(HTML)を Nginx に返す。
つまり、ファイルの読み取りが必要なのは php-fpm 側のユーザー(www-data
)。
権限の整理
ls -l
の見方(例)
-rw-r--r-- 1 ubuntu ubuntu 1234 Apr 8 index.php
- 所有者:
ubuntu
- 所有グループ:
ubuntu
- その他:読み取り可能
この場合、www-data
(その他ユーザー)としては、読み取りはできるが、ディレクトリの移動には実行権限も必要。
権限については以下の記事で詳しく触れた。
https://qiita.com/TechCraft/items/82ea8a4e1719592434d1
フォルダに必要な権限
- フォルダは「実行(
x
)権限」がないと中に入れない(読み取りできない)
chmod o+x /home/ubuntu/web/your-project