끄적끄적

ssl 인증서 생성 & nginx 본문

Synology 관련

ssl 인증서 생성 & nginx

monkeydev 2021. 7. 11. 21:16

Nginx를 통해 모든 웹서비스에 대해 https 접근을 할 수 있도록 ssl 인증서 생성이 필요하다.

Nginx 띄우는법 참고
https://hub.docker.com/_/nginx

인증서 생성은 아래의 URL을 참고하여 작업하면된다.
https://sh-safer.tistory.com/89

인증서 파일 포맷 종류
https://www.sslcert.co.kr/guides/kb/54

Nginx Https 리다이렉트 설정 방법
https://www.ucert.co.kr/wiki/w/Nginx_SSL_%EB%A6%AC%EB%8B%A4%EC%9D%B4%EB%A0%89%ED%8A%B8_%EC%84%A4%EC%A0%95

인증서 포함시켜서 Nginx 구동하는 커맨드

# Host머신의 /home/sungil/test/nginx/cert에 key, crt파일을 넣는다.
$ docker run --name nginx -v /home/sungil/test/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro -v /home/sungil/test/nginx/cert:/cert:ro -p 8080:80 -d nginx

 

아래 문서에 따라 nginx.conf를 설정하면 된다.
https://help.sonatype.com/repomanager3/installation/run-behind-a-reverse-proxy

nginx 인증서가 무조건 https기반으로 동작하도록 설정한 nginx의 default.conf이다.

server {
    listen       80 ;
    server_name  sungil.ahnlab.com;
    rewrite ^(.*) https://sungil.ahnlab.com$1 permanent;
}

server {
    listen 443 ssl ;
    server_name  sungil.ahnlab.com;

    ssl          on;
    ssl_certificate      /cert/ssl_1.crt;
    ssl_certificate_key  /cert/ssl_1_nopass.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers    HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers   on;

    location / {
        keepalive_timeout 3600;
        proxy_read_timeout 2400;
        proxy_connect_timeout 1800;
        proxy_pass_header   Server;
        proxy_cookie_path   ~*^/.* /;
        proxy_buffer_size 128k;
        proxy_buffers 40 128k;
        proxy_busy_buffers_size 128k;
        proxy_pass  http://110.9.97.178:8081/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto "https";
    }
}

nginx rewrite 룰 참고
https://www.nginx.com/blog/creating-nginx-rewrite-rules/


nginx로 nexus3에 대한 https 지원 시 443 이외의 다른 포트 이용

nginx로 nexus3에 대해 https 방식으로 접근하도록 리버스 프록시 기, 위처럼 443포트를 Listen하면 정상적으로 접근되는데. LISTEN 포트를 443이 아닌 다른 포트로 설정 시 UI가 온전히 표시되지 못한다.

NGINX를 Reverse proxy로 이용하여 https방식의 통신을 지원할 때, 위처럼 443포트를 Listen하면 정상적으로 https 지원이 가능하다.

그런데, Listen중인 포트를 443이 아닌 다른 포트를 이용하려하면, UI에 접근은 되는데 화면이 온전히 나타나지 않는다.

이 문제에 대해 아래 stackoverflow에서 방법을 올려줘서 적용했다.
https://stackoverflow.com/questions/44695535/nginx-ssl-termination-proxy-to-nexus-not-working-with-ports-different-than-443

필자의 경우, 아래의 답변대로 했더니, 정상적으로 접근이 되었다.

위 stackoverflow에서 필자에게 제대로 동작한 답변은 아래와 같다.

I met the same problem. Change proxy_set_header Host $host; to
proxy_set_header Host $host:$server_port; solve it

 

즉, proxy_set_header Host $host; 를 proxy_set_header Host $host:$server_port; 로 바꿔줬더니 동작한다.

시간있을 때, 왜 위와같이 수정해줬을 때 제대로 동작하는건지 디버깅해보는 시간을 갖도록한다...

'Synology 관련' 카테고리의 다른 글

Synology 관련 지식들 정리  (0) 2021.07.11
Comments