【问题标题】:React not starting with node.js behind Nginx Reverse Proxy反应不是从 Nginx 反向代理后面的 node.js 开始
【发布时间】:2017-03-30 18:59:56
【问题描述】:

这是我第一次尝试在生产环境中设置 Node.js 服务器(除了一个 Meteor 服务器),我遇到了一个我自己无法解决的问题。

我构建了一个使用 React 的应用程序。这是服务器代码:

// Import part
var react = require('react');
var express = require('express');
var hogan = require('hogan-express');

// Express
const app = express()
app.engine('html', hogan)
app.set('views', __dirname + '/views')
app.use('/', express.static(__dirname + '/public'))
app.set('port', (process.env.PORT || 8100))

app.get('*',(req, res) => {
    res.status(200).render('index.html')
})

我根据https://www.digitalocean.com/community/tutorials/how-to-set-up-a-node-js-application-for-production-on-ubuntu-16-04 设置了所有内容,即使用 pm2 管理服务器并将 Nginx 配置为反向代理。这是我的 nginx 配置文件,它是我使用 Meteor 和 React 的副本:

upstream node {
    server localhost:8100;
}

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

    server_name subdomain.example.com;
    server_tokens off;

    access_log /var/log/nginx/node_access.log;
    error_log /var/log/nginx/node_error.log;

    location / {
        client_max_body_size 0;
        gzip off;
        proxy_read_timeout 300;
        proxy_connect_timeout 300;
        proxy_redirect off;
        proxy_http_version 1.1;
        proxy_set_header    Host            $http_host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-Proto   $scheme;
        proxy_pass http://node;
    }
}

一方面,当我点击 subdomain.example.com 时,我的 index.html 页面没有使用 React。另一方面,当使用 subdomain.example.com:8100 时,React 会按预期启动。

我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js reactjs nginx


    【解决方案1】:

    我找到了解决方案,所以就在这里!

    它来自 nginx,它需要访问一些不允许访问的文件。在我的 error_log 中,我得到了那个踪迹:

    *1 open() "/var/lib/nginx/proxy/3/00/0000000003" failed (13: Permission denied) while reading upstream
    

    使用 Google 将我带到此页面 https://github.com/dockerfile/nginx/issues/4,它为我提供了解决方案:

    chown -R www-data:www-data /var/lib/nginx
    

    【讨论】:

      最近更新 更多