Nginx란?
Nginx는 웹 서버 소프트웨어로, Apache 웹 서버와 함께 가장 많이 사용되는 웹 서버 중 하나입니다. Nginx는 높은 성능과 안정성, 확장성 등의 장점으로 인해 많은 사용자들에게 인기가 있습니다.
Nginx 설치하기
Nginx를 설치하기 위해서는 우선 해당 운영체제의 패키지 매니저를 이용하거나, 공식 홈페이지에서 소스 코드를 다운로드하여 컴파일하는 방법이 있습니다. 이번에는 Ubuntu를 기준으로 패키지 매니저를 이용한 설치 방법을 소개해드리겠습니다.
1. Nginx 패키지를 설치합니다.
sudo apt-get update
sudo apt-get install nginx
2. 설치가 완료되면 Nginx 서비스를 시작하고, 정상 동작하는지 확인합니다.
sudo systemctl start nginx
sudo systemctl status nginx
Nginx 설정하기
Nginx의 설정 파일은 /etc/nginx/nginx.conf 경로에 위치하고 있습니다. 이 파일을 수정하여 원하는 대로 설정해 nginx 의 역활을 수정할 수 있습니다.
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
}
위 설정 파일에 대한 주요 directive는 다음을 의미합니다.
- user: nginx 프로세스를 실행할 사용자를 지정합니다.
- worker_processes: nginx가 사용할 worker 프로세스의 수를 지정합니다.
- error_log: nginx의 에러 로그 파일 경로를 지정합니다.
- pid: nginx의 PID 파일 경로를 지정합니다.
- events: nginx가 처리할 이벤트에 대한 설정을 지정합니다.
- http: HTTP 프로토콜에 대한 설정을 지정합니다.
- include: 추가적인 설정 파일을 포함합니다.
위 설정 파일에서는 /etc/nginx/conf.d/*.conf 경로에 있는 모든 .conf 파일을 추가적인 설정 파일로 포함하고 있습니다. 이를 이용하여, 각각의 서버 블록마다 별도의 설정 파일을 생성하여 사용할 수 있습니다.
새로운 서버블록으로 web server 설정하기
새로운 서버블록 설정을 통해 example.com 도메인을 가진 서버의 설정 파일을 만들어 보겠습니다.
1./etc/nginx/conf.d 디렉토리에 example.com.conf 파일을 생성하고, 다음 설정을 추가합니다 .
server {
listen 80;
server_name example.com;
location / {
root /var/www/example.com;
index index.html;
}
위 설정 파일에서는 다음과 같은 작업을 수행합니다.
- listen 지시어는 클라이언트의 요청을 받을 포트를 지정합니다. 위 예제에서는 80번 포트를 사용합니다.
- server_name 지시어는 이 서버 블록이 처리할 도메인 이름을 지정합니다.
- location 지시어는 클라이언트의 요청 URL 경로와 일치하는 블록을 찾아 요청을 처리합니다. 위 예제에서는 / 경로로 들어오는 요청을 /var/www/example.com 디렉토리에서 index.html 파일을 찾아 응답합니다.
위와 같은 설정 파일을 추가하면 example.com 도메인으로 들어오는 요청을 처리할 수 있습니다.
2. 저장 후 nginx를 다시 reload 합니다..
sudo systemctl restart nginx
proxy로 설정하기
nginx를 사용하여 프록시 서버를 설정하려면, proxy_pass 지시어를 사용하여 백엔드 서버로 요청을 전달해야합니다. 다음은 proxy_pass를 사용하여 백엔드 서버로 요청을 전달하는 예제입니다.
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend-server:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
위 설정 파일에서는 다음과 같은 작업을 수행합니다.
- proxy_pass 모든 요청을 백엔드 서버의 http://backend-server:8080 주소로 전달합니다.
- proxy_set_header 백앤드로 요청 시 해더를 수정할 수 있습니다.
- 위 예제에서는 Host, X-Real-IP, X-Forwarded-For 헤더를 추가하도록 설정해 백엔드 서버에서 클라이언트의 IP 주소와 원래 요청이 어디에서 왔는지 확인할 수 있습니다.
API gateway로 설정하기
nginx를 사용하여 API 게이트웨이를 설정하려면, proxy_pass 지시어를 사용하여 백엔드 API 서버로 요청을 전달해야합니다. 또한, proxy_set_header 지시어를 사용하여 요청 헤더를 수정하고, proxy_cache 지시어를 사용하여 캐시를 구성할 수 있습니다. 다음은 API 게이트웨이를 설정하는 예제입니다.
http {
upstream backend {
server backend-server1:8080;
server backend-server2:8080;
}
server {
listen 80;
server_name api.example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_cache_bypass $http_pragma;
proxy_cache_revalidate on;
proxy_cache_valid 200 60m;
proxy_cache_valid 404 1m;
proxy_cache_methods GET HEAD POST;
proxy_cache_key "$scheme$request_method$host$request_uri";
add_header X-Cache-Status $upstream_cache_status;
}
}
}
위 설정 파일에서는 다음과 같은 작업을 수행합니다.
- 위 설정 파일에서는 api.example.com 도메인으로 들어오는 모든 요청을 백엔드 API 서버로 전달합니다.
- upstream 블록에서는 백엔드 서버의 주소를 정의하고,
- location 블록에서는 요청을 전달하고 헤더를 수정하며, 캐시를 구성합니다.
- proxy_cache_valid 지시어를 사용하여 캐시 유효 기간을 설정할 수 있으며,
- add_header 지시어를 사용하여 캐시 상태를 확인할 수 있습니다.
'nginx' 카테고리의 다른 글
nginx upstream module - part1 (load balancing) (0) | 2023.06.15 |
---|---|
nginx cache status 확인 (0) | 2023.06.15 |
nginx cache-control 및 priority (0) | 2023.06.14 |
cli로 nginx cache file 찾기, 삭제 및 TTL변경 (0) | 2023.06.14 |
nginx cache key설정 (0) | 2023.06.11 |