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-адрес сервера.