Nginx,第二个子域不工作

我使用了CNAME通配符DNS条目,如:

@ IN A ip.add.re.ss www IN CNAME @ * IN CNAME @ 

我的根domain.com和sub1.domain.com是可访问的(在同一个digitalocean飞沫)。
但是,如果我尝试访问sub2.domain.com,在Web服务器configuration后,它将我带到sub1.domain.com。
我正在使用Nginx服务器块,并且所有域都使用相同的IP地址。 (我已经在80上configuration了domain.com,而我访问/configurationsub1.domain.com:8088和sub2.domain.com:8088)

sub1是phpmyadmin:

 server { listen 8088; server_name phpmyadmin.mydomain.com; root /usr/share/nginx/html/phpmyadmin; index index.php index.html index.htm; access_log /var/log/nginx/phpmyadmin/access.log; error_log /var/log/nginx/phpmyadmin/error.log; if (!-e $request_filename) { rewrite ^/(.+)$ /index.php?url=$1 last; break; } # Images and static content is treated different location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ { access_log off; expires 360d; } location ~ /\.ht { deny all; } location ~ /(libraries|setup/frames|setup/libs) { deny all; return 404; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } 

}

sub2是统计:

 server { listen 8088; server_name stats.mydomain.com; root /usr/share/nginx/html/piwik; index index.php piwik.php; access_log /var/log/nginx/piwik/access.log; error_log /var/log/nginx/piwik/error.log; location ~ /\.ht { deny all; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } 

}

我的/ etc / hosts:

 127.0.0.1 localhost mydomain ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 

打在浏览器phpmyadmin.mydomain.com:8088工作正常,但击中stats.mydomain.com:8088带我到phpmyadminlogin页面。 我是否需要为多个子域创build更多的A或CNAMElogging?

如果你已经重新加载你的configuration( nginx -s reload )并且没有任何改变,那么我会怀疑一些default_server技巧。 我们来看看文档 。

nginx只testing请求的头部字段“主机”,以确定请求路由到哪个服务器。 如果它的值不匹配任何服务器名称,或者请求根本不包含这个头域,那么nginx会将请求路由到这个端口的默认服务器。

基本上,这意味着如果没有server{}为您的请求提供处理,它将被转移到默认服务器。 既然你没有明确地设置一个…

在上面的configuration中[见文档中的例子],默认服务器是第一个 – 这是nginx的标准默认行为。

在你的情况下,“第一台服务器”是phpMyAdmin,因为“p”在字母表中的“s”(stats)之前。 会发生什么是:

  • 您的请求是对stats.mydomain.com
  • 统计信息server{}块不提供与您的URI匹配的任何位置块。
  • nginx将请求转发到默认服务器,即phpMyAdmin

从那里 :

  • phpMyAdmin可以处理请求,或…
  • 它不能,导致404或403错误。

由于以下的configuration…

 if (!-e $request_filename) {} 

… phpMyAdmin server{}能够处理任何请求,因为它将所有错误的重写为index.php请求。 您被redirect到login页面,因为这是默认的phpMyAdmin页面,当它无法处理$_GET['url']参数。

为了确认这个理论,只需要在你的statsconfiguration中添加default_server到监听端口:

 listen 8088 default_server; 

如果行为改变了,那么你就可以确定。 下一步就是调查日志。 您的统计信息configuration可能与您的实际目录结构不匹配,导致404或403错误(首先导致请求被转发到默认服务器phpMyAdmin)。