2013-05-01 3 views
2

У меня есть подстановочная запись DNS, поэтому * .mydomain.tld направляется на мой сервер. Я использую Nginx У меня есть 2 конф файлов под названием:nginx catchall conf file not catching all

  • по умолчанию
  • myconf.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

Что-то не так, что по умолчанию это не так? anything.mydomain.tld должен загружать корневой каталог в файле conf по умолчанию.

ответ

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 Server Names документации:

Там нет ничего особенного в этом имени, это только один из множества недействительных доменных имен, которые никогда не пересекаются с любым реальным именем. Также могут использоваться другие недопустимые имена, такие как «-» и «! @ #».