Как исправить «Cannot POST /index.html» в Nginx, Express и NodeJS - PullRequest
0 голосов
/ 06 мая 2019

Я настраиваю свой проект MERN на моем производственном сервере, и, убедившись, что вы можете вручную ввести URL-адрес (например, myproject.com/dashboard), я добавил следующую строку в раздел server моего файла конфигурации Nginx try_files $uri /index.html; чтобы разрешить это (как указано в тренинге реакции-маршрутизатора страница ).Это теперь вызвало следующий ответ при попытке войти в систему Cannot POST /index.html.

Если я удаляю строку, все вызовы API работают (я могу войти снова), но я не могу ввести URL вручную.

Я пытался переместить строку try_files в начало раздела server, если раздел сервера чувствителен к этому.

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name myproject.com;
    root /home/forge/myproject.com/client/build;
    ...
    location / {
        try_files $uri /index.html;
        proxy_pass http://127.0.0.1:8080;
    }
    ...
}
const express = require('express');

const app = express();

app.use( express.static( `${__dirname}/client/build` ) );

app.use('/api/users', usersRouter);
app.use('/api/playlists', playlistRouter);


app.get('*', (req, res) => {
    res.sendFile(`${__dirname}/client/build/index.html`);
});

Я ожидаю, что смогу войти (сделатьзвонки на мой API) и введите URL-адреса для моего проекта.

1 Ответ

1 голос
/ 06 мая 2019

Я думаю, что ваша конфигурация неверна. В вашей конфигурации, если запрошенный файл не существует, вы отправляете файл index.html, несмотря ни на что. Никогда не буду звонить по доверенности.

Поскольку ваш сервер имеет префикс /api, настройте его на своем сервере nginx следующим образом. Поэтому запрос, начинающийся с /api, будет прокси-сервером вашего внутреннего сервера.

server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  server_name myproject.com;
  root /home/forge/myproject.com/client/build;

  location /api/ {
    proxy_pass http://127.0.0.1:8080;
  }

  location / {
    try_files $uri /index.html;
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...