nginx catchall conf文件没有捕获所有

Posted

技术标签:

【中文标题】nginx catchall conf文件没有捕获所有【英文标题】:nginx catchall conf file not catching all 【发布时间】:2013-04-25 23:08:07 【问题描述】:

我有一个通配符 DNS 条目,因此 *.mydomain.tld 被定向到我的服务器。 我正在使用 nginx 我有 2 个 conf 文件,标题为:

默认 myconf.conf

我的 conf 文件如下所示:

默认值:

server 
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/website;
    index index.html index.htm;

    server_name _;

    location / 
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.html;
    

myconf.conf:

server 
    listen 80; 
    #listen [::]:80 default_server ipv6only=on;

    root /home/me/www/website;
    index index.php index.html index.htm;

    # Make site accessible from http://localhost/
    # orig # server_name localhost;
    server_name me.mydomain.tld;

    access_log /home/me/logs/me.mydomain.tld.access.log;
    error_log /home/me/logs/me.mydomain.tld.error.log warn;

    location /  
        try_files $uri $uri/ $uri.php?$args;
       
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ 
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    

当我如下浏览域时,这些是加载的 conf 文件。

me.mydomain.tld 加载 myconf.conf 中定义的根目录 mydomain.tld 加载默认定义的根目录 anything.mydomain.tld 加载 myconf.conf 中定义的根目录

默认值不应该是包罗万象的,出了什么问题? any.mydomain.tld 应该在默认的 conf 文件中加载根目录。

【问题讨论】:

【参考方案1】:

在您的默认配置文件中,您必须在两个listen 行上指定default_server;另外,您需要删除 server_name 行:

server 
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/website;
    index index.html index.htm;

    #server_name _;

    location / 
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.html;
    

您用于server_name 的下划线实际上不是通配符(如果这是您的意图)。来自 nginx Server Names 文档:

这个名字没有什么特别之处,它只是无数与任何真实姓名不相交的无效域名之一。其他无效名称,如“--”和“!@#”也可以同样使用。

【讨论】:

以上是关于nginx catchall conf文件没有捕获所有的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 MPEG DASH 流式传输和捕获 MP4 文件?

Wordpress Permalinks - NGINX Conf (没有指定输入文件错误)

[NGINX] - 配置文件优化 - NGINX.CONF

Nginx 可以缓存 conf 文件吗? [关闭]

找到我的 nginx 实际使用的 nginx.conf 文件

Nginx详细教程