Nodejs 用nginx带两个express怎么做?
Nodejs 用nginx带两个express怎么做?
nginx配置应该怎么写 我大概在http里面加了 location /xxx{ root /home/aaa/xxx; proxy_pass http://127.0.0.1:4000; }
location /yyy{ root /home/aaa/yyy; proxy_pass http://127.0.0.1:5000 }
怎么取不到public里面的css文件?
要在Nginx中使用两个Express应用,并确保能够正确访问静态文件(如CSS),你需要对Nginx的配置进行一些调整。下面是一个详细的步骤说明和示例代码。
Nginx 配置
首先,确保你的Nginx配置文件(通常位于 /etc/nginx/nginx.conf
或 /etc/nginx/conf.d/default.conf
)包含以下内容:
server {
listen 80;
server_name yourdomain.com;
location /xxx {
alias /home/aaa/xxx;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 如果你的Express应用监听的是4000端口
proxy_pass http://127.0.0.1:4000;
}
location /yyy {
alias /home/aaa/yyy;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 如果你的Express应用监听的是5000端口
proxy_pass http://127.0.0.1:5000;
}
}
Express 应用
确保每个Express应用都正确地设置了静态文件服务。例如:
应用1 (监听4000端口)
const express = require('express');
const path = require('path');
const app = express();
// 设置静态文件路径
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'views', 'index.html'));
});
app.listen(4000, () => {
console.log('App listening on port 4000');
});
应用2 (监听5000端口)
const express = require('express');
const path = require('path');
const app = express();
// 设置静态文件路径
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'views', 'index.html'));
});
app.listen(5000, () => {
console.log('App listening on port 5000');
});
关键点解释
alias
vsroot
: 使用alias
而不是root
可以更好地处理路径映射。- 静态文件服务: 确保每个Express应用都能正确地提供静态文件(如CSS、JS文件)。使用
express.static
方法来实现这一点。 - 代理设置: 在Nginx配置中使用
proxy_set_header
来传递必要的HTTP头信息,以便Express应用能正确识别客户端请求。
通过上述配置,你应该能够正确地将请求转发到相应的Express应用,并且能够访问到静态资源文件。
文件也用nginx代理吧…
参数和环境总要说清楚了才能知道是怎么回事吧?
这样就可以了, 很简单的
upstream nodejs.server {
server 127.0.0.1:3200;
server 127.0.0.1:3300;
server 9.125.240.43:3200;
server 9.125.240.43:3300;
server 9.125.240.43:3400;
server 127.0.0.1:3400 backup;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://nodejs.server;
proxy_redirect off;
}
啊我现在是在NAT后方, 只有一个端口给我使用是3000, 所以我的nginx跑在3000上, 然后两个express, 一个跑在4000, 一个跑在5000; 想用nginx通过url来实现到不同的端口, 就跟我上面写的那个意思差不多。。 express在/home/aaa/下 一个是/home/aaa/xxx,另外一个是/home/aaa/yyy 然后这个要怎么配置呢? css文件那些拿不到。
谢谢啦, 可以用。。。
不行额, 我有两个应用额, 只有一个端口, 不能都跑到location /下 css那些静态文件还是加载不了
最終rewrite url搞定
怎么搞定的啊?能贴配置文件看看嘛,我现在也遇到这样问题了
怎么搞定的啊?能贴配置文件看看嘛,我现在也遇到这样问题了 求解释啊 啊 啊啊 啊
要在Nginx中配置两个Express应用,并确保静态资源能够正确访问,你需要正确设置Nginx的配置文件。以下是一个详细的示例,包括如何配置Nginx以代理到两个不同的Express应用,并确保静态文件能够被正确访问。
Nginx 配置
假设你有两个Express应用分别运行在端口4000和5000上,你想通过路径/xxx
和/yyy
来访问它们,并且每个应用都有一个名为public
的目录用于存放静态资源(如CSS文件)。
Nginx 配置文件示例
http {
upstream app_4000 {
server 127.0.0.1:4000;
}
upstream app_5000 {
server 127.0.0.1:5000;
}
server {
listen 80;
server_name yourdomain.com;
location /xxx {
proxy_pass http://app_4000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 确保静态文件可以被正确访问
location /xxx/public {
alias /home/aaa/xxx/public;
try_files $uri $uri/ =404;
}
}
location /yyy {
proxy_pass http://app_5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 确保静态文件可以被正确访问
location /yyy/public {
alias /home/aaa/yyy/public;
try_files $uri $uri/ =404;
}
}
}
}
解释
- Upstream: 定义了后端服务器组,这样可以简化配置。
- Server: 定义了监听的端口和域名。
- Location /xxx 和 /yyy: 这些定义了如何处理不同的请求路径,并将它们代理到相应的Express应用。
- Alias: 用于指定静态文件的实际路径,确保静态文件(如CSS文件)可以被正确访问。
示例Express应用
为了确保你的Express应用能够正确地提供静态文件,你可以使用Express内置的中间件express.static
。
示例代码
// xxx应用
const express = require('express');
const path = require('path');
const app = express();
// 提供静态文件
app.use('/public', express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.send('Hello from xxx application!');
});
app.listen(4000, () => {
console.log('Application running on port 4000');
});
// yyy应用
const app2 = express();
// 提供静态文件
app2.use('/public', express.static(path.join(__dirname, 'public')));
app2.get('/', (req, res) => {
res.send('Hello from yyy application!');
});
app2.listen(5000, () => {
console.log('Application running on port 5000');
});
以上配置应该能帮助你在Nginx中代理两个Express应用,并确保静态文件能够被正确访问。