nginX + 리버스프록시 + https(ssl) 적용하기
일전에 nginX에서 리버스프록시를 구현하는 글을 블로깅 한적이 있었는데 최근에 모두 https(ssl)로 바뀌면서 Reverse Proxy에서도 적용할 방법을 찾았습니다. 제 업무가 전산업이 아니다 보니 적용해야지 하던게 시간이 오래 지나버렸지만 2월이 지나 잠시 짬이 나서 하루를 투자해 성공했습니다. 역시나 이번에도 개념을 잡으니 쉬웠는데, 구글링을 아무리 해도 제가 원하는 답은 나와 있지 않아서 많이 헤멨네요.
일단 nginX에서 리버스프록시에 대한 개념을 모르시거나 간단하게 개념을 잡고 싶으시면 아래의 내용을 참고해주세요. 아래 기사는 소규모 소호나 개인을 위한 개념 도식화가 되어 있습니다. 물론 대형 시스템에 적용할때도 기본은 같겠지만요.
https://akal.co.kr/?p=1173
사용된 시스템 : Linux Mint 19 tara
nginX 버전 : nginx/1.14.0
SSL (https) 적용 : Letsencrypt에서 certbot을 이용하여 구축
두대 모두 같은 시스템으로 사용되었습니다.
certbot을 이용한 ssl 구축은 인터넷에 자료가 워낙 많아서 여기서는 다루지 않도록 하겠습니다. 아주 간단하고 쉽게 적용되기 때문에 인터넷 검색만 해보시면 될 것 같아요.
도식화 시키니 개념도 간단하게 잡히고 실제 적용도 쉽게 하실수 있겠죠 ? 리버스프록시 서버에는 SSL을 적용하고 하위서버들은 SSL을 적용하지 않은 상태 http로 통신하면 됩니다. 그래도 잘 모르시는 분들은 아래의 설정을 참고해서 작업하시면 됩니다.
server {
server_name test.eilsin.co.kr;
location / {
proxy_redirect off;
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://192.168.0.9/;
proxy_redirect off;
proxy_http_version 1.1;
}
listen 443 ssl;
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 {
if ($host = test.eilsin.co.kr) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name test.eilsin.co.kr;
return 404; # managed by Certbot
}
Certbot에서 nginX에 적용하면 자동으로 생성되는 redirection 설정을 참고로 설정했습니다. 하단부에 있는 설정이 certbot 에서 자동생성되는 80번 포트로 들어온 http요청도 443번 포트 ssl로 재지정을 해주 설정입니다.
location / { … } 내용이 리버스프록시 설정 입니다. 내부아이피를 사용하고 있으므로 http로 해당 내부아이피를 지정해주시면 됩니다.
ssl 관련 설정은 letsencrypt를 사용하면 생성되는 ssl key를 지정해주시면 되고요. certbot을 이용하시면 자동으로 생성해주는 부분입니다 🙂
이로써 간단하게 하단에 있는 서버로 적용될 수 있게 설정을 마쳤습니다.
server { listen 80; server_name test.eilsin.co.kr; charset utf-8; root /home/ilsin/www/intranet; index index.html index.php index.htm; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } location ~ \.(php|html|htm)$ { fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_index index.php; fastcgi_split_path_info ^(.+\.php)(.*)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
하단에 있는 서버는 그저 http로 설정하고 PHP를 사용할 수 있도록 설정된 내용입니다. 워낙 기본적인 내용이라 설명드릴게 없네요. ^-^;
고민했던 제가 바보스럽게 느껴질 정도로 간단한 내용이라 특별하게 설명드릴 부분은 없습니다. 그저 리버스프록시 서버가 SSL까지 담당해주면 하단의 서버들은 그냥 http로 엮어주면 아주 쉽게 서버단이 구축된다는 거죠. 그래도 역시나 생업으로 하는게 아니다 보니 기록으로 남겨두지 않으면 저도 잘 잊어먹는 편이라 ^-^; 이제 https가 거의 기본 설정으로 되고 있기 때문에 혹시 어려움을 겪고 있는 분들이 계시다면 조금이나마 도움이 되면 좋겠습니다.
와 잘보고 갑니다.
감사합니다 🙂