React и nginx: отказано в подключении к localhost

У меня есть React (фронтенд) и Django REST (бэкенд), работающие на удаленном сервере Ubuntu с nginx. У меня также есть простой обратный прокси, определенный в conf.d/bookmarks.conf для управления всем этим:

server {
    listen 80;
    listen [::]:80;

    location /api/ {    # Backend
        proxy_pass http://127.0.0.1:1337/api/;

    }

    location / {    # Frontend
        root        /var/www/bookmarks/html/;
        index       index.html;
        try_files   $uri $uri/ /index.html;
    } 
}

Я запускаю свое приложение Django с помощью runserver python manage.py runserver 127.0.0.1:1337, и статические файлы React хранятся в папке, описанной выше

Я пытаюсь подключиться к API с помощью React:

const generateOpendIdLink = async () => {
      const generateOpendIdLinkEndpoint = 'http://127.0.0.1/api/opendid-link-generator/';
      const requestOptions = {
        method: 'GET',
        headers: {'Content-Type': 'application/json'},
      };

      try {
        const response = await fetch(generateOpendIdLinkEndpoint, requestOptions);
        if (response.status == 200) {
          ...
        };
      } catch (error) {
        console.log(error);
      };
    };

И получаем ошибку

GET http://127.0.0.1/api/opendid-link-generator/ net::ERR_CONNECTION_REFUSED

Это довольно странно, потому что я могу подключиться к API из Интернета без проблем: выполнение того же GET на IP-адресе сервера http://XX.XXX.XX.XX/api/opendid-link-generator/ из Postman работает, как ожидалось. Это также верно, когда я меняю 127.0.0.1 на IP-адрес сервера в коде React, все начинает работать

Я также установил ALLOWED_HOSTS = ['*'] в тестовых целях, пытаясь решить эту проблему, и это не помогло. Кто-нибудь знает, что может быть источником проблемы?

Я ничего не знаю о javascript, но позвольте мне попробовать:

const generateOpendIdLinkEndpoint = 'http://127.0.0.1/api/opendid-link-generator/';

В этом определении не указан порт! Скорее всего, он ищет порт http по умолчанию по адресу :80. Попробуйте включить порт и дайте мне знать!

JS-код выполняется на клиентском устройстве и поэтому не будет делиться localhost с приложением Django. Именно поэтому необходимо указать IP-адрес сервера.

Вернуться на верх