002. [Linux-Ubuntu] NginX 설치 및 운용
1. 설치 [CLI 수행]
1) 패키지 관리자 update
apt update
2) NginX 패키지 확인 -> 외부 리포지토리에 어떤 버전이 있는지?
apt list | Grep nginx*
3) NginX 설치
apt install nginx -y
4) NginX 동작 확인
nginx -v
systemctl status nginx
-> active(running) 상태가 아니라면 -> systemctl start nginx 한 후 다시확인
5) 외부에서 접근하게 하려면 기업이 아닌 개인사용자의 경우, 공유기에서 필요한 TCP-80 포트포워딩이 필요함.
-> 외부에 서버를 공개적으로 열 때에, 공개 서비스가 아닌 테스트라면 접근가능한 일부 사용자들을 위한
웹 서버 자체에서 방화벽 정책을 수립하는 것이 좋다. (UFW, IPtables...)
수립하지 않을 경우 : 엄청난 트래픽이 당신의 서버에 브루트 포스 공격을 할 것이다.
실제 기업에서는 공개 서버를 DMZ 영역에 두고 상단에 방화벽, IPS, IDS, DDoS 보안 솔루션 장비를 설치한다.
2. Tomcat 연동 (Reverse-Proxy 443 -> 8080, 8081...)
1) NginX 설정 수정
(a) application.yml -> application.yml : "server.port = 8080" 설정 후 저장
(b) vi /etc/nginx/sites-available/jaybee & ln -s /etc/nginx/sites-available/jaybee /etc/nginx/sites-enabled/
[아래 부분 추가]
server {
listen 443 ssl;
server_name jaybee.com;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
# 정적 리소스 서빙
location /static/ {
root /var/www/html;
try_files $uri $uri/ =404;
}
location /images/ {
root /var/www/html/static;
}
location /css/ {
root /var/www/html/static;
}
location /js/ {
root /var/www/html/static;
}
# 루트 접근 시 index.html 출력 (정적 페이지 → 없으면 백엔드)
location / {
root /var/www/html/static;
index index.html;
try_files $uri $uri/ /index.html @backend;
}
location @backend {
proxy_pass http://localhost:8080; # Spring Boot 서버
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
# HTTP → HTTPS redirect
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
설정 후 저장
(c) nginx -t (구문 오류 있는지 확인)
(d) systemctl restart nginx -> 웹 서버 재시작
3. 운용 (+부가적인 설정 : 보안...)
1-1) 기본 보안 운용
Openssl 활용 TLS1.3 권장
1-2) 양자 내성암호인 PQC[kyber, dilithium, bike]를 활용한 OQS + Openssl
키 교환 연동 실험단계(알고리즘은 탑재함)
liboqs -> 기초 알고리즘 정리되어 있는 기본 라이브러리
이걸 적용하려면, 키 교환 알고리즘 동작에 대한 부분을 NginX 코드에 직접 추가해야 한다.
▶️ 깃허브: https://github.com/open-quantum-safe/openssl