【问题标题】:Deploying nodejs project on nginx server在 nginx 服务器上部署 nodejs 项目
【发布时间】:2018-07-09 00:24:00
【问题描述】:

我已经搜索了整个互联网,但找不到任何答案。 我刚刚启动了自己的 nginx 服务器并正在部署一个 nodejs 项目,我在其中使用 angular 4 和 expressjs。当我在 nginx 中使用位置 '/' 时它工作正常,但是当我更改为 '/dbproject' 时它不起作用。

首先它没有在我的公共文件夹中找到 .js 文件,但是当我使用 ng build --deploy url = /dbproject 构建 angular 时,它找到了它,但后来我收到错误:

Uncaught SyntaxError: Unexpected token <
polyfills.bundle.js:1 Uncaught SyntaxError: Unexpected token <
styles.bundle.js:1 Uncaught SyntaxError: Unexpected token <
vendor.bundle.js:1 Uncaught SyntaxError: Unexpected token <
main.bundle.js:1 Uncaught SyntaxError: Unexpected token < .

奇怪的是,当我在 nginx 中使用位置“/”时,它工作正常。

这是 nginx 设置:

location /dbproject {
    proxy_pass http://localhost:3000;
    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;
}

这是 app.js 文件:

const express = require('express');
const path = require('path');
const bodyParser = require('body-parser');
const cors = require('cors');
const passport = require('passport');
const db = require('./config/db');
const app = express();

const users = require('./routes/users');
db.connect(db.MODE_PRODUCTION, function(err) {
  if (err) {
    console.log('Unable to connect to MySQL.')
    process.exit(1)
  } else {
    console.log("Connectad");
  }
});

// Port Number
const port = 3000;

// CORS Middleware
app.use(cors());

// Set Static Folder
app.use(express.static(path.join(__dirname, 'public')));


// Body Parser Middleware
app.use(bodyParser.json());

// Passport Middleware
app.use(passport.initialize());
app.use(passport.session());

require('./config/passport')(passport);

app.use('/users', users);

// Index Route
app.get('/', (req, res) => {
  res.send('Invalid Endpoint');
});


app.get('*', (req, res) =>{
  res.sendFile(path.join(__dirname, 'public/index.html'));
});
// Start Server
app.listen(port, () => {
  console.log('Server started on port '+port);
});

【问题讨论】:

标签: node.js angular express nginx nginx-location


【解决方案1】:

解决了。

之前:

location /dbproject {
    proxy_pass http://localhost:3000;
    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;
}

之后:

location /dbproject {
    proxy_pass http://localhost:3000/;
    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;
}

【讨论】: