비표준 포트에서 nginx SSL을 실행하는 방법


16

나는 이것이 적어도 몇 가지 다른 질문의 복제본처럼 보이지만 각 질문을 여러 번 읽었으며 여전히 잘못하고 있습니다.

다음은에 위치한 myexample.com nginx 구성 파일의 내용입니다 /etc/nginx/sites-available.

server {

  listen       443 ssl;
  listen       [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
      index index.html index.htm;

}

https://myexample.com 으로 이동 하면 콘텐츠가 제공되고 연결이 안전합니다. 따라서이 구성은 좋은 것 같습니다.

이제 SSL 포트를 9443으로 변경하고 nginx 구성을 다시로드하면 구성이 오류없이 다시로드되지만 https://myexample.com을 방문 하면 브라우저에 오류가 표시됩니다 (이 사이트에 도달 할 수 없습니다 / myexample.com은 거부했습니다) 연결합니다 (ERR_CONNECTION_REFUSED)

here , herehere (다른 것들 중에서) 제안 및 문서를 시도 했지만 항상 ERR_CONNECTION_REFUSED 오류가 발생합니다.

비표준 포트를 사용한 다음 해당 포트를 명시 적으로 URL에 입력 할 수 있습니다 (예 : https://myexample.com:9443) . 그러나 나는 그것을하고 싶지 않습니다. 내가 원하는 것은 사용자가 myexample.com을 모든 브라우저에 입력하고 nginx가 자동으로 보안 연결로 리디렉션되도록하는 것입니다.

표준 443 SSL 포트를 사용할 때에도 아무런 문제가 없습니다.

편집 : debian / jessie에서 nginx / 1.6.2를 사용하고 있습니다.


1
"비표준 포트를 사용하고 해당 포트를 URL에 명시 적으로 입력 할 수 있습니다 (예 : myexample.com:9443) . SSL이 포함 된 " myexample.com:9443 "과 같은 smth를 사용하여 내 웹 사이트에 액세스하고 싶기 때문에 어떻게이 작업을 수행 할 수 있었는지 설명해 주시겠습니까
Ghassan Zein

답변:


23

지원 입력 "을 위해 https://myexample.com "브라우저에서, 그리고 필요가 처리 nginx포트 9443에 설정 청취, 당신은 추가해야합니다 nginx즉 IP 포트이기 때문에, 여전히 포트 443에서 수신하는 설정을 브라우저가 연결됩니다 .

그러므로:

server {
  listen 443 ssl;
  listen [::]:443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;

  # Redirect the browser to our port 9443 config
  return 301 $scheme://myexample.com:9443$request_uri;
}

server {
  listen 9443 ssl;
  listen [::]:9443 ssl;

  server_name myexample.com www.myexample.com;
  ssl_certificate /etc/letsencrypt/live/myexample.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/myexample.com/privkey.pem;
  add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

  #Configures the publicly served root directory
  #Configures the index file to be served
  root /var/www/myexample.com;
  index index.html index.htm;
}

인증서는 일반적으로 DNS 호스트 이름에 연결되어 있지만 반드시 포트 일 필요는 없으므로 두 섹션 모두에 동일한 인증서 / 키가 필요합니다 .

도움이 되었기를 바랍니다!


이것이 가장 완전한 대답이지만, 내가 생각하는 것은 보안 연결로 자동 리디렉션하려면 nginx가 여전히 포트 443에 바인딩되어 있어야한다는 것입니다. 그것이 문제입니다 :-( 나는 그 항구에 묶인 다른 과정을 가지고 있습니다.
GojiraDeMonstah

Nginx는 리버스 프록시입니다. 443에서 청취하고 요청을 적절한 애플리케이션으로 전달할 수 있습니다.
Tim

팀-당신 말이 맞아요 아마 진짜 바보 같은 질문을했지만 SSL 포트를 "마 법적으로"바꾸는 방법이 있기를 바랐습니다.
GojiraDeMonstah

@GojiraDeMonstah 포트 443을 사용하지 않으려면 선택한 포트 번호를 URL에 입력하십시오. 그게 다야.
Michael Hampton

"ssl"은 매우 중요했습니다. 나는 default_server를 가지고 있었고 꽤 오랫동안 고투했다.
swateek

0

https://example.com 을 입력 할 때 https : // 체계의 표준은 포트 443에 연결하는 것입니다.이 경우 서버가 포트 9443에서 수신 대기하도록 서버를 이동했습니다. 연결이 거부되었습니다. 이 때문에 메시지-포트 443에서 수신 대기하는 것이 없습니다.

포트 443에서 수신 대기하도록 포트 9443으로 연결을 재 지정하거나 URL을 포트의 일부로 포트를 사용하도록 준비해야합니다.


-1

포트를 9443과 같은 비표준 포트로 변경하면 443에서 9443으로 리디렉션을 추가해야합니다. 프록시를 해당 포트로 리버스하도록 nginx를 설정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.