ExpressJS всегда обслуживает индекс - PullRequest
0 голосов
/ 09 марта 2019

Итак, у меня проблема с моим реагирующим SPA. Я создал его, используя create-react-app, и все встроенные файлы (включая index.html, все js, css и изображения) собраны в папке build.

Сервер настроен на две части.

Сначала это веб-сервер nginx.

server {
    listen 443 ssl ;

    server_name beta.frpgame.ru;
    ssl_certificate /etc/letsencrypt/live/frpgame.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/frpgame.ru/privkey.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';

    access_log /home/malkav/demiurge/client/logs/access.log;
    error_log  /home/malkav/demiurge/client/logs/error.log;

    location / {
        proxy_pass http://localhost:5000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    }
}

server {
    listen 80;
    server_name beta.frpgame.ru;
    rewrite ^/(.*) https://beta.frpgame.ru/$1 permanent;
}

Второй - это сервер ExpressJS, к которому подключается сервер nginx.

const express = require('express');
const path = require('path');
const compression = require('compression');
const port = process.env.NODE_PORT || 5000;
const app = express();

app.use(compression());
app.use(express.static(path.join(__dirname, 'build')));

app.get('/*', function (req, res) {
    res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

app.listen(port);
console.log('App is listening on port ' + port);

Когда вы загружаете веб-сайт в браузере (имя хоста указано в списке), он выглядит довольно нормально, изображения и сценарии работают как положено. Но при первой загрузке и после нового развертывания может потребоваться 2 или 3 попытки. Я считаю, что это потому, что статические файлы на сервере по какой-то причине недоступны по прямой ссылке. Если вы попытаетесь загрузить файл image или css / js, вы получите index.html.

Я уже пробовал насмехаться с порядком строк в server.js, но без особого результата. Изменение на app.get('/' ... тоже ничего не меняет.

1 Ответ

0 голосов
/ 11 марта 2019

Я закончил тем, что переключился на чистую установку NGINX и полностью удалил сервер узла. Мне нужно будет вернуть его, как только я доберусь до ССР, но это будет другая история.

...