Nodejs nginx如何配置两个express应用分别在不同的二级目录下
Nodejs nginx如何配置两个express应用分别在不同的二级目录下
想实现的方法大概如下所示,有两个express应用分别在4000和5000端口,想在外网只通过80端口访问,通过不同的二级目录访问,比如
http://Domain/xxx
http://Domain/yyy
分别转发到4000和5000的应用上。 nginx的大概配置如下,可是目前通过这样访问expressjs会提示cannot get / 请问如何处理?
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 }
目前只有一个80端口对外暴漏,
搞定 location /app { rewrite /app/(.*) /$1 break; proxy_pass http://localhost:3000; proxy_redirect off; proxy_set_header Host $proxy_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }
楼主 我遇到相同的问题,也按照这种方式配置了。
location /app { rewrite /app/(.*) /$1 break; proxy_pass http://localhost:3000; … }
的确我访问 http://121.14.58.212/app 时跳转到我的主页了。 但是我主页需要的静态文件,全部404了。 我期望的应该是访问 http://121.14.58.212/app/style.css, 实际请求的地址为http://121.14.58.212/style.css
跪求告诉怎么解决
为了通过 Nginx 将两个 Express 应用分别部署在不同的二级目录下(如 /xxx
和 /yyy
),你需要正确配置 Nginx 的 location
块,并确保代理设置正确。当前配置中的问题在于 root
指令的使用是不必要的,因为 proxy_pass
已经指定了后端服务的位置。
以下是正确的 Nginx 配置示例:
server {
listen 80;
location /xxx {
proxy_pass http://127.0.0.1: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 /yyy {
proxy_pass http://127.0.0.1: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;
}
}
解释
-
监听 80 端口:Nginx 监听 80 端口,这意味着所有通过域名访问的请求都会被 Nginx 处理。
-
location /xxx
和location /yyy
:这两个配置块分别处理以/xxx
和/yyy
开头的请求。 -
proxy_pass
:将请求转发到对应的 Express 应用,注意在 URL 后面添加/
以确保路径正确拼接。 -
代理头设置:设置必要的 HTTP 头信息,以便后端应用可以获取客户端的真实信息。
通过上述配置,当用户访问 http://domain/xxx
时,请求会被转发到本地的 http://127.0.0.1:4000
;同样,访问 http://domain/yyy
时,请求会被转发到 http://127.0.0.1:5000
。