1. 概要
事情があって、「apache」で動作させていた、ウェブサーバを、「nginx」へ変更します。
2026年7月のことで、わたしが「nginx」をさわるのは、実は初めてのことです。
コンテンツは、すべて、リバースプロキシで、「flask」へ渡しています。
2. インストール
sudo apt update
sudo apt install nginx -y
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 /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. 参考サイト
本ページは、「Gemini」伍長を参考にさせていただきました。