Tak*_*Tak 105 nginx catch-all server-name
我有一个nginx运行实例,它服务于几个网站.第一个是服务器IP地址上的状态消息.第二个是管理控制台admin.domain.com.这些工作很棒.现在我想要所有其他域请求转到单个index.php- 我有很多域和子域,并且在nginx配置中列出它们是不切实际的.
到目前为止,我已经尝试设置server_name到*,但未能作为一个无效的通配符.*.*直到我添加其他服务器块,然后我猜它与它们冲突.
有没有办法在定义其他网站后在nginx中运行catch-all服务器块?
NB我不是垃圾邮件发送者,这些是真正的有用内容的网站,它们只是来自数据库中的相同CMS!
Mat*_*ias 134
在catch-all服务器块中更改listen选项.(添加default_server)这将采用所有未定义的连接(在指定端口上).
listen 80 default_server;
Run Code Online (Sandbox Code Playgroud)
如果你想将一切都推送到index.php,如果文件或文件夹不存在;
try_files $uri /$uri /index.php;
Run Code Online (Sandbox Code Playgroud)
jp.*_*oux 55
一个简单的下划线也可以:
server_name _;
Run Code Online (Sandbox Code Playgroud)
资料来源:http://nginx.org/en/docs/http/server_names.html
com*_*tos 24
这将有效:
server_name ~^(.+)$
Run Code Online (Sandbox Code Playgroud)
Ste*_*ing 11
server指令default_server 参数(如果存在)将使服务器成为指定地址:端口对的默认服务器。如果所有指令都没有 default_server 参数,那么具有地址:端口对的第一个服务器将是该对的默认服务器。
如果您只有 1 个server指令,它将处理所有请求,您无需设置任何内容。
server指令如果要将所有请求与指定server指令匹配,只需在 中添加default_server参数listen,Nginx 将server默认使用该指令。
server {
listen 80 default_server;
}
Run Code Online (Sandbox Code Playgroud)
server_name _;来自Nginx 文档
在包罗万象的服务器示例中,可以看到奇怪的名称“_”:
Run Code Online (Sandbox Code Playgroud)server { listen 80 default_server; server_name _; return 444; }这个名字没有什么特别之处,它只是无数从不与任何真实名称相交的无效域名之一。同样可以使用其他无效名称,如“--”和“!@#”。
不管server_name你设置了什么,它只是一个无效的域名。
小智 10
对我来说,某种程度上定义default_server无法正常工作.我解决了
server_name ~^.*$
Run Code Online (Sandbox Code Playgroud)
使用正则表达式.
现在您可以使用掩码:
server {
listen 80;
server_name *.example.org;
...
}
server {
listen 80;
server_name mail.*;
...
}
Run Code Online (Sandbox Code Playgroud)
在这里查看更多:http : //nginx.org/en/docs/http/server_names.html
如果您还想捕获带有空标头的请求(在HTTP/1.0Host中允许),您可以同时使用 regex 和 empty :server_name
server {
listen 80;
server_name ~. "";
}
Run Code Online (Sandbox Code Playgroud)