Nginx 不提供 JavaScript 文件

Nginx 不提供 JavaScript 文件

我有一台运行 Nginx 的服务器,并且在同一服务器块中有两个位置。我将其用作我的 node.js express 应用程序的反向代理。

/etc/nginx/sites-available/example.com

server {

server_name example.com www.example.com;

location / {
    proxy_pass http://localhost:8000;
    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 /otherapp{
    root /home/ubuntu/otherapp;
    proxy_pass http://localhost:4444;
    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;
}
...

在 www.example.com 位置上运行的应用程序按预期运行,所有 css 和 js 文件都加载。但在 www.example.com/otherapp 位置,html 文件已提供,但 js 加载失败,状态为 404。浏览器向https://example.com/index.js

/otherapp 的 Express 代码

const express = require('express');
const app = express();

//things for express
app.use(express.static(__dirname+'/public')); //static directory


//qrcode is base route
app.get('/qrcode', function(req, res){
    res.sendFile(__dirname+'/public/index.html')
});


//start server
var port = 4444;
var ip;
if(process.env.NODE_ENV == "production"){
    ip = 'serverip';
}
else{
    ip = 'localhost';
}
app.listen(port, ip, function(){
    console.log(`starting server on ${ip}:${port}`)
});

/home/ubuntu/otherapp/public/index.html

...
<script src="./index.js"></script>
...

index.js 与 index.html 位于同一文件夹中

我怎样才能解决这个问题?

答案1

代替

app.use(express.static(__dirname+'/public'));

我会用:

app.use('/public', express.static(__dirname+'/public'));

虽然这在开发过程中非常有用,因为我除了 NodeJS 之外没有其他 Web 服务器。否则,我宁愿使用 Nginx 提供静态文件,例如:

location /otherapp/public {
    root /home/ubuntu/otherapp;
}

location /otherapp {
    proxy_pass http://localhost:4444;
    xxx
}

相关内容