정규화되지 않은 호스트 이름에 대해 nginx를 구성하는 방법은 무엇입니까?

정규화되지 않은 호스트 이름에 대해 nginx를 구성하는 방법은 무엇입니까?

nginx를 역방향 프록시로 설정하고 있습니다. 저는 이전에 가상 호스트 없이 Apache만 사용해왔습니다.

나는 사용자가 주소 표시줄에 서비스 이름을 입력하기만 하면 다양한 인트라넷 웹 서비스에 액세스할 수 있기를 원합니다. 예를 들어 "timesheets.intranet.local" 대신 "timesheets"를 입력합니다.

클라이언트 컴퓨터에서 "wget" 또는 브라우저를 사용하여 사이트(timesheets.intranet.local)의 FQDN에 액세스하면 모든 것이 정상입니다.

클라이언트 컴퓨터에서 "wget" 또는 브라우저를 사용하여 사이트(타임시트)의 일반 호스트 이름에 액세스하면 실패합니다.

nginx 서버 시스템에서 로컬로 "wget"을 사용하면 둘 다 잘 작동합니다.

내 사이트 구성은 다음과 같습니다.

server {
  server_name timesheets timesheets.intranet.local;

  location / {
    proxy_pass http://127.0.0.1:8080;
  }

  listen [::]:443 ssl ipv6only=on;
  listen 443 ssl;
  ssl_certificate /root/timesheet.crt;
  ssl_certificate_key /root/timesheet.key;
}

이름 확인은 문제가 되지 않습니다. 클라이언트 시스템의 "wget"은 IP 주소를 올바르게 확인하지만 여전히 페이지를 검색하지 못합니다.

답변1

역방향 프록시를 구성할 때는 프록시 구성뿐만 아니라 그 뒤에 있는 서비스 구성에도 주의를 기울여야 합니다.

프록시는 가상 호스트의 이름을 수락해야 할 뿐만 아니라 백엔드에 예상되는 호스트 헤더도 발행해야 합니다. 이 경우 가장 쉬운 방법은 정규화되지 않은 짧은 호스트 이름을 허용하도록 프록시와 백엔드를 모두 구성하는 것입니다.

다른 방법은 백엔드로 보내는 호스트 헤더 프록시를 재정의하는 것입니다. 그런 다음 해당 호스트 이름만 서버에 백엔드만 필요합니다. 이 답변 보기https://stackoverflow.com/questions/14352690/change-host-header-in-nginx-reverse-proxy

관련 정보