一、Nginx のインストール#
- Nginx のアンインストール
sudo apt-get purge nginx nginx-common # Nginxをアンインストールし、設定ファイルを削除します。
apt install nginx
- Nginx の一般的なコマンド
nginx -s stop Nginxを迅速に停止し、関連情報を保存せずにwebサービスを終了します。
nginx -s quit Nginxをスムーズに停止し、関連情報を保存してwebサービスを終了します。
nginx -s reload Nginxの設定を変更したため、設定を再読み込みします。
nginx -s reopen ログファイルを再オープンします。
nginx -c filename Nginxにデフォルトの設定ファイルの代わりに指定の設定ファイルを指定します。
nginx -t 実行せずに設定ファイルをテストします。Nginxは設定ファイルの文法の正しさをチェックし、設定ファイルで参照されているファイルを開こうとします。
nginx -v Nginxのバージョンを表示します。
nginx -V Nginxのバージョン、コンパイラのバージョン、および設定パラメータを表示します。
毎回コマンドを入力したくない場合は、Nginx のインストールディレクトリに startup.bat という起動バッチファイルを新たに追加し、ダブルクリックで実行できます。内容は以下の通りです:
@echo off
rem 起動前にNginxが既に起動していてpidファイルが記録されている場合、指定されたプロセスをkillします
nginx.exe -s stop
rem 設定ファイルの文法の正しさをテストします
nginx.exe -t -c conf/nginx.conf
rem バージョン情報を表示します
nginx.exe -v
rem 指定された設定でNginxを起動します
nginx.exe -c conf/nginx.conf
Linux の場合は、以下のように書くと思いますが、正しいかどうかは未確認です。
#!/bin/sh
# 起動前にNginxが既に起動していてpidファイルが記録されている場合、指定されたプロセスをkillします
nginx -s stop
# 設定ファイルの文法の正しさをテストします
nginx -t -c conf/nginx.conf
# バージョン情報を表示します
nginx -v
# 指定された設定でNginxを起動します
nginx -c conf/nginx.conf
二、rsync を使用してpublic
フォルダーをサーバーにアップロード#
rsync -avuz --progress --delete public/ root@ipアドレス:/home/public/
前提として VPS にも rsync をインストールする必要があります;Mac には標準でツールが付属しており、Windows プラットフォームでは Fz クライアントを使用してファイルを同期します。
apt install rsync
三、SSL 証明書の取得#
- CerBot クライアントを取得
install certbot
- 証明書を取得
certbot certonly --webroot -w /var/www/example -d example.com -d www.example.com
このコマンドは example.com と www.example.com の 2 つのドメインに対して証明書を生成します。--webroot モードを使用すると、/var/www/example に.well-known フォルダーが作成され、このフォルダーにはいくつかの検証ファイルが含まれます。certbot は example.com/.well-known/acme-challenge にアクセスすることで、あなたのドメインがこのサーバーにバインドされているかを検証します。このコマンドはほとんどのケースでニーズを満たすことができますが、時には私たちのサービスのいくつかにはルートディレクトリがない場合があります。例えば、マイクロサービスなどです。この場合、--webroot を使用することはできません。certbot には別のモード --standalone があります。このモードでは、ウェブサイトのルートディレクトリを指定する必要はなく、サーバーの 443 ポートを自動的に有効にしてドメインの所有権を検証します。他のサービス(例えば Nginx)が 443 ポートを占有している場合は、これらのサービスを停止し、証明書が生成された後に再度有効にする必要があります。
certbot certonly --standalone -d example.com -d www.example.com
証明書が生成された後、/etc/letsencrypt/live/ ディレクトリ内に対応するドメインのフォルダーが表示され、その中に証明書へのショートカットが保存されています。
これで最初の証明書の生成が完了しました。次は、ウェブサーバーの設定を行い、HTTPS を有効にします。
四、nginx の nginx.conf ファイルの設定#
/etc/nginx ディレクトリ内
# 設定する最初の場所、ここでのユーザーはrootに変更する必要があります。そうしないと権限がない可能性があります。
user root;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
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;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
# httpの設定
server {
# 設定する2つ目の場所、80アクセスポート
listen 80 default_server;
listen [::]:80 default_server;
# 設定する3つ目の場所、ドメイン名
server_name blog.ryujinx.top;
rewrite ^(.*) https://$server_name$1 permanent; # 自動的にhttpからhttpsにリダイレクト
# 設定する4つ目の場所、ここでpublicフォルダーを指します
root /home/public;
include /etc/nginx/default.d/*.conf;
# 設定する5つ目の場所
location / {
root /home/public;
index index.html index.htm;
}
# 設定する6つ目の場所
error_page 404 /404.html;
location = /40x.html {
root /home/public;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# httpsの設定
server {
listen 443 ssl;
# 設定する7つ目の場所
server_name blog.ryujinx.top;
root /home/public;
# 設定する8つ目の場所
ssl_certificate /etc/letsencrypt/live/blog.ryujinx.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/blog.ryujinx.top/privkey.pem;
# 設定する9つ目の場所、私の書き方に従ってください
ssl_session_timeout 10m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
# 設定する10の場所
error_page 404 /404.html;
location = /404.html {
root /home/public;
}
include /etc/nginx/default.d/*.conf;
}
}
ポート 80 は http サービスの設定に使用され、ポート 443 は https サービスの設定に使用されます。これで Nginx の設定が完了しました。
設定が完了したら、設定ファイルを再読み込みします。
sudo nginx -s reload
Nginx サービスの実行状況を確認します。
sudo systemctl status nginx
Nginx サービスを再起動します。
sudo systemctl restart nginx
今後の記事の公開#
rsync を使用してpublic
フォルダーを同期するだけです。
注意事項#
1. SSL 証明書の自動更新#
SSL の有効期限は 90 日で、期限が切れると以下のコマンドで更新します。
certbot renew --dry-run
証明書を生成する際に--standalone
モードを使用した場合、ドメインを検証する際には443
ポートを有効にする必要があります。このエラーは、有効にする必要があるポートがすでに占有されていることを意味します。この場合、nginx
を一旦停止しなければなりません。実際にservice nginx stop
を実行すると、エラーは発生せず、すべての証明書が正常に更新されました。
# cronスクリプトを作成
touch certbot-auto-renew-cron
# ファイルに以下の内容を追加
15 2 * */2 * certbot renew --pre-hook "service nginx stop" --post-hook "service nginx start"
--pre-hook
このパラメータは、更新操作を実行する前に行う必要があることを示します。--standalone
モードの証明書があるため、nginx
サービスを停止してポートの占有を解除する必要があります。--post-hook
このパラメータは、更新操作が完了した後に行う必要があることを示します。ここでは Nginx サービスを再度有効にします。
最後に、crontab
を使用してこの定期タスクを開始します。
crontab certbot-auto-renew-cron
効率的な方法:npm の可視化インターフェースを使用して設定#
Docker-Compose で npm をインストール#
-
このような docker-compose.yml ファイルを作成します:
version: '3.8' services: app: image: 'jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt
-
スタックを起動するには、次のコマンドを実行します。
docker-compose up -d # docker-compose-pluginを使用している場合 docker compose up -d
-
管理 UI にログインします
http://localhost:81デフォルトの管理ユーザー:
Email: [email protected] Password: changeme
設定#
- detail ページに正しい IP を入力し、ブログのポートに 80 を入力し、すでに解析されているドメイン名を入力します。
- ssl タブで証明書を申請します。
- advanced にパスを入力します。
location / { root /data/xxxx.github.io; }
/data/xxxx.github.io は npm がインストールされたルートディレクトリからの相対パスで、対応するフォルダーに html フォルダーをアップロードします。
具体的な使い方は nginx location [PATTERN] を参照してください。