Здравствуйте.
Есть сервер c Ubuntu 20.04, на нем установлены пакеты nginx и certbot. Также на этом сервере запускается doker-контейнер vaultwarden.
Контейнер запускается с настройками:
sudo docker run -d --name vaultwarden -e \
DOMAIN=https://под.домен.ру -e SIGNUPS_ALLOWED=false \
-v /vw-data/:/data \
-e WEBSOCKET_ENABLED=true \
-p 80:80 -p 3012:3012 --restart on-failure \
vaultwarden/server:latest
В nginx конфиг прописан следующий:
server {
server_name под.домен.ру; # managed by Certbot
location / {
proxy_pass http://под.домен.ру:80;
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 $scheme;
}
location /notifications/hub {
proxy_pass http://под.домен.ру:3012;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /notifications/hub/negotiate {
proxy_pass http://под.домен.ру:80;
}
# Optionally add extra authentication besides the ADMIN_TOKEN
# If you don't want this, leave this part out
location /admin {
# See: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
auth_basic "Private";
auth_basic_user_file /path/to/htpasswd_file;
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 $scheme;
proxy_pass http://под.домен.ру:80;
}
location /.well-known/acme-challenge {
root /var/www/letsencrypt;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl http2; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/под.домен.ру/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/под.домен.ру/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
# if ($host = под.домен.ру) {
# return 301 https://$host$request_uri;
# } # managed by Certbot
# listen 80 ;
# listen [::]:80 ;
# server_name под.домен.ру;
# return 404; # managed by Certbot
}
С таким великолепием Vaulwarden работает. Но не работает естественно, редирект с http на https (насколько мне хватает знаний, из-за закоменченного if ($host = под.домен.ру) { return 301
https://$host$request_uri; } . Если его раскомментить, то редиректа все-равно нет, но VW по http работает, а по https - нет.
Также при этом конфиге, если попробовать обновить сертификат (хотя бы в тестовом режиме)
certbot renew --dry-run
То появляется ошибка верификации:
...
IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: под.домен.ру
Type: unauthorized
Detail: Invalid response from
http://под.домен.ру/.well-known/acme-challenge/nLO...
Для того, чтобы оно не появлялось, я вкрячил в конфиг nginx
location /.well-known/acme-challenge {
root /var/www/letsencrypt;
}
И для certbot указал
certbot -w /var/www/letsencrypt
Соответственно, если остановить контейнер, то certbot нормально отрабатывает. Поэтому и хотелось бы понять - где я ошибся в конфиге? И что нужно сделать для того, чтобы и certbot работал, и контейнер vaultwarden?
P.S. Я пробовал запускать контейнер с разными вариантами, например, указывая порт -p 8080:80, и правя конфиг nginx на
http://под.домен.ру:8080, но при таком раскладе либо VW не работает, либо nginx не перезапускается.