1. 概要
事情があって、「apache」で動作させていた、ウェブサーバを、「nginx」へ変更します。
2026年7月のことで、わたしが「nginx」をさわるのは、実は初めてのことです。
コンテンツは、すべて、リバースプロキシで、「flask」へ渡しています。
2. インストール
sudo apt update
sudo apt install -y nginx
「apache」からの切り替えでなく、「nginx」をいきなりインストールした場合は、証明書ファイルが存在しない可能性があるので。
dpkg -l ssl-cert
の結果が。
+-- Desired=Unknown/Install/Remove/Purge/Hold
|+- Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
||+ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||| 名前 バージョン アーキテクチ 説明
+++-==============-============-============-=========================================
un ssl-cert <なし> <なし> (説明 (description) がありません)
と「なし」になっている場合は、インストールします。
sudo apt install ssl-cert
3. 起動
起動中の「apache」を止めて、無効化。
sudo systemctl stop apache2
sudo systemctl disable apache2
「nginx」を有効化して、起動。
sudo systemctl enable nginx
sudo systemctl start nginx
「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 Sat 2026-08-01 06:41:11 JST; 4 days ago
Invocation: fa399466f01547c4a365bbdd075f8329
Docs: man:nginx(8)
Process: 303818 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUC>
Process: 303830 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
Main PID: 303845 (nginx)
Tasks: 3 (limit: 3736)
Memory: 6.2M (peak: 7.1M)
CPU: 1min 15.652s
CGroup: /system.slice/nginx.service
tq303845 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
tq303846 "nginx: worker process"
mq303847 "nginx: worker process"
4. 設定
いくつか、設定したい項目があったので。
「mime」に拡張子を追加。
sudo vi /etc/nginx/mime.types
末尾の。
video/x-msvideo avi;
}
のカッコの前に、下記の行を追加します。
multipart/x-mixed-replace mjpeg mjpg;
「flask」へのリバースプロキシの設定。
sudo vi /etc/nginx/sites-available/default
末尾の記述を以下にします。
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
location / {
# (Apache の ProxyPass / ProxyPassReverse 相当)
proxy_pass http://127.0.0.1:5000/;
proxy_redirect off;
# (Apache の ProxyPreserveHost On / RequestHeader 相当)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto "https";
# (Apache の Header set 相当)
add_header Access-Control-Allow-Origin "*" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS" always;
add_header Access-Control-Allow-Headers "Content-Type" always;
if ($request_method = 'OPTIONS') {
return 204;
}
}
}
ここで定義している証明書は、なんちゃってなのですが。
実は、運用しているのが「AWS」上で、ロードバランサに定義しているので、外部では本物の証明書が有効になっているようです。
設定内容に間違いがないか、チェックします。
sudo nginx -t
反映。
sudo systemctl reload nginx
外部からアクセスして、問題ないことが確認できました。
5. ログ
「Ubuntu」上の「nginx」のログは、下記へ出力されます。
/var/log/nginx/access.log
/var/log/nginx/error.log
起動時のエラー等は、「systemd」のジャーナルに出ることがありますので、それを参照するには、下記のようなコマンドで参照します。
sudo journalctl -u nginx --no-pager -n 50
sudo systemctl status nginx
6. 参考サイト
本ページは、「Gemini」伍長および「Claude」上等兵を参考にさせていただきました。