Я создал сайт, который использует Rest API для получения всех своих данных.Мой сайт защищен сертификатом SSL.Файл по умолчанию (etc/nginx/sites-enabled/default
) выглядит следующим образом:
server {
listen 80;
server_name example.com;
rewrite ^/(.*) https://example.com/$1 permanent;
}
server {
listen 443 ssl;
listen [::]:80 default_server;
root /var/www/example;
index index.html;
server_name example.com;
ssl_certificate /root/example.com.crt;
ssl_certificate_key /root/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
try_files $uri $uri/ =404;
}
}
Проблема заключается в том, что мой API отдыха (откуда я получаю все свои данные) должен иметь также сертификат SSL для безопасной передачи всех данных вмой веб-сайт.
![enter image description here](https://i.stack.imgur.com/I0GyP.png)
Я создал еще один блок сервера для остальных API в моем файле по умолчанию (etc/nginx/sites-enabled/default
).Это выглядит так:
server {
listen 8877;
server_name example.com;
rewrite ^/(.*) https://example.com:8877/$1 permanent;
}
server {
listen 443 ssl;
listen [::]:8877 default_server;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name example.com;
ssl_certificate /root/example.com.crt;
ssl_certificate_key /root/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
proxy_pass http://example.com:1111;
}
}
Я знаю, что я должен объединить их так:
server {
listen 80ssl;
listen 8877 ssl;
index index.html index.htm index.nginx-debian.html;
server_name example.com;
ssl_certificate /root/example.com.crt;
ssl_certificate_key /root/example.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
// DO SOMETHING
}
}
Проблема в том, что мне нужен блок местоположения, чтобы функционировать по-разному как на порту 80, так и напорт 8877. На порту 8877 блок местоположения должен указывать на мой проект NodeJS, который работает в фоновом режиме proxy_pass http://example.com:1111;
.На порту 80 он не должен указывать на мой проект NodeJS.Как я могу это сделать?
Или есть лучшие способы сделать это?Я застрял на 2 дня с этой проблемой.Покупка второго домена или SSL-сертификата не возможна + мой ceritifcate поддерживает несколько портов в одном домене.