Skip to content
This repository was archived by the owner on Aug 10, 2022. It is now read-only.

Files

Latest commit

 

History

History
105 lines (67 loc) · 3.62 KB

5.nginx.bypass.md

File metadata and controls

105 lines (67 loc) · 3.62 KB

첫 번째 시도인 1번2번 ...
두 번째 시도인 3번4번 ...
이들 모두에서 최초 목표인 Nginx리버시 프록시 서버Certbot 을 이용한 SSL 인증키 그리고 Nginxbypass redirect 를 이용한 HTTPS 서버 구축하기 에는 실패했습니다.

하지만, 두 번째 시도를 통해서 근본적인 이론테스트 커맨드 를 알게 되었고 Nginx 와 Certbot 설정에는 문제가 없을을 알게 되었습니다.

따라서 HTTP to HTTPS redirect 부분만 손보면 될 것 같다고 판단하였습니다.

다음 자료를 참고했습니다.

현재 상황은 도메인 주소 로 접속을 하면 SSL 인증이 작동하고 있었습니다.

단, Nginx Certbot 연결에서 www.도메인주소 를 제거했기 떄문에, 해당 주소는 전부 제거해주었습니다.

따라서, 문제 되는 부분이 모두 80 포트의 server 선언부 에 있다고 판단했습니다.

server {

    if ($host = unchaptered.ddns.net) {
       return 301 https://$host$request_uri;
    } # managed by Certbot



        listen 80;
        listen [::]:80;


        server_name unchaptered.ddns.net;
        return 301 https://unchaptered.ddns.net$request_uri;
    return 404; # managed by Certbot


}

아마도 80 포트로 접속 요청이 갔을 때, IPv4 일 때는 조건문에 false 이기 때문에 bypass 가 안된다고 생각했습니다.

하지만 기본적인 return 구문이 작동한다면 당연히 return 301 https://unchaptered.ddns.net$request_uri; 부분도 작동 해야 하지 않나? 라고 생각했습니다.

따라서, 다른 키워드가 정답이라고 생각했고 location / {} 라는 부분이 생략되어 있음을 찾고 파일을 다음과 같이 수정하였습니다.

server {

        listen 80;
        listen [::]:80;

        server_name unchaptered.ddns.net;

        location / {
                return 301 https://unchaptered.ddns.net$request_uri;
        }

}

이번에는 bypass redirect 에 성공했습니다.

그런데, 404 Not Found 에러가 떴고 심지어 기존에 정상 작동 되던 https 도 나오지 않았습니다.

그 과정에서 /etc/nginx/site-enabled 에 있는 default 파일을 지웠던 것이 기억났고 아, SSL 코드가 적힌 server {} 안의 root 가 매핑을 하고 있음을 알 수 있었습니다.

따라서, 다음의 root 구문을 추가하여 문제를 해결했습니다.

server {

    root /var/www/도메인주소/html/;
    index index.html index.htm index.nginx-debian.html;

    server_name 도메인주소;

    location / {

            try_files $uri $uri/ =404;

    }


    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/도메인주소/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/도메인주소/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {

    listen 80;
    listen [::]:80;

    server_name 도메인주소;

    root /var/www/도메인주소/html;

    location / {
            return 301 https://도메인주소$request_uri;
    }

}