Добрый день, подскажите как правильно настроить Nginx, при следующем:
Одна www директория для всех сайтов т.е. все сайты работают с одной CMS расположенной в var/www/html
Много доменов - на данный момент около 10, потенциально десятки-сотни.
Домены могут быть как с SSL, так и без.
- Можно ли как-то динамически подхватывать сертификаты при наличии их в определенном каталоге или для каждого домена нужно отдельно прописать?
- Может быть можно как-то сделать, чтобы конфигурационный файл не был таким огромным инклудить настройки из определенной папки в которой складывать настройки для доменов?
- Может быть можно как-то настроить так, что при добавлении сайта(домена) не нужно было править конфиг файл?
Ubuntu 18.04
Nginx version: nginx/1.14.0 (Ubuntu)
built with OpenSSL 1.1.1 11 Sep 2018
TLS SNI support enabled
Вот так сейчас выглядит конфиг:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
# SSL configuration
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name _;
set $sathost $host;
if ($host~^(www\.)?(.+)$) {
set $sathost $2;
}
ssl_certificate /var/crt/$sathost/certificate.crt;
ssl_certificate_key /var/crt/$host/certificate.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
keepalive_timeout 60;
add_header Strict-Transport-Security 'max-age=604800';
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
fastcgi_param HTTPS on;
}
location ~ /\.ht {
deny all;
}
}
ни $sathost, ни $host, ни $server_name в пути до сертификатов не работают и выдают ошибку:
nginx: [emerg] SSL_CTX_use_PrivateKey_file("/var/crt/$host/certificate.key") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/var/crt/$host/certificate.key','r') error:20074002:BIO routines:file_ctrl:system lib error:140B0002:SSL routines:SSL_CTX_use_PrivateKey_file:system lib)
nginx: configuration file /etc/nginx/nginx.conf test failed
UPDATEВы не можете использовать переменные в каждой директиве. ssl_certificate рассматривается как буквальная строка и является одной из многих директив, где переменные не поддерживаются.
Собственно, похоже такое решение не работает.