Я использую Nginx Apache Reverse Proxy, у меня несколько VHOSTS, и я хочу обслуживать их все в одном файле nginx vhost с поддержкой SSL.
Мой серверный блок
server {
listen 80;
server_name _;
root /var/www/$host/web;
access_log /var/log/mylogs/httpd/$host/access.log;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://SERVERIP:8090;
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 ~ /\. {
deny all;
}
}
Это хорошо работает без SSL для всех сайтов, НО когда я делаю то же самое для поддержки SSL ниже:
server {
listen 80;
server_name _;
ssl on;
ssl_certificate /var/www/$host/ssl/$host-le.crt;
ssl_certificate_key /var/www/$host/ssl/$host-le.key;
root /var/www/$host/web;
access_log /var/log/mylogs/httpd/$host/access.log;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_pass http://MYIP:8090;
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 ~ /\. {
deny all;
}
}
У меня есть примерно такие ошибки
ssl_certificate /var/www/$host/ssl/$host-le.crt not found
nginx config test failed
Мои веб-файлы vhost находятся в этом формате
/var/www/domain1.com/web /var/www/domain2.com/web /var/www/domain3.com/web
и их сертификат ssl и ключи находятся в
/var/www/domain1.com/ssl /var/www/domain2.com/ssl /var/www/domain3.com/ssl
Пожалуйста, помогите мне, я новичок и все еще учусь ....
Использовать $ssl_server_name
переменная вместо $host
.
Его можно использовать, начиная с версии Nginx 1.15.9 и OpenSSL 1.0.2. http://nginx.org/ru/docs/http/ngx_http_ssl_module.html
ssl_certificate $ssl_server_name.crt;
ssl_certificate_key $ssl_server_name.key;