Nginx反向代理非侦听域捕获所有

时间:2013-05-21 14:29:13

标签: nginx reverse-proxy catch-all

使用nginx作为反向代理我已经注意到,如果某个站点指向服务器但实际上并不存在,那么您将获得服务器上的现有站点,而不是找不到域或类似的域。

说您的配置块正在侦听portal.test.org,用户将 cname 指向nginx系统,但域名为 smartportal。 test.org

或者说他们指向像 portal.test2.org

这样的网站

有人可以指导我以下

一个。 nginx如何确定当它不作为虚拟主机存在时返回哪个站点 湾如何捕获未指定的任何域并返回一个默认页面,告知用户此主机上不存在此域

希望有人可以帮助我尝试谷歌搜索,但我认为有时它知道正确的条款。

非常感谢

1 个答案:

答案 0 :(得分:1)

您应该使用listen指令和server_name指令的default_server参数。

你的问题

  • nginx如何确定哪个站点不作为虚拟主机存在时返回

      

    听[default_server]

         

    如果指令有default_server参数,那么封闭   server {...}块将是address:port的默认服务器   对。这对于您希望的基于名称的虚拟主机非常有用   为任何不匹配的主机名指定默认服务器块   server_name指令。如果没有指令   default_server参数,那么默认服务器将是第一个   服务器块,其中显示地址:端口对。

         
         

    服务器名称

         

    该指令执行两个操作:

         

    比较传入HTTP请求的Host头与   Nginx配置文件中的服务器{...}块并选择   第一个匹配。这就是定义虚拟服务器的方式。   服务器名称按以下顺序处理:

         

    1.-完整的静态名称

         

    2.-名称开头带有通配符的名称 - * .example.com

         

    3.-名称末尾带有通配符的名称 - www.example。*

         

    4.-带有正则表达式的名字

         

    如果没有匹配,则服务器{...}阻止   将根据以下顺序使用配置文件:

         

    1.-   具有匹配的listen指令的服务器块,标记为   [default | default_server]

         

    2.-具有匹配侦听的第一个服务器块   指令(或隐式监听80;)

  • 如何捕获未指定的任何域并返回一个默认页面,告知用户此主机上不存在此域

    server {
      listen 1.2.3.4:80 default_server;
      server_name _ "";
      location / {
        alias /var/www/html/domain-does-not-exists.html; 
       }
    }
    
    server {
      listen 1.2.3.4:80 ;
      server_name portal.test.org;
      location / {
          ... your site ...
       }
    }