nginx服务器\u名称通配符或全包
我有一个运行nginx的实例,它服务于多个网站。第一个是服务器IP地址上的状态消息。第二个是nginx服务器\u名称通配符或全包,nginx,catch-all,server-name,Nginx,Catch All,Server Name,我有一个运行nginx的实例,它服务于多个网站。第一个是服务器IP地址上的状态消息。第二个是admin.domain.com上的管理控制台。这些很好用。现在,我希望所有其他域请求都转到单个index.php——我有大量的域和子域,在nginx配置中列出它们是不切实际的 到目前为止,我已经尝试将server\u name设置为*,但由于无效的通配符而失败*.在我添加其他服务器块之前有效,然后我猜它与它们冲突 在定义了其他站点之后,是否有办法在nginx中运行catch-all服务器块 注意,我不是
admin.domain.com
上的管理控制台。这些很好用。现在,我希望所有其他域请求都转到单个index.php
——我有大量的域和子域,在nginx配置中列出它们是不切实际的
到目前为止,我已经尝试将server\u name
设置为*
,但由于无效的通配符而失败<代码>*.在我添加其他服务器块之前有效,然后我猜它与它们冲突
在定义了其他站点之后,是否有办法在nginx中运行catch-all服务器块
注意,我不是垃圾邮件发送者,这些是真正的网站,有有用的内容,它们只是由数据库中相同的CMS提供支持 将“全部捕获”服务器块中的“侦听”选项更改为该选项。(添加
default\u server
)这将占用所有未定义的连接(在指定端口上)
如果文件或文件夹不存在,则要将所有内容推送到index.php
try_files $uri /$uri /index.php;
根据,还可以通过listen指令中的**default\u server**参数明确设置默认服务器
这将起作用:
server_name ~^(.+)$
按照惯例,下划线用作默认服务器的服务器名称 从 在catch all服务器示例中,可以看到奇怪的名称“\u1”:
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 80 default_server;
server_name _;
return 444;
}
这个名字没有什么特别之处,它只是无数>无效域名中的一个,这些域名从不与任何真实名称相交。也可以使用其他>无效名称,如“-”和“!@#”
请注意,
server\u name代码>本身是不够的。上述示例之所以有效,是因为listen
指令中的default\u server
。对我来说,define default\u server不起作用。我用计算机解决了它
server_name ~^.*$
使用all的正则表达式。仅1server
指令
从
默认的_server参数(如果存在)将导致服务器
成为指定地址:端口对的默认服务器。如果没有
其中一个指令具有默认的_server参数,然后是第一个
具有地址:端口对的服务器将是此服务器的默认服务器
配对
如果您只有1个server
指令,该指令将处理所有请求,则无需设置任何内容
多个服务器
指令
如果要将所有请求与指定的server
指令匹配,只需将default\u server
参数添加到listen
,Nginx将使用此server
指令作为默认指令
server {
listen 80 default_server;
}
关于server\u name\u代码>
从
在catch all服务器示例中,可以看到奇怪的名称“\u1”:
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 80 default_server;
server_name _;
return 444;
}
这个名字没有什么特别之处,它只是众多名字中的一个
不与任何真实名称相交的无效域名。
也可以使用其他无效名称,如“-”和“!@#”
无论您设置了什么服务器名
,它只是一个无效域名现在您可以使用掩码:
server {
listen 80;
server_name *.example.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
查看此处的更多信息:如果您还希望捕获带有空主机
头的请求(HTTP/1.0中允许使用此头),则可以同时使用regex和空服务器名称
:
server {
listen 80;
server_name ~. "";
}
尝试$http\u主机
server {
server_name $http_host;
}
非常好,非常感谢。我无法使用server\u name
对于IP地址上的状态页面,我必须指定服务器名称x.x.x.x
,但这没关系!添加default\u服务器
在nginx 1.4.6上似乎不起作用,nginx 1.4.6目前是Ubuntu 14.04的最新版本。。。添加它时,configtest
命令返回一个错误,重新启动服务器也不起作用。我用Debian jessie在我的服务器上尝试了完全相同的配置,它有nginx 1.6.2,并且工作得非常好。因此,如果您使用的是1.4.6,请尝试另一个版本……HTTPS的旁注:default\u server
指令还设置了将处理该端口上请求的SSL握手的服务器。因此,如果您希望服务器块A处理SSL,而服务器B充当HTTPS的catchall,那么解决方案是在服务器B上设置server\u name~ ^(+.+)$
。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。该链接仅作为参考提供。上面的两行实际上就是答案:简单地将下划线作为server_name的值将产生所需的“catch all”行为。这个答案不是真的。参考资料清楚地表明,除非你的配置中也有listen 80 default\u server
,否则这将不起作用。另请参见。也许我误解了文档,但“这个名称没有什么特别之处,它只是无数无效域名中的一个,从不与任何真实名称相交。其他无效名称如“-”和“!@#”可以同样使用。”因此,\u
只是一个无效的名称?服务器名称~。
似乎更有效。这对我来说更有效。无论出于何种原因,我无法让默认服务器工作,它覆盖了我的所有其他vHost。尝试了所有投票率更高的选项,这是唯一有效的。注意:我正在尝试使用它的IP地址和URL访问服务器。最好将其用作主要来源