簡體   English   中英

Nginx代理傳子域,節點vhost

[英]Nginx proxy pass subdomain, node vhost

我在 localhost 子域上的 nginx proxy_pass 重定向有一些問題。 我有一個域“domain.com”,我想在 *.localhost:9000 上重定向 *.domain.com 上的所有請求。 然后節點處理 *.localhost:9000 上的所有請求到好的快遞應用程序。

在 nginx conf 上,當我嘗試以下操作時:

server {
    server_name extranet.domain.com;
    listen 80;
    location / {
       proxy_pass http://extranet.localhost:9000;
    }
}

extranet.domain.com上的請求被很好地重定向到好的 express webapp。

有了這個:

server {
    server_name ~^(.*?)\.domain\.com$;
    listen 80;
    location / {
       proxy_pass http://localhost:9000/$1;
    }
}

localhost:9000上運行的 Express 應用程序處理請求 /mysubdomainname,這意味着正則表達式很好。

但是當我嘗試:

server {
    server_name ~^(.*?)\.domain\.com$;
    listen 80;
    location / {
       proxy_pass http://$1.localhost:9000;
    }
}

*.domain.com 上的所有請求都返回 http 代碼 502。為什么http://localhost:9000/$1; 有效而不是http://$1.localhost:9000; ? (所有子域都在/etc/hosts中設置)。

提前致謝。 我完全迷路了!

當主機名在運行時未知時,nginx 必須使用它自己的 resolver 與操作系統提供的解析器不同,它不使用您的/etc/hosts文件。

也許這會給你一個提示,我想將子域從 Nginx 傳遞到 Express 應用程序。 這是我的代碼:

配置文件

http {

upstream express {
  server localhost:3000;
}

nginx/sites-available 中的 domain.com

server {

listen 80;
server_name ~^(?<subdomain>.+)\.domain\.com$;

location / {
   proxy_set_header Subdomain $subdomain;
   proxy_set_header Host $host;
   proxy_pass http://express;
 }
}

Express 應用 index.js

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

app.get('/', function (req, res) {
    const subdomain = req.headers.subdomain;
});

app.listen(3000, function () {
  console.log('Example app listening on port 4000!');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM