Nginx
프록시와 리버스 프록시
프록시 서버는 클라이언트의 요청을 대신해서 서버에 전달하고, 서버의 응답을 클라이언트에게 다시 전달하는 중계 서버이다. 주로 클라이언트의 IP를 감춰 익명성을 보장하고 악성 사이트에 대한 접근을 차단한다. 한국에서 몇몇 서버에 접근하려고 하면 대신 경찰의 안내문구가 적혀있는 사이트로 리다이렉트 되곤 하는데, 중간에 ISP의 프록시 서버가 우리의 요청을 확인하고 접근을 차단 및 리다이렉트 시켰기 때문이다.
반대로 리버스 프록시 서버는 서버 측에서 클라이언트의 요청을 받아 실제 서버에 전달하고, 서버의 응답을 클라이언트에게 전달하는 중계 서버이다. 프록시 서버와 일견 비슷해보이지만, 프록시 서버가 클라이언트를 위해 동작한다면, 리버스 프록시 서버는 백엔드를 위해 동작한다는 것이 차이가 있다.
Nginx
콘텐츠 캐싱 등 다양한 기능이 있지만 아쉽게도 나는 리버스 프록시 용도로만 사용하고 있다. 기회가 된다면 다른 기능들도 공부해보고 싶다. 하지만 이번 포스트에서는 EC2에 Nginx를 설치하고 NextJs나 NestJs, ExpressJs 등으로 요청을 리다이렉트하는 기능에 대해서만 정리하려 한다.
NodeJs 때문에 조금 햇갈리기는 했지만, Nginx는 Node위에서 돌아가는 패키지가 아니다!
// nginx 설치 sudo yum install nginx
Nginx를 설치했으면 설정을 수정해주어야 한다. 경우에 따라 다르다곤 하는데 Amazon linux의 경우에는 /etc/nginx에 설치되는 듯하다. 설정 파일의 이름은 nginx.conf이며, 나는 vim으로 열어서 수정했다.
sudo vim /etc/nginx/nginx.conf
설정 파일을 내려가다보면 server 부분이 있는데 아래와 같이 수정해주면 된다. 여기서 Upgrade와 Connection은 NextJs 12 이후로 필요한 webSocket 관련 설정이다. 만약 Next가 아니더라도 webSocket 쓸 일 있으면 해당 설정을 넣어주면 되겠다.
server { listen 80; server_name _; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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 $scheme; } }
설정 파일을 수정했으면, 이 파일이 문법적으로 문제가 없는지 검사해주어야 한다. 다행히 nginx는 명령어 한 줄로 문제 여부를 확인해준다.
// 설정 파일 검사 sudo nginx -t // 문제 없으면 아래와 같은 문구가 나온다 nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
설정 파일을 수정할 때마다 nginx를 재시작해주어야 변경된 설정이 반영된다. 만약 nginx를 끄고 설정 파일을 수정했다면 켜주기만 해도 된다.
sudo systemctl start nginx sudo systemctl restart nginx
EC2가 지 혼자 재시동할 수도 있으니 EC2 켜질 때 Nginx도 자동으로 켜지도록 설정할 수 있다.
sudo systemctl enable nginx sudo systemctl status nginx // enable
블로그의 정보
Ayden's journal
Beard Weard Ayden