我在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中设置)。
提前致谢。我完全失去了!
答案 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;
}
}