这是我第一次尝试在生产中设置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 conf文件,它是我与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按预期启动。
我怎么解决这个问题?
答案 0 :(得分:0)
我找到了解决方案,所以在这里!
它来自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