Как заставить API, написанный на nodejs, запускаться по https - PullRequest
0 голосов
/ 21 февраля 2020

У меня есть приложение с пользовательским и административным интерфейсом, разработанное в svelte js. Они общаются друг с другом с помощью API, написанного на nodejs. Все это приложение развернуто в AWS на одном экземпляре ec2.

После установки сертификата ssl приложения пользователя и администратора работают как https, но API еще не https, поэтому приложения пользователя и администратора не взаимодействуют друг с другом.

До установки ssl все работало нормально.

У меня nginx работает на aws сервере.

Приложение пользователя работает на порту 80: https://www.example.com

Приложение администратора работает на порту 3000: https://www.example.com:3000

API в nodejs: http://www.example.com:8080

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Я бы предложил использовать nginx в качестве прокси и установить SSL-сертификат на этом уровне. Значение: nginx будет обслуживать сертификат SSL и обрабатывать все входящие соединения через порт 80/443. Затем вы можете перенаправить все входящие трафики c в ваши локальные node.js приложения соответственно:

Быстрый пример:

upstream myUIProxy {
  # ip_hash;
  server 127.0.0.1:3000;
  keepalive 8;
}

upstream myAPIProxy {
  # ip_hash;
  server 127.0.0.1:8080;
  keepalive 8;
}

# the nginx server instance

server {
  listen 80;
  listen [::]:80;
  server_name example.com www.example.com;

  return 301 https://example.com$request_uri;
}

server {
  listen 443 ssl;
  listen [::]:443 ssl;
  server_name example.com www.example.com;

  ssl on;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Host $http_host;
  proxy_set_header X-NginX-Proxy true;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_http_version 1.1;
  proxy_set_header Host $host;
  proxy_redirect off;

  location /api {
    proxy_pass http://myAPIProxy/;
  }

  location / {
    proxy_pass http://myUIProxy/;
  }
}
0 голосов
/ 21 февраля 2020

HTTPS-приложения не могут взаимодействовать по умолчанию с HTTP API (смешанный контент), также это небезопасно и является плохой практикой. Смотрите здесь: HTTPS и HTTP CORS

Вы можете попробовать настроить nginx прокси, но я предлагаю просто перенастроить ваш Node.js сервер API для использования https:

const https = require('https');
const fs = require('fs');

const options = {
  key: fs.readFileSync('key.pem'),
  cert: fs.readFileSync('cert.pem')
};

https.createServer(options, function (req, res) {
  res.writeHead(200);
  res.end("hello world\n");
}).listen(8000);

Более подробную информацию можно найти здесь:

https://nodejs.org/en/knowledge/HTTP/servers/how-to-create-a-HTTPS-server/

...