
이 글에서는 Nginx 웹서버에서 SSL을 사용하기 위한 Config파일을 작성하는 방법을 다룬다.
인증기관(CA)로부터 인증서(Certificate)를 발급 받아서 다음 두 개 파일을 이미 확보해 놓은 상태여야 하며,
아직 인증서를 발급받지 않은 경우 인증기관의 홈페이지를 통해 인증서를 발급받은 뒤 진행해야 한다.
회사에서 프로젝트 진행 중,
톰캣과 nginx 를 사용해야하는 상황이 생겼다,.
nginx 에 SSL 인증서를 설정해야 하고,
전달 받은 인증서가 pem 파일이라서 tomcat에는 설정을 못하는 상황이다.
tomcat은 8080에 띄운 상황이며,
80포트는 nginx에 설정해서 443으로 리다이렉트 시켜야한다.
결국
80 포트는 443으로 리다이렉트 하고,
443은 톰캣으로 프록시 되게 해야하는 상황이다.
서버 구성
nginx 80 -> nginx 443 리다이렉트
nginx 443 -> tomcat 8080 프록시 처리
그리고 nginx 끌 때, task kill보다는
nginx.exe -s stop 명령어로 꺼야함.
task kill로 하면 죽여도 좀비마냥 되살아남.
그리고 설정 파일을 수정했을 시,
nginx.exe -s reload 로 적용해야함.
nginx.conf 수정
```
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
#redirect
server {
listen 80;
server_name localhost;
location / {
return 301 https://$server_name$request_uri;
}
}
# HTTPS server
#
server {
listen 443 default ssl;
server_name localhost;
ssl_certificate C:/Users/administrator01/Downloads/nginx-1.24.0/nginx-1.24.0/pem/cert.pem;
ssl_certificate_key C:/Users/administrator01/Downloads/nginx-1.24.0/nginx-1.24.0/pem/newkey.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://localhost:8080;
}
}
```
위는 nginx 웹서버에서 SSL을 사용하기 위한 Config파일의 내용이다.
#redirect 부분에서 80포트로 들어오는 모든 요청을 443포트로 리다이렉트 한다.
# HTTPS server 부분에서는 443포트로 들어오는 요청을 받아들이고, SSL 인증서를 적용한다.
그리고 SSL 연결 방식, SSL 암호화 알고리즘 등을 설정한다.
location / 부분에서는 proxy_pass로 지정한 서버로 요청을 프록시 처리 한다.
즉, 이 코드는 80포트에서 들어오는 요청을 SSL을 적용한 443포트로 리다이렉트하고,
443포트에서 들어오는 요청을 프록시로 받아 8080포트의 서버로 전송한다.
nginx.conf 파일의 구성과 디렉티브
nginx.conf 파일의 구성은 디렉티브로 이루어져 있다.
이런 디렉티브들은 블록과 컨텐츠로 구성되어 있는데 Directive = Block + Countext과 같이 구성된다.
디렉티브를 끝내는 방법
- 세미콜론
- 중괄호 블록
nginx.conf 에서 주석
- #
nginx.conf에서 최초의 디렉티브와 블록을 나누면 다음과 같다.
디렉티브
최초 디렉티브는 다음과 같이 구성된다.
- user
- worker_processes
- error_log
- pid
위의 구성요소들은 어떤 특정 블록이나 컨텍스트에 포함되지 않는 메인 컨텍스트 라고 불린다.
user가 root로 지정되어있으면 워커 프로세서가 root로 동작하게 하고
사용자가 워커 프로세스를 악의적으로 사용할 수 있어서 보안상 위험할 수 있다.
worker_process
워커 프로세스를 몇 개를 생성할 것인지 지정한다.
worker_connections
이벤트 안에서 사용하는 지시어인데 동시에 접속을 얼마나 처리할 것인지 지정하는 값으로
worker_process가 4고 worker_connections가 1024면 4 * 1024로 4096의 커넥션을 처리할 수 있다.
블록
메인 컨텍스트와 별개로 추가적인 디렉티브로는 아래와 같은 블록이 있다.
- events {}
- http {}
Http 블록
http 블록은 웹 트래픽을 처리하는 디렉티프블을 담고 있으면서 Universal블록이라고도 하더라.
그리고 http 블록에서 사용되는 모든 디렉티브들은 nginx 문서에서 볼 수 있다.
Server 블록
하나의 웹 사이트를 선언하는데 사용되고, 가상 호스팅의 개념이고 하나의 서버로 두 개를 동시에 운영하고 싶을 때 사용한다.
location 블록
server 블록 안에서 나오면서 특정 url을 처리하는 방법을 정의한다.
예를 들어서
http://localhost:80/Login 과 http://localhost:80/Join 으로 접근을 다르게 하고싶을 때 사용되는데
이는 로드밸런싱에서도 나오니 주의깊게 봐두는게 좋다.
events 블록
주로 네트워크의 동작 방법과 관련된 설정값들을 갖는다.
'개발 > 개발환경' 카테고리의 다른 글
file-loader VS url-loader (3) | 2024.01.29 |
---|---|
ESLint 와 Prettier 설정해보기 (1) | 2023.12.11 |
[Webpack] 웹팩 최적화 1 (0) | 2023.12.04 |
Safari 브라우저 에서 Cross-browser 신경써보기 (0) | 2023.05.28 |
Intellij Tomcat debugger port 에러 (0) | 2023.05.23 |
개발 블로그
포스팅이 좋았다면 "좋아요❤️" 누르기 !