- Published on
逆引きnginx
- Authors
- Name
- Kikusan
- 参考
- 起動設定
- nginx.conf設定
- ログファイル
- uWSGI設定(django)
- django設定
- uwsgi設定
- app_nginx.conf
- HTTPS設定
- SSL/TLSプロトコルの仕組み
- サーバ証明書の生成
参考
起動設定
systemctl start nginx # 開始
systemctl stop nginx # 停止
systemctl restart nginx # 再起動
systemctl reload nginx # 設定の再読み込み
systemctl status nginx # 起動状態とログ表示
nginx.conf設定
nginx.confは /etc/nginx
にある設定ファイル。
include
によって他の設定ファイルを読み込める。デフォルトではmime.types
と、conf.d/*.conf
が読み込まれる。
user nginx; # workerプロセスユーザ名。masterプロセスはrootで動く
worker_processes auto; # workerプロセス数。autoはコア数と同数。
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid; # プロセスIDを記述したファイル
events {
# イベント待ち関連のパラメーター
worker_connections 1024; # 1つのworkerが同時に受け付けられる接続数
}
http {
# Webサーバー全体の設定
include /etc/nginx/mime.types; # mime設定 includeで別ファイルを読み込む
default_type application/octet-stream; # mimeの未定義分設定
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on; # ファイルの送信方式。性能向上
#tcp_nopush on;
keepalive_timeout 65; # 第一引数はサーバ側のタイムアウト、第二引数はクライアントに通知するタイムアウト
#gzip on;
include /etc/nginx/conf.d/*.conf;
# 静的サーバ
server {
listen 80; # 待ち受けるport番号
server_name localhost; バーチャルホストのサーバ名
location / { # urlでマッチしたら割り振る
alias /data/; # aliasは / が /data/ を参照するようにする。
}
}
}
ログファイル
デフォルトでは、/var/log/nginx/access.log
及び/var/log/nginx/error.log
に格納される。
毎日ローテートされ、52日で古いものから削除される。
uWSGI設定(django)
参考:
- https://qiita.com/yasunori/items/64606e63b36b396cf695
- https://docs.djangoproject.com/en/4.0/howto/deployment/wsgi/uwsgi/
- https://create-it-myself.com/know-how/construct-nginx-django-posgresql-by-docker-compose/
django設定
# djangoをインストール
pip install django
# siteディレクトリをプロジェクトフォルダとして作成
cd ~/site
django-admin startproject config .
uwsgi設定
# uwsgiをインストール
pip install uwsgi
# :8001で待ち受けるuWSGIを起動
cd ~/site
uwsgi --socket :8001 --module config.wsgi
uwsgiの起動は、uwsgi --ini uwsgi.ini
みたいに起動オプションをiniファイルに書いて起動もできる。
app_nginx.conf
conf.d/
にapp_nginx.conf
を配置する。
server {
listen 80;
server_name localhost;
charset utf-8;
location / {
uwsgi_pass 127.0.0.1:8001; # TCPsocketで接続
include uwsgi_params; # nginxデフォルトのuwsgi_paramsを使用
}
}
HTTPS設定
SSL/TLSプロトコルの仕組み
- スリーウェイハンドシェイクによりTCPセッションを開始する。
- クライアント: Client Helloメッセージを送る
- サーバ: Server Helloメッセージwithサーバー証明書and公開鍵を送る
- クライアント: 送られてきたサーバ証明書を有効か検証する
- クライアント: プリマスタシークレットを送信する
- サーバ: プリマスタシークレットを秘密鍵で復号する
- 双方で共通鍵を生成する。
- 共通鍵で暗号化し通信を行う。
スリーウェイハンドシェイク: SYN, SYN ACK, ACKと3つのメッセージをやり取りするコネクション確立方法
プリマスタシークレット: サーバから送られた公開鍵で暗号化した共通鍵の元となるデータ。
暗号化アルゴリズムを決めていれば、同じプリマスタシークレットから同じ共通鍵を生成できる。
サーバ証明書の生成
- 秘密鍵の生成 + CSRの生成
CSRには公開鍵が含まれる。
openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr
---
Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:(都道府県を英字で入力)
Locality Name (eg, city) [Newbury]:(市区町村を英字で入力)
Organization Name (eg, company) [My Company Ltd]:(組織名を英字で入力)
Organizational Unit Name (eg, section) []:(部署名を英字で入力)
Common Name (eg, your name or your server's hostname) []:sehippocampus.work(コモンネームを英字で入力)
Email Address []:(空白、エンターのみ入力)
---
- CSRの署名依頼
生成されたcsrファイルをCAに送ることで、審査後にサーバ証明書を発行してもらえる。
# pem形式の証明書確認
openssl x509 -in server.crt -text -noout
- 証明書と秘密鍵の配置
基本的に証明書はサーバ証明書・中間CA証明書・クロスルート証明書があるので、それらをまとめて1ファイルとして配置する。
cat server.crt chain.crt crossroot.crt > combined.crt
sudo chown combined.crt
sudo chmod 400 combined.crt
confにはssl_certificate
とssl_certificate_key
で証明書と密鍵を指定する。
server {
listen 443;
server_name sehippocampus.work;
ssl on;
ssl_certificate combined.crt;
ssl_certificate_key server.key;
}