所以nginx-1.15.9已于近期发布,并进行了以下更改:
功能:“ssl_certificate”和“ssl_certificate_key”指令中的变量支持。
我设置了一个实例,其中有多个域指向以下服务器块。我正在使用脱水自动生成证书并将其保存在各自的文件夹中。
然而,尽管尝试了几种变体并在谷歌上搜索各种解决方案,我还是无法成功识别“ssl_certificate”和“ssl_certificate_key”指令中的变量。
- 已验证证书已正确生成(使用 fullchain.pem 和 privkey.pem)
- 我直接导航到 https URL 时遇到的错误:安全连接失败
- 如果我将“$server_name”更新为包含证书的实际域文件夹,则 https 可以完美运行
如果有人能查看我的服务器块以确定我做错了什么或指出正确的方向,我将不胜感激。谢谢。
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
# ssl on;
ssl_certificate /etc/dehydrated/certs/$server_name/fullchain.pem;
ssl_certificate_key /etc/dehydrated/certs/$server_name/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
答案1
确保您使用的是$ssl_server_name
而不是,$server_name
并且 Nginx 对您的证书具有读取权限。
我做了一个使用 LetsEncrypt 进行完整编写. 在你的情况下它看起来应该是这样的:
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
# ssl on;
ssl_certificate /etc/dehydrated/certs/$ssl_server_name/fullchain.pem;
ssl_certificate_key /etc/dehydrated/certs/$ssl_server_name/privkey.pem;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}