2

我有一个通配符 DNS 条目,因此 *.mydomain.tld 被定向到我的服务器。我正在使用 nginx 我有 2 个名为的 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;
    }
}

我的配置文件:

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 加载默认定义的根目录
  • any.mydomain.tld 加载 myconf.conf 中定义的根目录

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

4

1 回答 1

4

在您的默认配置文件中,您必须default_server在两listen行中指定;另外,您需要删除该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服务器名称文档:

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

于 2013-05-01T22:21:39.487 回答