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

同じ server_name を使用する 2 つの server ステートメントを持つことはできません。両方が同じ仮想ホスト名を共有しているため、リクエストが来た場合に Nginx はどちらを使用するかわかりません。したがって、nginx は最初に一致したものを使用します。

設定スニレットから、ルートディレクトリはとにかくリダイレ​​クトを実行しているため役に立たないので、2番目のサーバーポート80ステートメントを削除できるようです(これは最初のサーバーステートメントでも同じです)

また、最初のサーバー 443 ステートメントも削除します。これにより、リダイレクト ループが発生します。

関連情報