ExpressJS始终为索引服务

时间:2019-03-09 18:35:37

标签: node.js reactjs express nginx static-files

所以我的React SPA有问题。我使用create-react-app创建了它,所有构建的文件(包括index.html,所有js,css和图像)都收集在build文件夹中。

服务器分为两部分。

首先是nginx Web服务器。

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 :(得分:0)

我最终切换到纯NGINX设置,并一起删除了节点服务器。 进入SSR后,我需要将其找回,但这将是另一回事。