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 語句,因為根目錄是無用的,因為您無論如何都在進行重新導向(這與第一個伺服器語句相同)

同時刪除第一個 server 443 語句,因為這會導致重定向循環到自身。

相關內容