-1

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

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

或者说他们指向一个像portal.test2.org这样的网站

有人可以指导我以下

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

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

非常感谢

4

1 回答 1

3

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

你的问题

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

    听 [default_server]

    如果指令具有 default_server 参数,则封闭的 server {...} 块将是 address:port 对的默认服务器。这对于基于名称的虚拟主机很有用,您希望为不匹配任何 server_name 指令的主机名指定默认服务器块。如果没有带有 default_server 参数的指令,则默认服务器将是出现 address:port 对的第一个服务器块。


    服务器名称

    该指令执行两个操作:

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

    1.- 完整的静态名称

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

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

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

    如果没有匹配,将根据以下顺序使用配置文件中的 server { ... } 块:

    1.- 带有匹配监听指令的服务器块标记为 [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 ...
       }
    }
    
于 2013-05-26T15:31:44.777 回答