nginx:[警告] 服务器名称冲突

nginx:[警告] 服务器名称冲突

我一直无法弄清楚为什么会出现这个错误:

nginx:[警告] 0.0.0.0:80 上冲突的服务器名称“stage.mydomain.com”,已忽略 nginx:[警告] 0.0.0.0:443 上冲突的服务器名称“stage.mydomain.com”,已忽略

我的启用站点的符号链接文件如下所示。我对此不是很熟悉,但我是唯一了解服务器的人。这是从生产中复制过来的。我看到端口 80 和 443 是重复的,但每个块中的配置都有一些差异。

server {
  listen        80;
  server_name   stage.mydomain.com;
  return       301 https://stage.mydomain.com$request_uri$is_args;
}

server {
  listen         80;
  server_name    stage.mydomain.com;
  location '/.path/here' {
          default_type "text/plain";
          root /home/username/www/app_name/current/public;
  }
  return         301 https://stage.mydomain.com$request_uri$is_args;
}

server {
  listen 443;
  ssl on;
  ssl_certificate     /a/path/to/my/file.pem;
  ssl_certificate_key /a/path/to/my/key.pem;
  ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
  ##ssl_ciphers         HIGH:!aNULL:!MD5;
  ssl_ciphers "randomstuffhere";
  ssl_prefer_server_ciphers on;
  client_max_body_size 32000M;
  server_name    stage.mydomain.com;
  return       301 https://stage.mydomain.com$request_uri;
}


server {
  listen 443;
  ssl on;
  ssl_certificate     /a/path/to/my/file.pem;
  ssl_certificate_key /a/path/to/my/key.pem;
  ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
  ##ssl_ciphers         HIGH:!aNULL:!MD5;
  ssl_ciphers "randomstuffhere";
  ssl_prefer_server_ciphers on;
  client_max_body_size 32000M;
  server_name    stage.mydomain.com;
  root /home/username/www/app_name/current/public;   # <--- be sure to point to 'public'!
  passenger_enabled on;
  rails_env staging;
}

答案1

您不能让 2 个服务器语句使用相同的 server_name。如果收到请求,Nginx 不知道该使用哪一个,因为两个语句共享相同的虚拟主机名。因此 nginx 将使用第一个匹配项。

从您的配置片段看来,您可以删除第二个服务器端口 80 语句,因为根目录是无用的,因为无论如何您都在执行重定向(这与第一个服务器语句相同)

另外删除第一个服务器 443 语句,因为这会导致其自身的重定向循环。

相关内容