Nginx의 사용자 지정 포트(비표준 포트)에서 HTTP에서 HTTP로 강제 리디렉션

|


HTTP (표준 포트) 에서 HTTPS(표준 포트) 리다이렉션

server {
    listen       80;
    server_name  aaa.bbb.ccom;
 
 
    return 301 https://$server_name$request_uri;
}
 
 server {
    listen       443;
    server_name  aaa.bbb.ccom;
    ssl on;
 
    ssl_certificate      ssl/combined.pem;
    ssl_certificate_key  ssl/key.pem;
    ssl_session_timeout  10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

 

 

참조 : https://ma.ttias.be/force-redirect-http-https-custom-port-nginx/

HTTP (비표준 포트) 에서 HTTPS(비표준 포트) 리다이렉션

server {
      listen      8888;
      server_name aaa.bbb.com;
      7777 forward and redirect to https
      rewrite ^ https://$server_name:1234$request_uri? permanent;
}

 

Nginx의 사용자 지정 포트에서 HTTP에서 HTTP로 강제 리디렉션


비표준 포트로 SSL 사용시  Nginx 가상 호스트를 실행하는 경우 HTTP가없는 사이트를 탐색하면 다음 Nginx 오류가 발생합니다.

400 Bad Request
The plain HTTP request was sent to HTTPS port
nginx

 

예를 들어 비표준 포트 (SSL을 사용하는 1234)에서 실행되는 이와 같은 가상 호스트는 해당 오류를 발생시킵니다.

server {
  listen      1234 ssl;
  server_name your_site;
  ssl         on;
  ...
}

 

고전적인 방법의 HTTP를 HTTP로 리디렉션

HTTP를 HTTPS로 리다이렉션하는 고전적인 방법은 하나의 가상 호스트가 포트 80에서 수신하고 하나의 443에서 수신되도록하고 포트 80이 모든 트래픽을 HTTPS 으로 리디렉션하도록하는 것입니다.

 

server {
  listen      80;
  server_name your.site.tld;
   
  301 = permanent redirect, 302 = temporary redirect
  return 301  https://your.site.tld$request_uri;
}
 
server {
  listen      443 ssl;
  server_name your.site.tld;
  ssl         on;
  ...
}

 

그러나 사용자 지정 포트에서 HTTP / SSL을 실행하는 경우에는 "안전하지 않은"포트가 없으므로이 트릭을 사용할 수 없습니다. 리디렉션 요청을 수신 할 수있는 포트가 없습니다.

비표준 포트에서 HTTPs 리디렉션 강제 수행

Nginx는 사용자 지정 HTTP 상태 코드 를 작성하여 497 이라는 HTTP 버전을 사용하여 HTTP를 통해 가상 호스트를 탐색하는 모든 사용자를 강제로 리디렉션 할 수있게합니다 . 

이는 사용자 정의 포트에서 SSL을 실행하는 경우에만 필요합니다. 그렇지 않으면 위에 표시된 구성을 리디렉션에 사용할 수 있기 때문입니다.

브라우저에서 HTTP에서 HTTPs 포트로 리디렉션하도록하려면 다음을 수행하십시오.

 

server {
  listen      1234 ssl;
  server_name your.site.tld;
  ssl         on;
  ...
  error_page  497 https://$host:1234$request_uri;
  ...
}

 

이제 HTTP 프로토콜을 통해 사이트에 도달하는 모든 사용자는 HTTPs 버전으로 리디렉션됩니다.


And