nginx

Webサーバーnginxについて

導入・初期設定

導入・初期設定

Ubuntu 24.04にnginxを導入する。

概要

好みはapacheではありますが、セットアップしたばかりのUbuntuサーバの性能を鑑みてnginxを入れていきます。

さっくりとした手順

  1. インストールに必要なパッケージを入れます。
  2. nginxのリポジトリーを追加します。
  3. インストールを行います。
  4. 基本的な設定を行います。

必要なパッケージの導入とリポジトリー追加

sudo aptitude install curl gnupg2 ca-certificates lsb-release
echo "deb http://nginx.org/packages/ubuntu/ $(lsb_release -cs) nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo apt-key add -

nginxインストール

sudo aptitude update
sudo aptitude install nginx
nginx -v

nginx version: nginx/1.26.2を確認します。(2024/10/25現在)

sudo systemctl start nginx.service
systemtl status nginx.service

active(running)を確認します。

初期設定(オプション)

ここからは筆者の好みの問題です。

オプション:nginxの実行をwww-dataに変更する

sudo cp -pi /etc/nginx/nginx.conf /path/to/backup/directory/nginx.conf.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

diff -u /path/to/backup/directory/nginx.conf.$(date +%Y%m%d) /etc/nginx/nginx.conf

差分がなければバックアップは成功です。

sudo sed -i 's/user  nginx;/user  www-data;/g' /etc/nginx/nginx.conf
diff -u /path/to/backup/directory/nginx.conf.$(date +%Y%m%d) /etc/nginx/nginx.conf

以下の差分を確認します。

-user  nginx;
+user  www-data;
sudo systemctl restart nginx.service
systemctl status nginx.service

active(running)`を確認します。

オプション:Web格納ディレクトリを作成する

sudo mkdir -p /home/www-data
sudo chown -R www-data:www-data /home/www-data
sudo chmod -R 755 /home/www-data

オプション:passwdファイルの書き換え

※システム全体のアカウントを制御する重要なファイルです。取り扱いは慎重に行ってください。※

sudo cp -pi /etc/passwd /path/to/backup/directory/passwd.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

diff -u /path/to/backup/directory/passwd.$(date +%Y%m%d) /etc/passwd

エラーがなければバックアップは成功です。

sudo sed -i 's|/var/www|/home/www-data|' /etc/passwd
diff -u /path/to/backup/directory/passwd.$(date +%Y%m%d) /etc/passwd

以下の差分を確認します。

-www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
+www-data:x:33:33:www-data:/home/www-data:/usr/sbin/nologin

差分がこの2つだけであることを確認できたら設定完了です。

備考

この手順ではnginxのバーチャルサイトまではサポートしていないので、後述します。

導入・初期設定

Ubuntu24.04に導入したnginxをバーチャルホスト化。

概要

Ubuntu24.04にリポジトリを利用して追加したnginxは、apacheのようにバーチャルサイトが最初から備わっていませんでした。

そこで、その設定を施します。

バーチャルサイトの設定ファイル格納ディレクトリの作成

sudo mkdir -p /etc/nginx/sites-available
sudo mkdir -p /etc/nginx/sites-enabled
ls -ld /etc/nginx/sites*

sites-availablesites-enabledディレクトリがあることを確認します。

バーチャルサイト有効化

sudo cp -pi /etc/nginx/nginx.conf /path/to/backup/directory/nginx.conf.$(date +%Y%m%d)

任意のバックアップディレクトリを指定します。

diff -u /path/to/backup/directory/nginx.conf.$(date +%Y%m%d) /etc/nginx/nginx.conf

差分がなければバックアップは成功です。

sudo sed -i '/http {/a \    include /etc/nginx/sites-enabled/*;' /etc/nginx/nginx.conf
diff -u /path/to/backup/directory/nginx.conf.$(date +%Y%m%d) /etc/nginx/nginx.conf

以下の差分を確認します。

+    include /etc/nginx/sites-enabled/*;

サンプルのhtmlファイルを作る

ファイル格納ディレクトリは自分の環境に合わせます。

sudo -u www-data tee /home/www-data/index.html > /dev/null <<EOL
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome to example.com</title>
</head>
<body>
<h1>Welcome to example.com!</h1>
<p>This is a sample page served by Nginx.</p>
</body>
</html>
EOL

サンプルのバーチャルサイトを作成する

ファイル名やserver_nameは自分の環境に合わせます。

sudo tee /etc/nginx/sites-available/sample.conf > /dev/null <<EOL
server {
listen 80;
server_name example.com www.example.com;

root /home/www-data;
index index.html index.htm;

location / {
try_files \$uri \$uri/ =404;
}

# セキュリティ設定
# サーバー情報を隠す
server_tokens off;

# MIMEタイプの設定
include /etc/nginx/mime.types;
default_type application/octet-stream;

# XSS対策
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";

# ファイルのアップロードサイズ制限
client_max_body_size 1M;

# ログの設定
access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;
}
EOL

設定ファイル有効化

sudo ln -s /etc/nginx/sites-available/sample.conf /etc/nginx/sites-enabled/
sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

を確認します。

sudo systemctl restart nginx.service

設定したURLでアクセスできることを確認します。

これで、バーチャルサイトが設定されました。