linux mint 22 に nginx

(2026-01-14)

nginx とは

nginx とは web サーバーの一種です。

chatGPT によると「Webサーバーとは、ネットワーク上でHTTP通信を待ち受け、URLで指定されたコンテンツ(HTML、画像、プログラムの実行結果など)を返す常駐プログラムである。」

apache も web サーバーですが、その 2 つを比較すると、

項目nginxApache
分類WebサーバーWebサーバー
主な用途静的配信・リバースプロキシ・負荷分散動的配信・汎用Webサーバー
開発元Igor Sysoev(個人)Apache Software Foundation
初公開2004年1995年
設計思想イベント駆動・非同期プロセス/スレッドベース
同時接続数非常に強い多くなると弱くなりがち
メモリ使用量少ない比較的多い
静的ファイル配信非常に高速普通
動的コンテンツ外部(PHP-FPM等)モジュールで直接処理可
PHPとの関係PHP-FPM必須mod_php が使える
設定方法設定ファイル中心設定+.htaccess
.htaccess使用不可使用可能
ディレクトリ単位設定不可可能
リバースプロキシ得意可能だが主用途ではない
SSL/TLS標準で高速標準対応
主な用途例本番環境・高負荷サイト開発環境・共有サーバー
学習コストやや高い低め

apache と比較して軽くて動作は遥かに高速です。

以前から私の祖父から孫までの 5 代にわたるアルバムを自作の php プログラムで作っていましたが、しょせん素人が作るものであまりセンスがあるとは言えないものでした。

また、いずれレンタルサーバーにデプロイすることを考えており、laravel で作って強烈なアクセス制限をかけた方が良いのではないかと考えるようになりました。

現在ローカルで laravel でアルバムアプリを作成したのですが、動画が重すぎてロード時間がかなりかかってほとんどフリーズの状態になってしまいます。

そこで、apache から nginx に変更したところ爆速になりました。xserver なんかも nginx を使ってるようなので、apache から nginx に切り替えようと思います。

nginx の設定

nginx 設定はかなりわかりにくいのでマニュアル化しました。

Apache を停止・無効化

Apache と nginx はポート 80 を使うので、Apache を停止・無効化します。

sudo systemctl stop apache2
sudo systemctl disable apache2

nginx インストール

sudo apt update
sudo apt install nginx -y

バージョン確認

nginx -v
nginx version: nginx/1.24.0 (Ubuntu)

nginx 起動・有効化

sudo systemctl start nginx
sudo systemctl enable nginx

確認します。

sudo systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-01-15 07:34:59 JST; 35min ago
Docs: man:nginx(8)
Process: 7428 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited,>
Process: 7430 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0>
Main PID: 7431 (nginx)
Tasks: 13 (limit: 37954)
Memory: 9.0M (peak: 10.6M)
CPU: 22ms

ドキュメントルートを作る(/home 配下)

mkdir -p /home/moheno/www
chmod 755 /home/moheno

設定ファイルを作る

sudo nano /etc/nginx/sites-available/minimal

以下のように編集。

server {
listen 80;
server_name localhost;
root /home/moheno/www;
index index.html;
}

index.html をルートディレクトリに作成

cat << 'EOF' > /home/moheno/www/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>nginx test</title>
</head>
<body>
<h1>nginx is working</h1>
<p>Document root: /home/moheno/www</p>
</body>
</html>
EOF

有効化(default は無効にする)

sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/minimal /etc/nginx/sites-enabled/

設定チェック → 再起動

sudo nginx -t
sudo systemctl restart nginx

ブラウザで確認

http://localhost/で確認。

nginx を停止・アンインストールする

nginx を停止するには、

sudo systemctl stop nginx

起動しないようにしておくには、

sudo systemctl disable nginx

nginx を完全に削除するには以下を実行します。

sudo systemctl stop nginx
sudo systemctl disable nginx
sudo apt purge nginx nginx-common nginx-core
sudo apt autoremove

Apache の起動

sudo systemctl start apache2

自動起動を有効化するには、

sudo systemctl enable apache2

laravel プロジェクトをルートにする

family-albumというプロジェクトを作成した場合は、その public となります。

Terminal window
family-album/
├── app/
├── bootstrap/
├── config/
├── public/ Webサーバーが見るのはここだけ
└── index.php ここから Laravel が起動する
├── routes/
├── storage/
└── vendor/

nginx 設定(family-album)

/etc/nginx/sites-available/family-album を設定します。

sudo nano /etc/nginx/sites-available/family-album

以下のように編集します。

server {
listen 80;
server_name localhost;
root /home/moheno/family-album/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
}

fastcgi_pass unix:/var/run/php/php8.4-fpm.sock; の部分は php のバージョンに合わせます。

有効化します。

sudo ln -s /etc/nginx/sites-available/family-album /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

パーミッション設定。

sudo chmod 755 /home/moheno
sudo chown -R moheno:www-data /home/moheno/family-album
sudo chmod -R 755 /home/moheno/family-album
sudo chmod -R 775 /home/moheno/family-album/storage /home/moheno/family-album/bootstrap/cache

php fpm を起動。

sudo systemctl start php8.4-fpm
sudo systemctl enable php8.4-fpm

http://localhost/で確認。