여러 하위 도메인이 있는 nginx 역방향 SSL 프록시

여러 하위 도메인이 있는 nginx 역방향 SSL 프록시

현재 상황에 대한 상위 수준 구성 예를 찾으려고 합니다. 여러 내부 IIS 서버에 있는 여러 하위 도메인에 대한 와일드카드 SSL 인증서가 있습니다.

site1.example.com (X.X.X.194) -> IISServer01:8081
site2.example.com (X.X.X.194) -> IISServer01:8082
site3.example.com (X.X.X.194) -> IISServer02:8083

하나의 서버 항목을 통해 들어오는 SSL 트래픽을 처리한 다음 특정 도메인을 내부 IIS 응용 프로그램에 전달하려고 합니다. 두 가지 옵션이 있는 것 같습니다.

  1. 각 하위 도메인에 대한 위치 섹션을 코딩합니다(내가 찾은 예에서 보면 지저분해 보입니다).

  2. 각 하위 도메인 호스트 이름에 대해 서로 다른 서버 항목으로 구성된 동일한 nginx 서버로 암호화되지 않은 트래픽을 다시 전달합니다. (적어도 이것은 옵션인 것 같습니다).

나의 궁극적인 목표는 SSL 트래픽의 대부분을 nginx를 통과하도록 통합하여 HAProxy를 사용하여 서버의 로드 밸런싱을 수행하는 것입니다.

Proxy_set_header 항목을 올바르게 설정하면 nginx 내에서 접근 방식 2가 작동합니까?

나는 최종 구성 파일 내에서 다음과 같은 내용을 구상합니다(접근 방법 #2 사용).

server {
  listen Y.Y.Y.174:443; #Internally routed IP address
  server_name *.example.com;

  proxy_pass http://Y.Y.Y.174:8081;
}

server {
  listen Y.Y.Y.174:8081;
  server_name site1.example.com;

  -- NORMAL CONFIG ENTRIES --

  proxy_pass http://IISServer01:8081;
}

server {
  listen Y.Y.Y.174:8081;
  server_name site2.example.com;

  -- NORMAL CONFIG ENTRIES --

  proxy_pass http://IISServer01:8082;
}

server {
  listen Y.Y.Y.174:8081;
  server_name site3.example.com;

  -- NORMAL CONFIG ENTRIES --

  proxy_pass http://IISServer02:8083;
}

이것은 방법인 것 같지만 이것이 최선의 방법인지는 확실하지 않습니다. 이에 대한 더 간단한 접근 방식이 누락 되었습니까?

답변1

나는 다음과 같이 할 것입니다 (nginx 1.4.2로 테스트했는데 작동하는 것 같습니다):

server {
  listen 127.0.0.1:443 ssl;
  server_name site1.example.com;

  include common.conf;

  location / {
    proxy_pass http://127.0.0.2:8081;
  }
}

server {
  listen 127.0.0.1:443 ssl;
  server_name site2.example.com;

  include common.conf;

  location / {
    proxy_pass http://127.0.0.2:8082;
  }
}

server {
  listen 127.0.0.1:443 ssl;
  server_name site3.example.com;

  include common.conf;

  location / {
    proxy_pass http://127.0.0.3:8083;
  }
}

적어도 다음과 같습니다 common.conf.

ssl on;
ssl_certificate  /path/to/cert;
ssl_certificate_key  /path/to/key;

답변2

믿거나 말거나 다음과 같이 할 수 있습니다.

ssl_session_cache shared:SSL:2m;
ssl_session_timeout 5m;

server {
    listen Y.Y.Y.174:443 default_server ssl;
    server_name _;
    ssl_certificate /etc/pki/tls/certs/server.chained.crt;
    ssl_certificate_key /etc/pki/tls/private/server.key;
}

server {
    listen Y.Y.Y.174:443 ssl;
    server_name site1.example.com;
    [...]
    proxy_pass http://IISServer01:8081;
}

server {
    listen Y.Y.Y.174:443 ssl;
    server_name site2.example.com;
    [...]
    proxy_pass http://IISServer01:8082;
}

server {
    listen Y.Y.Y.174:443 ssl;
    server_name site3.example.com;
    [...]
    proxy_pass http://IISServer02:8083;
}

포함되지 않으며 인증서는 메모리에 한 번만 로드되며 사용자가 하위 도메인에서 하위 도메인으로 이동할 때에도 세션이 캐시된 상태로 유지되므로 핸드셰이크 성능이 많이 절약됩니다.

그 외에는 문서를 찾을 수 없습니다.이 서버 오류 게시물이것이 왜 작동하는지 제안하기 위해 노력했지만 실제로 작동한다고 확신할 수 있습니다.

관련 정보