最初は、2つの異なるポートで2つのサービス(RadicaleとLMS)に対してNGINXを設定しました。私はこれを/etc/nginx/nginx.conf
。インターネットMYDOMAIN:8000
へのアクセスはそれぞれにリダイレクトされます。:8009
3001
Radicale
LMS
この機能を有効にするためにサーバーに証明書を設定し、sudo certbot --nginx -d MYDOMAIN
LetsEncrypt証明書の生成を実行しました。その後、私の証明書を無効にしました(プロファイルにエラーがないように設定しました)。
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
keepalive_timeout 65;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
# reduce logging
access_log off;
# access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
# include /etc/nginx/conf.d/*.conf;
# include /etc/nginx/sites-enabled/*;
auth_basic "NGINX";
auth_basic_user_file /etc/nginx/.htpasswd;
# old, before Certbot
# ssl_certificate ssl/server.crt;
# ssl_certificate_key ssl/server.key;
server {
server_name MYDOMAIN;
listen 8000 ssl;
location / {
proxy_pass http://localhost:8000;
proxy_set_header X-Script-Name /;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-User $remote_user;
proxy_set_header Host $http_host;
proxy_pass_header Authorization;
auth_basic "Nginx-Radicale - Password required";
}
# generated with: sudo certbot --nginx -d MYDOMAIN
ssl_certificate /etc/letsencrypt/live/MYDOMAIN/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/MYDOMAIN/privkey.pem; # managed by Certbot
}
server {
server_name MYDOMAIN;
listen 8009;
return 301 https://MYDOMAIN:3001;
}
server {
server_name MYDOMAIN;
listen 3001;
location / {
proxy_pass http://localhost:3000/;
auth_basic "NGINX";
}
}
}
これで設定を変更したので、きちんとした設定のためにserver
構成セクションをサブディレクトリに分割したいと思います。元のファイルを維持し、2つのファイルだけを調整したいとnginx/conf.d
思います。nginx.conf
pi@RPi64:/etc/nginx $ cat conf.d/radicale.conf
server {
server_name MYDOMAIN;
listen 8000;
# ssl;
location / {
proxy_pass http://localhost:5232;
proxy_set_header X-Script-Name /;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Remote-User $remote_user;
proxy_set_header Host $http_host;
proxy_pass_header Authorization;
auth_basic "Nginx-Radicale - Password required";
}
}
2番目のファイル:
pi@RPi64:/etc/nginx $ cat conf.d/LMS.conf
server {
server_name MYDOMAIN;
listen 8009;
return 301 https://MYDOMAIN:3001;
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/MYDMOAIN/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/MYDOMAIN/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
server_name MYDOMAIN;
listen 3001;
location / {
proxy_pass http://localhost:3000/;
auth_basic "NGINX";
}
}
ご覧のとおり、ssl
最初のファイルの対応するセクションをコメントアウトしました。そのままにすると、sudo nginx -t
証明書の欠落エラーが発生します。独自の証明書を設定する必要はありません。
certbot
また、実行を実行すると、2番目のファイルに5行が追加されていることがわかります。
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/MYDMOAIN/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/MYDOMAIN/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
私の考えでは、certbotがこのファイルでそれを見つけhttps
てそこに証明書を追加することに決めたようです。
しかし、サーバー全体、つまりサイト/ファイルの両方に証明書を追加したいと思います。
特に証明書の更新プロセスは定期的に行わなければならないので、手動でコピーすることがないようにしたいと思います。
Certbot
両方のファイルの証明書を挿入する方法を知っていますか?certbotが要件を認識する前に、私の証明書を追加する必要がありますか?
それとも、基本ファイルに証明書を追加するのが合理的ですかnginx.conf
?私は何が間違っていましたか?
答え1
私の解決策は以下を追加することですnginx.conf
。
server {
server_name MYDOMAIN
listen 443;
}
編集:もちろん、このサーバーは.conf
のように追加することもできますconf.d
。これにより、取り扱いが容易になります。
certbot --nginx -d MYDOMAIN
その後、次の行を実行しました。
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/MYDOMAIN/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/MYDOMAIN/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = MYDOMAIN) {
return 301 https://$host$request_uri;
} # managed by Certbot
server_name MYDOMAIN
listen 443;
listen 80;
return 404; # managed by Certbot
その後、この行を削除し、この部分を各ファイルに入れました。conf.d/
ssl_certificate /etc/letsencrypt/live/MYDOMAIN/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/MYDOMAIN/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
更新プロセスでは証明書自体のみが考慮されるため、/etc/letsencrypt
手動で変更することconf.d
をお勧めします。