在子目录中使用NGINX的多个节点应用程序

tnkciper  于 2023-11-17  发布在  Nginx
关注(0)|答案(2)|浏览(188)

我目前有一个数字海洋水滴连接到一个域。在服务器上,我正在运行NGINX,并试图反向代理多个节点应用程序到它。目前,我的根目录有一个node express应用程序,位置/。
我正在尝试将另一个node express应用程序连接到另一个子目录。下面是nginx配置文件:

  1. server {
  2. listen 80;
  3. server_name servername.com;
  4. # my root app
  5. location / {
  6. proxy_pass http://127.0.0.1:6001;
  7. proxy_http_version 1.1;
  8. proxy_set_header Upgrade $http_upgrade;
  9. proxy_set_header Host $host;
  10. proxy_cache_bypass $http_upgrade;
  11. }
  12. # new app
  13. location ~^ /newapp {
  14. proxy_pass http://127.0.0.1:6002;
  15. proxy_http_version 1.1;
  16. proxy_set_header Upgrade $http_upgrade;
  17. proxy_set_header Host $host;
  18. proxy_cache_bypass $http_upgrade;
  19. }
  20. }

字符串
问题是,新应用程序试图从/newapp中提供文件,这是破坏。我想这可能是我的app.js文件中的东西,可以在新应用程序中使用Express,将基本目录设置为/newapp/ -以提供静态文件和路由。如何做到这一点?
在newapp中,我提供静态文件如下:

  1. // Serve files out of ./public
  2. app.use(express.static(__dirname + '/public'));


并将路由文件设置为:

  1. var index = require('./routes/index');
  2. app.use('/', index);


索引路由文件:

  1. var express = require('express');
  2. var router = express.Router();
  3. // Get index page
  4. router.get('/', function(req, res, next) {
  5. res.render('index', {
  6. index : 'active'
  7. });
  8. });
  9. module.exports = router;

bqujaahr

bqujaahr1#

首先,如果你不需要,不要使用regexp location。使用简单的location。关于你的问题-将/放在proxy_pass URI的末尾。Nginx会将/newapp/xxx重写为/xxx,反之亦然(例如,对于http重定向)。但是(!)不会重写HTML主体中的链接。

  1. location /newapp/ {
  2. proxy_pass http://127.0.0.1:6002/;
  3. proxy_http_version 1.1;
  4. proxy_set_header Upgrade $http_upgrade;
  5. proxy_set_header Host $host;
  6. proxy_cache_bypass $http_upgrade;
  7. }

字符串

42fyovps

42fyovps2#

我也遇到过同样的问题:子目录中有NGINX的多个节点应用程序。我使用了下面的代码。它工作正常。

  1. location /smtest {
  2. rewrite ^/smtest/(.*) /$1 break;
  3. proxy_set_header Host $host;
  4. proxy_set_header X-Real-IP $remote_addr;
  5. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  6. proxy_set_header X-Forwarded-Proto $scheme;
  7. proxy_pass http://localhost:1234/;
  8. }

字符串

相关问题