Nginx代理传递子域,节点vhost

时间:2016-08-19 10:21:35

标签: node.js nginx subdomain

我在localhost子域上使用nginx proxy_pass重定向时遇到了一些麻烦。我有一个域名“domain.com”,我想将* .domain.com上的所有请求重定向到* .localhost:9000。然后节点将* .localhost:9000上的所有请求处理到好的快速应用程序。

在尝试以下内容时,在nginx conf上:

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

extranet.domain.com上的请求被很好地重定向到好的快速webapp。

有了这个:

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

在localhost上运行的Express应用程序:9000句柄请求/ 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中设置)。

提前致谢。我完全失去了!

2 个答案:

答案 0 :(得分:2)

如果在运行时不知道主机名,则nginx必须使用其own resolver。与操作系统提供的解析程序不同,它不使用您的{ "took": 34, "timed_out": false, "_shards": { "total": 5, "successful": 5, "failed": 0 }, "hits": { "total": 1, "max_score": 1, "hits": [ { "_index": "google", "_type": "PSAD_Primary", "_id": "383701291_MAM_2016-01-06", "_score": 1, "_source": { "metrics": [ { "id": "Metric1", "value": 70 }, { "id": "Metric2", "value": 90 }, { "id": "Metric3", "value": 120 } ], "primary": true, "ticketId": 1, "pliId": 221244, "bookedNumbers": 15000, "ut": 1452061800000, "startDate": 1451629800000, "endDate": 1464589800000, "tz": "EST" } } ] }, "aggregations": { "by_metrics": { "doc_count": 3, "metric1_only": { "doc_count": 1, "by_metric_id": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, "buckets": [ { "key": "Metric1", "doc_count": 1, "total_delivery": { "value": 70 } } ] } } } } } 文件。

答案 1 :(得分:1)

也许这会给你一个提示,我想把子域名从Nginx传递给Express应用程序。这是我的代码:

nginx.conf

:any

domain.com里面的nginx / sites-available

http {

upstream express {
  server localhost:3000;
}

Express app index.js

server {

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

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