자체 서명된 인증서를 사용하여 NGINX를 백엔드 서버로 역방향 프록시하는 방법은 무엇입니까?

자체 서명된 인증서를 사용하여 NGINX를 백엔드 서버로 역방향 프록시하는 방법은 무엇입니까?

저는 웹 서버와 OpenVPN 액세스 서버(자체 웹 인터페이스 포함)를 갖춘 소규모 네트워크를 보유하고 있습니다. 공용 IP가 1개만 있고 하위 도메인을 웹 서버(예: website1.domain.com, website2.domain.com)의 웹사이트로 가리키고 하위 도메인 vpn.domain.com을 웹 인터페이스 서버로 가리키고 싶습니다. OpenVPN 액세스용.

인터넷 검색 끝에 가장 좋은 방법은 프록시 서버를 설정하는 것이라고 결정했습니다. NGINX는 "proxy_pass" 기능을 통해 이 작업을 수행할 수 있는 것 같습니다. HTTP 백엔드 URL(웹사이트)에서 작동하도록 했는데, HTTPS를 강제하기 때문에 OpenVPN 액세스 서버 웹 인터페이스에서는 작동하지 않습니다. 저는 HTTPS에 만족하며 웹 서버에서 호스팅되는 웹사이트에 HTTPS를 선호합니다. 기본값은 자체 서명된 인증서입니다. 이미 설치되어 있으므로 자체 서명된 인증서도 사용하고 싶습니다. 다른 웹사이트의 경우.

자체 서명된 인증서를 어떻게 "수락"합니까? 백엔드 서버의 경우? 인증서를 생성해야 한다는 것을 알았습니다. NGINX 역방향 프록시 구성에서 이를 정의하지만 이것이 어떻게 작동하는지 이해하지 못합니다. 예를 들어 OpenVPN 서버에 이미 SSL 인증서가 설치되어 있습니다. 다음을 통해 OpenVPN 웹 인터페이스에 액세스할 수 있습니다.https://direct.ip.address.here/admin그런데 크롬을 통해 웹 인터페이스에 접속하려고 하면 '이 사이트는 보안 연결을 제공할 수 없습니다.' 페이지가 나타납니다.

내 NGINX 역방향 프록시 구성:

server {
  listen        443;
  server_name   vpn.domain.com;

  ssl_verify_client off;

  location / {
    # app1 reverse proxy follow
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass https://10.128.20.5:443;
    proxy_ssl_verify off;
  }

  access_log /var/log/nginx/access_log.log;
  error_log /var/log/nginx/access_log.log;
}

server {
  listen        80;
  server_name   website1.domain.com;

  location / {
    # app1 reverse proxy follow
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://10.128.11.20:80;
  }

  access_log /var/log/nginx/access_log.log;
  error_log /var/log/nginx/access_log.log;
}


근처에 아이디어가 있습니다 ... 아마도 NGINX는 (현재 또는 장기적으로) 올바른 도구가 아닐 수도 있습니다. 인증서를 복구할 수 있다고 가정합니다. 현재 겪고 있는 문제는 트래픽을 처리하기 위해 더 많은 백엔드 웹 서버가 필요하다는 것입니다. NGINX 프록시도 확장할 수 있습니까? 클러스터나 로드 밸런서가 마음에 드시나요? 완전히 다른 도구를 찾아야 합니까?

답변1

443 서버 블록이 SSL 요청에 대해 구성되지 않았습니다. 지시문 ssl에 추가 하고 구성 해야 합니다 .listenssl_certificatessl_certificate_key

예를 들어

server {
  listen        443 ssl;
  ssl_certificate /path/to/ssl/certificate.pem;
  ssl_certificate_key /path/to/ssl/certificate.key;
# ...

이러한 설정 및 기타 TLS/SSL 관련 설정에 대한 자세한 내용은 여기에서 확인할 수 있습니다.http://nginx.org/en/docs/http/configuring_https_servers.html.

현재 겪고 있는 문제는 트래픽을 처리하기 위해 더 많은 백엔드 웹 서버가 필요하다는 것입니다. NGINX 프록시도 확장할 수 있습니까?

NGINX는 수직적으로 잘 확장됩니다(서버의 리소스 증가). 수평적 확장성 또는 고가용성을 위해 더 많은 NGINX 서버를 추가하고 공용 IP 주소가 하나만 있는 경우 관리 VIP(가상 IP)가 필요합니다. 이 keepalived서비스를 사용하여 VIP를 관리할 수 있습니다. 그러나 소규모 네트워크의 경우에는 이것이 필요하지 않다고 생각합니다.

관련 정보