![[サーバ構築編#6] UbuntuへNginx1.28.0をインストール](/_next/image?url=%2Farticles%2Fserver%2Fnginx%2Fhero.jpg&w=3840&q=75)
サーバ構築編#6UbuntuへNginx1.28.0をインストール
Ubuntu 24.04.2 LTSへNginx1.28.0をインストールします。合わせて、SetGIDやACLを利用して運用しやすいディレクトリの権限設定を実施
初回公開日
最終更新日
サーバ構築編第6回からは、サーバへ個別のミドルウェアをインストールしていきます。
WebサーバであるNginx1.26.3のインストールを進めます。
合わせて、SetGIDやACLを利用して運用しやすいディレクトリの権限設定を実施します。
前提として、このサーバでは、Node.jsでNext.jsで作られたサイトを運用する想定です。
また、利用するドメインのDNSの設定がまだの場合は、それを完了させてください。
DNSの設定はとりあえず仮にexample.comなら、example.comとwww.example.comのIPアドレス(Aレコード)について、WebサーバのグローバルIPが設定されていれば問題ありません。
1. Nginx1.28.0のインストール手順
Ubuntu 24.04の標準リポジトリでインストール可能なNginx
のバージョンを調べる
bash
1sudo apt update
2apt-cache policy nginx
bash
1nginx:
2 インストールされているバージョン: (なし)
3 候補: 1.24.0-2ubuntu7.1
4 バージョンテーブル:
5 1.24.0-2ubuntu7.1 500
6 500 http://archive.ubuntu.com/ubuntu noble-updates/main amd64 Packages
7 500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages
8 1.24.0-2ubuntu7 500
9 500 http://archive.ubuntu.com/ubuntu noble/main amd64 Packages
標準リポジトリからのインストールだと
nginx-1.24.0
がインストールされるようです。
2025年5月27日現在は、Nginx安定版(Stable version)の最新は nginx-1.28.0
となっています。
https://nginx.org/en/download.html 最新の安定版をイントールしていきます。
Nginx公式リポジトリのGPGキーをバイナリ形式で保存
Ubuntu標準リポジトリ以外からインストールを行うには、バイナリ形式(.gpg)でGPGキーを保存 するのが推奨されています。
bash
1sudo mkdir -p /etc/apt/keyrings #/etc/apt/keyringsディレクトリがない場合
2curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /etc/apt/keyrings/nginx.gpg
- curl -fsSL → Nginx公式のGPGキーを取得
- gpg --dearmor -o /etc/apt/keyrings/nginx.gpg → バイナリ形式(.gpg)に変換して保存
Nginx公式リポジトリを追加
次に、安定版(Stable)を使うためのAPTリポジトリを追加します。
bash
1echo "deb [signed-by=/etc/apt/keyrings/nginx.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list > /dev/null
- signed-by=/etc/apt/keyrings/nginx.gpg → GPGキーの正しいパスを指定
- lsb_release -cs → noble を自動取得(Ubuntu 24.04)
Nginx 1.28.0
をインストール
bash
1sudo apt update
2
3sudo apt install nginx -y
○インストールされた
Nginx
のバージョンを確認bash
1nginx -v
bash
1nginx version: nginx/1.28.0
Nginx 1.26.3
のインストールは完了です。2. Nginxの起動と有効化
Nginxを 起動 & 自動起動設定
bash
1sudo systemctl enable --now nginx
- enable → OS起動時に自動起動
- --now → すぐに起動
○ Nginx のステータス確認
bash
1systemctl status nginx
bash
1nginx.service - nginx - high performance web server
2 Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
3 Active: active (running) since ・・・
- active (running) なら正常に動作中!
ufwでポートを解放
○ufwの状態を確認
bash
1sudo ufw status
○ポート 80(HTTP)と 443(HTTPS)を開放
bash
1sudo ufw allow 80/tcp # HTTP (リダイレクト用)
2sudo ufw allow 443/tcp # HTTPS (HTTP/2)
3sudo ufw allow 443/udp # HTTP/3 (QUIC)
HTTP/3
での運用にも対応するため、UDP
のポートも解放します。○設定を反映させるため、ufw を再読み込み
bash
1sudo ufw reload
○ポート 80 でLISTENしているか確認
bash
1sudo lsof -i :80
bash
1COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
2nginx XXXXX root 6u IPv4 XXXXX 0t0 TCP *:http (LISTEN)
3nginx XXXXX nginx 6u IPv4 XXXXX 0t0 TCP *:http (LISTEN)
4nginx XXXXX nginx 6u IPv4 XXXXX 0t0 TCP *:http (LISTEN)
5nginx XXXXX nginx 6u IPv4 XXXXX 0t0 TCP *:http (LISTEN)
6nginx XXXXX nginx 6u IPv4 XXXXX 0t0 TCP *:http (LISTEN)
上記のように表示されれば、一旦有効化はOKです。
もし何も表示されなければ
sudo systemctl restart nginx
でnginx
の再起動を試してみてください。3.ディレクトリの準備と設定の確認
ユーザグループの設定
Nginxは
www-data
ユーザーとして読み取り等の動作を行います。
運用時は各ユーザがrsync
やscp
などでファイルをアップロードするので、対象ユーザをwww-data
グループに含めます。bash
1sudo usermod -aG www-data deployuser
- deployuser(実際に運用するユーザ名へ変えてください) を www-data グループに追加
- -aG オプションで 既存のグループを維持しつつ www-data に追加(-G だけだと他のグループが消える)
設定を反映させるために、deployuser でログインし直すか、以下のコマンドで即時反映:
bash
1newgrp www-data
サイトデータを設置するディレクトリの作成
ここでは
/var/www
に各サイトのデータを配置する想定で話を進めます。
/var/www
はデフォルトで存在すると思います。
Nginxが読み取りできるように、これの所有グループを変更します。bash
1sudo chown root:www-data /var/www
パーミッションも変更します。
bash
1sudo chmod 775 /var/www
chmod g+s
(SetGID)でディレクトリグループを親ディレクトリと統一
通常、新しいディレクトリを作成すると、そのディレクトリの グループは作成したユーザーのプライマリグループ になります。
しかし、
chmod g+s
を設定すると、親ディレクトリのグループを自動的に引き継ぐ ため、管理がしやすくなります。SetGID を
/var/www
へ適用:bash
1sudo chmod g+s /var/www
chmod g+s を適用した後の挙動
たとえば、deployuser で /var/www にディレクトリを作成すると:
たとえば、deployuser で /var/www にディレクトリを作成すると:
bash
1mkdir /var/www/testsite
2ls -ld /var/www/testsite
出力:
bash
1drwxrwsr-x 2 deployuser www-data 4096 3月 18 14:05 /var/www/testsite
- グループが www-data に統一!(g+s の効果)
- これにより、www-data(Nginx)でもアクセスしやすくなる!
setfacl(ACL)でwww-data
グループに書き込み権限を付与
通常、chmod g+s だけでは、ファイルの書き込み権限までは変更できません。
そのため、Nginx(www-data ユーザー)やその他の
www-data
グループのユーザがファイルを書き込む必要がある場合は、setfacl を使って www-data に rwx 権限を追加します。acl パッケージをインストール:
bash
1sudo apt update
2sudo apt install acl -y
setfacl コマンドの確認:
bash
1setfacl --version
出力例:
bash
1setfacl --version
bash
1setfacl 2.3.2
aclの設定:
bash
1sudo setfacl -R -m g:www-data:rwx /var/www
2sudo setfacl -R -d -m g:www-data:rwx /var/www
- www-data グループに /var/www の読み書き実行権限 (rwx) を付与!
- すでにあるファイル・ディレクトリにも適用!(-R オプション)
- -d -m g:www-data:rwx → 新しく作るディレクトリやファイルにも www-data:rwx を適用
setfacl を適用した後の挙動
例えば、deployuser が /var/www/testsite/index.html を作成すると:
例えば、deployuser が /var/www/testsite/index.html を作成すると:
bash
1touch /var/www/testsite/index.html
2ls -l /var/www/testsite/index.html
出力:
bash
1-rw-rw-r--+ 1 deployuser www-data 0 3月 18 14:10 /var/www/testsite/index.html
- グループ www-data に rw- 権限が付与されている!(setfacl の効果)
- ACL が適用されているファイルには + が付く!
これで、
www-data
グループに所属ユーザは/var/www
配下のディレクトリ内のファイルを自由に上書きできるようになります。
複数人でサイトデータを更新するときに、「更新できない!」と言われないようにこの辺は最初に設定しておくと運用が楽になると思います。4.バーチャルホスト設定(HTTP)
ここでは省略しますが、DNSの設定は済ませておいてください。
○バーチャルホスト用のディレクトリを作成
まず、Webサイトのデータを配置するディレクトリを作ります。
(例: example.com を設定する場合)
bash
1sudo mkdir -p /var/www/example.com/html
適当な index.html を作っておく:
bash
1echo "<h1>Welcome to example.com</h1>" | sudo tee /var/www/example.com/html/index.html
バーチャルホストの設定ファイルを作成
Nginx 公式リポジトリ版(nginx.org からインストールしたもの)では、
conf.d/
を使うのがデフォルト になっています。
ここでもconf.d/
配下にバーチャルホストの設定ファイルを追加して利用していきます。Nginx の設定ファイルを
/etc/nginx/conf.d/
に作成します。bash
1sudo vi /etc/nginx/conf.d/example.com.conf
bash : example.com.conf
1server {
2 listen 80;
3 server_name www.example.com;
4
5 return 301 http://example.com$request_uri;
6}
7
8server {
9 listen 80;
10 server_name example.com;
11
12 root /var/www/example.com/html;
13 index index.html;
14
15 location / {
16 try_files $uri $uri/ =404;
17 }
18}
sslの設定をすると、上記は利用しなくなりますが、一応、リダレクト処理や
try_files
で404を返す処理などは記述しておきます。同様に、ホスト設定を追加する際は、
/etc/nginx/conf.d/
配下にxxxxx.conf
というドメインの設定ファイルを追加していきます。仮に一時的に利用しなくなったドメインは下記のようにすると一時無効化ができます。
bash
1sudo mv /etc/nginx/conf.d/example.com.conf /etc/nginx/conf.d/example.com.conf.disabled
もちろん、ドメインを利用しなくなれば
conf
ファイルを削除すればOKです。bash
1sudo rm /etc/nginx/conf.d/example.com.conf
default.conf を無効化
bash
1sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
この設定があると、「どのサーバーにも該当しないリクエスト」がデフォルトの /usr/share/nginx/html に行ってしまうので、意図しないページが表示を避けるためには
default.conf
を無効化Nginxを再起動
bash
1sudo nginx -t # 設定ファイルのチェック
2sudo systemctl restart nginx # Nginx を再起動
Nginx を再起動したら、ブラウザでアクセスしてチェックします。
続きはこちら...
前回の確認はこちら...
この記事の執筆・編集担当
DE
松本 孝太郎
DELOGs編集部/中年新米プログラマー
ここ数年はReact&MUIのフロントエンドエンジニアって感じでしたが、Next.jsを学んで少しずつできることが広がりつつあります。その実践記録をできるだけ共有していければと思っています。
▼ 関連記事
[サーバ構築編#2] さくらクラウドでPostgreSQLのアプライアンスDBを作る
運用が楽々なアプライアンス「データベース」でPostgreSQL環境を作成
2025/6/20公開
![[サーバ構築編#2] さくらクラウドでPostgreSQLのアプライアンスDBを作るのイメージ](/_next/image?url=%2Farticles%2Fserver%2Fsakura-cloud-db%2Fhero-thumbnail.jpg&w=1200&q=75)
[サーバ構築編#3] Ubuntu初期設定-ユーザ作成とSSH接続の強化
SSHでサーバへ接続して、Ubuntu Server 24.04.1LTSの主にユーザ作成とSSH接続の強化
2025/6/20公開
![[サーバ構築編#3] Ubuntu初期設定-ユーザ作成とSSH接続の強化のイメージ](/_next/image?url=%2Farticles%2Fserver%2Fubuntu-user-ssh%2Fhero-thumbnail.jpg&w=1200&q=75)
[サーバ構築編#4] Ubuntu初期設定-日本語化
Ubuntu Server 24.04.1LTSの言語設定の日本語化とシステム時間の日本時間ゾーン設定
2025/6/20公開
![[サーバ構築編#4] Ubuntu初期設定-日本語化のイメージ](/_next/image?url=%2Farticles%2Fserver%2Fubuntu-locale%2Fhero-thumbnail.jpg&w=1200&q=75)
[サーバ構築編#5] Ubuntu初期設定-アプライアンスDB(PostgreSQL 13)との接続設定
Webサーバのイーサネット設定を行いローカルスイッチとアプライアンスDBのPostgreSQL 13へのアクセスを可能に
2025/6/20公開
![[サーバ構築編#5] Ubuntu初期設定-アプライアンスDB(PostgreSQL 13)との接続設定のイメージ](/_next/image?url=%2Farticles%2Fserver%2Fubuntu-ethernets%2Fhero-thumbnail.jpg&w=1200&q=75)
[サーバ構築編#1] さくらクラウドでUbuntuサーバのインスタンスを作る
コントロールパネルからサクッとUbuntuサーバのインスタンスを作成
2025/6/20公開
![[サーバ構築編#1] さくらクラウドでUbuntuサーバのインスタンスを作るのイメージ](/_next/image?url=%2Farticles%2Fserver%2Fsakura-cloud-server%2Fhero-thumbnail.jpg&w=1200&q=75)