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개의 서버 문을 가질 수 없습니다. Nginx는 요청이 들어올 경우 어느 것을 사용해야 할지 알 수 없습니다. 둘 다 동일한 가상 호스트 이름을 공유하기 때문입니다. 따라서 nginx는 첫 번째 일치 항목을 사용합니다.

구성 조각에서 두 번째 서버 포트 80 문을 삭제할 수 있는 것 같습니다. 어쨌든 리디렉션을 수행하고 있기 때문에 루트 디렉터리는 쓸모가 없기 때문입니다(첫 번째 서버 문에서도 동일함).

또한 첫 번째 서버 443 문을 삭제하세요. 이렇게 하면 자체적으로 리디렉션 루프가 발생하게 됩니다.

관련 정보