我有一台运行 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
}