Originalmente, eu tinha o NGINX configurado para dois serviços (Radicale e LMS) em duas portas diferentes. Eu fiz isso em /etc/nginx/nginx.conf
. Os acessos de MYDOMAIN:8000
e :8009
para 3001
a internet são redirecionados para Radicale
e LMS
respectivamente.
Configurei certificados no servidor para habilitar isso e, em seguida, corri sudo certbot --nginx -d MYDOMAIN
para gerar certificados letsencrypt. Depois desativei meus próprios certificados (eu só tive que configurá-los para tornar o arquivo de configuração livre de erros).
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";
}
}
}
Agora mudei minha configuração e queria dividir a server
parte da configuração em nginx/conf.d
subdiretório para ter uma configuração limpa. Eu queria deixar o original nginx.conf
como vem e apenas ajustar meus próprios dois arquivos:
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";
}
}
e segundo arquivo:
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";
}
}
Como você pode ver eu comentei a ssl
parte no primeiro arquivo. Se deixei entrar sudo nginx -t
estava dando o erro de falta de certificados. Eu queria evitar ter que configurar meus próprios certificados.
Além disso, você pode ver que a execução certbot
adicionou cinco linhas ao meu segundo arquivo:
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
Acho que o certbot encontrou o https
neste arquivo e decidiu adicionar os certs lá.
No entanto, eu queria adicionar certificados para todo o servidor - ou seja, ambos os sites/arquivos.
Especialmente porque o processo de renovação dos certificados deve ser feito regularmente, eu queria ter certeza de que não há cópia manual envolvida.
Como posso dizer Certbot
para inserir certificados para ambos os arquivos? Preciso adicionar meus próprios certificados primeiro para que o certbot reconheça o requisito?
Ou faria sentido adicionar os certificados ao nginx.conf
arquivo principal? Estou fazendo algo errado?
Minha solução foi adicionar o seguinte a
nginx.conf
:EDIT: É claro que também é possível adicionar este servidor como um
.conf
arquivoconf.d
. Isso facilita o manuseio.Então eu corri
certbot --nginx -d MYDOMAIN
o que colocou as seguintes linhas:Eu então apaguei essas linhas e coloquei essa parte em cada arquivo no meu
conf.d/
Acho que o processo de renovação considerará apenas os certificados em si
/etc/letsencrypt
e, portanto, a correção manual noconf.d
deve estar bem.