Docker 환경에서 모듈별로 나누어 관리하는 것이 관리의 편의성을 높이기 된다.
역활 별로 시스템 구성을 나누어 관리하면, 유지보수 및 관리 편의성이 좋기 때문에, Nginx 를 이용할 경우 Reverse Proxy를 이용해서 외부에서 연결되는 접점을 별도로 설정하는 방법에 대해서 정리보도록 하겠다.
Nginx는 Reverse Proxy로 구성하는 방법은 기본적으로 location에 proxy_pass를 기입하여 구성할 수 있다.
여기에 추가적으로 Proxy 관련된 옵션을 이용하여 보다 Proxy 설정을 할 수 있다.
그리고 SSL 인증서를 구성한 경우 인증서 경로를 설정해 주어야 하는데, Certbot에서 구성시 확인되 인증서 파일 정보를 기입해 주면 된다.
무료 SSL 인증서인 Lets Encrypt 관련된 내용은 아래를 참고하자.
Ubuntu - Let's Encrypt으로 Nginx에 무료 SSL 적용 (asecurity.dev)
만약 Certbot으로 Nginx의 환경설정을 자동 구성한 경우 /etc/nginx/sites-enabled/default 에 기본적인 환경설정 파일이 생성되며, location에 proxy_pass 항목을 추가하도록 하자.
아래는 Reverse Proxy 서버의 해당 파일의 443 port에 대한 내용이다. 80 포트는 443으로 자동 Redirect하도록 구성한 경우 별도로 proxy_pass를 추가할 필요가 없다.
/etc/nginx/sites-enabled/default
server {
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name geoip.one; # managed by Certbot
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
proxy_pass http://10.0.0.4:3000;
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/geoip.one/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/geoip.one/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 = geoip.one) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80 ;
listen [::]:80 ;
server_name geoip.one;
return 404; # managed by Certbot
}
정상적으로 구현하였다면, Nginx를 재시작하여 정상적으로 적용되었는지 확인할 수 있다.
sudo systemctl restart nginx
동작 확인을 위해서 내부 웹 서버에 Nginx 기본 파일인 /var/www/html/에 위치해 있다. Ubuntu 기준으로 /var/www/html/index.nginx-debian.html 이며 이 파일를 수정하여 테스트 해보도록 하자.
정상적으로 내부 Web 서버의 웹 페이지가 표시된다면 Reverse Proxy가 잘 작동하고 있는 것을 알 수 있다.
'Linux' 카테고리의 다른 글
Docker - CLI, Dockerfile 생성부터 서버에서 실행하기 (0) | 2024.02.18 |
---|---|
Linux - 백그라운드 실행 nohup 과 & 이해, Python 사용법 (0) | 2024.02.17 |
Mac - Zip with password, 암호로 압축하기 (0) | 2022.12.16 |
MariaDB/MySQL - Database 파일 위치 변경하기 (0) | 2022.12.14 |
certbot - LetsEncrypt으로 Nginx에 무료 SSL 적용 (0) | 2022.12.13 |