使用 nginx 处理 Express 子域

Handle Express Subdomain with nginx

我想知道如何处理基于 Expressjs 的项目中的子域。

这是我的 nginx 配置

server {
  listen 80;
  server_name           bee.local;

  access_log            /var/log/nginx/bee.local.access.log;
  error_log             /var/log/nginx/bee.local.error.log;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}

server {
  listen 80;
  server_name           api.bee.local;

  access_log            /var/log/nginx/bee.local.access.log;
  error_log             /var/log/nginx/bee.local.error.log;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header X-Forwarded-For $remote_addr;
  }
}

这是我的支持子域的路由器

router.get('/v1/', function(req, res, next) {
    res.status(200).json({ title: "title" });
});



app.use(subdomain('api', router));

问题是它正在渲染索引路由

我确实设置了 hosts 文件

我已经搜索了 3 个小时了,你能帮帮我吗:)

有几个要求:

  1. 在 nginx 中设置 主机 header 需要的域或代理(如果适用)
  2. 在处理端点的其他中间件之前使用子域中间件

工作示例:

nginx 配置:

server {
    listen       80;
    server_name  bee.local;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    listen       80;
    server_name  api.bee.local;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

具有硬编码主机的 nginx 配置 header 值:

我认为您没有正确设置主机 header。请尝试下一个配置

server {
    listen       80;
    server_name  bee.local;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
#        proxy_set_header Host      $host;
        proxy_set_header Host      bee.local;
    }
}

server {
    listen       80;
    server_name  api.bee.local;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
#        proxy_set_header Host      $host;
        proxy_set_header Host      api.bee.local;
    }
}

快递应用:

var subdomain = require('express-subdomain');
var express = require('express');
var app = express();

var router = express.Router();

router.get('/', function(req, res) {
  res.send('Welcome to our API!');
});

router.get('/users', function(req, res) {
  res.json([
    { name: "Brian" }
  ]);
});

app.use(subdomain('api', router));

app.get('/', function(req, res) {
  res.send('Homepage');
});

app.listen(3000);