如何在nginx中将子域作为代理传递值传递?

如何在nginx中将子域作为代理传递值传递?,nginx,reverse-proxy,proxypass,Nginx,Reverse Proxy,Proxypass,我目前的情况是,我需要获取/捕获子域,并在Nginx配置中将该子域值传递给proxy_pass e、 g 如果用户输入 http://google.com.mydomain.com 然后它应该做代理传递 proxy_pass http://www.google.com/; 在上面的例子中,google.com是子域 这是可行的吗? 如何在nginx中实现类似的功能 目前我正在使用配置,其中子域值在配置文件中硬编码,但有许多子域,所以我需要这样做,但不知道正确的语法 server {

我目前的情况是,我需要获取/捕获子域,并在Nginx配置中将该子域值传递给proxy_pass

e、 g

如果用户输入

http://google.com.mydomain.com
然后它应该做代理传递

proxy_pass http://www.google.com/;
在上面的例子中,
google.com
子域

这是可行的吗? 如何在nginx中实现类似的功能

目前我正在使用配置,其中子域值在配置文件中硬编码,但有许多子域,所以我需要这样做,但不知道正确的语法

server {
    listen       80;
    server_name  subdomain.domain.com;
    charset utf-8;

    location / {
      proxy_pass http://www.subdomain/;
    }
}
我使用*作为记录,将所有子域重定向到我的web主机,即通配符DNS

更新:

我从中找到了代码片段

但是请求显示的是我的默认页面,它位于我的默认web根目录中。

两件事

1-解析程序(nginx的dns服务器,用于解析google.com,您可以在主机上添加,也可以添加解析程序语句)

2-您需要解决您的客户将如何处理不同的域,我的意思是google.com不同于google.com.ar或google.fr)

在这个例子中,我为你的例子google.com做了一些工作

worker_processes 4;

error_log /var/log/nginx/error.log;

events {
  worker_connections  1024;
}

http {

  server {
    listen       80;

    location / { 
      set $subdomain ""; 

      if ($host ~* "^(.+)\.domain.com$") {
        set $subdomain $1; 
      }   
      resolver 8.8.8.8;
      proxy_pass "http://$subdomain.com";

    }   
  }
}
我希望此配置对您有所帮助。

两件事

1-解析程序(nginx的dns服务器,用于解析google.com,您可以在主机上添加,也可以添加解析程序语句)

2-您需要解决您的客户将如何处理不同的域,我的意思是google.com不同于google.com.ar或google.fr)

在这个例子中,我为你的例子google.com做了一些工作

worker_processes 4;

error_log /var/log/nginx/error.log;

events {
  worker_connections  1024;
}

http {

  server {
    listen       80;

    location / { 
      set $subdomain ""; 

      if ($host ~* "^(.+)\.domain.com$") {
        set $subdomain $1; 
      }   
      resolver 8.8.8.8;
      proxy_pass "http://$subdomain.com";

    }   
  }
}

我希望此配置对您有所帮助。

如果定义了变量,我将使用映射捕获子域,然后使用代理传递:

map $host $subdomain {
    ~^(?<sub>.+)\.[^\.]+\.[^\.]+$ $sub;
}

server {          
    listen 80 default_server;
    server_name  _;

    location / {
        if ($subdomain) {
            proxy_pass http://$subdomain;   
        }                             
    }                                                              
}
map$host$子域{
~^(?.+)\.[^\.]+\.[^\.]+$$sub;
}
服务器{
监听80个默认_服务器;
服务器名称;
地点/{
if($子域){
代理传递http://$子域;
}                             
}                                                              
}

如果变量定义为:

map $host $subdomain {
    ~^(?<sub>.+)\.[^\.]+\.[^\.]+$ $sub;
}

server {          
    listen 80 default_server;
    server_name  _;

    location / {
        if ($subdomain) {
            proxy_pass http://$subdomain;   
        }                             
    }                                                              
}
map$host$子域{
~^(?.+)\.[^\.]+\.[^\.]+$$sub;
}
服务器{
监听80个默认_服务器;
服务器名称;
地点/{
if($子域){
代理传递http://$子域;
}                             
}                                                              
}

这看起来可能是XY问题的一种情况:。这是一个不同寻常的要求。为什么不直接为子域服务呢?究竟情况如何?很可能有一个比你所想的要好得多的解决方案about@Dayo感谢您的回复,我想使用nginx作为我想要的任何域的反向代理,因此,如果我输入它,应该将代理传递到ebay.com并充当reverese代理,并获得ebay.com页面。希望这有帮助。这将不会与几乎任何域。特别是像谷歌或eBayth这样的“大”公司,这看起来可能是XY问题的一个例子:。这是一个不同寻常的要求。为什么不直接为子域服务呢?究竟情况如何?很可能有一个比你所想的要好得多的解决方案about@Dayo感谢您的回复,我想使用nginx作为我想要的任何域的反向代理,因此,如果我输入它,应该将代理传递到ebay.com并充当reverese代理,并获得ebay.com页面。希望这有帮助。这将不会与几乎任何域。尤其是像google或ebayDo这样的“大”域名服务器,不要使用公开访问的DNS服务器,如
8.8.8.8
。说得好!,这是一个例子,应该对他有用,但如果你想避免dns欺骗,最好的方法是拥有自己的dns在我的情况下,另一个有用的语法是proxy_pass“http://$subdomain.domain.com”;不要使用可公开访问的DNS服务器,如
8.8.8.8
。说得好!,这是一个例子,应该对他有用,但如果你想避免dns欺骗,最好的方法是拥有自己的dns在我的情况下,另一个有用的语法是proxy_pass“http://$subdomain.domain.com”;