Nginx ์ค์ ํ์ผ
๊ฐ์
Nginx์ ๋ชจ๋ ๋์์ /etc/nginx/nginx.conf ์ค์ ํ์ผ์ ์ํด ๊ฒฐ์ ๋๋ค. ์ง์์ด(Directive)์ ๋ธ๋ก(Block)์ผ๋ก ๊ตฌ์ฑ๋ ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค.
Nginx์ ํต์ฌ์ ๊ฒฐ๊ตญ ์ค์ ํ์ผ์ด์์. Nginx ์์ฒด๋ ๊ทธ๋ฅ ์์ง์ด๊ณ , ์ด๋ป๊ฒ ๋์ํ ์ง๋ ์ ๋ถ ์ค์ ํ์ผ์์ ์ ํ๊ฑฐ๋ ์. ๋น์ ํ์๋ฉด, Nginx๋ ๋น ์ค๋งํธํฐ์ด๊ณ , ์ค์ ํ์ผ์ ์ฑ์ ์ค์นํ๊ณ ํ๊ฒฝ์ ์ธํ
ํ๋ ๊ฑฐ์์.
์ค์ ํ์ผ์ ์ ๋ค๋ฃจ๋ฉด ์ ์ ํ์ผ ์๋น, ๋ฆฌ๋ฒ์ค ํ๋ก์, ๋ก๋ ๋ฐธ๋ฐ์ฑ, SSL ๋ฑ ๋ญ๋ ํ ์ ์์ด์!
์ค์ ํ์ผ ์ ์ฒด ๊ตฌ์กฐ
graph TD
A["nginx.conf<br/>๋ฉ์ธ ์ค์ ํ์ผ"] --> B["์ ์ญ ๋ธ๋ก (main)<br/>์์ปค ํ๋ก์ธ์ค, ๋ก๊ทธ ๋ฑ"]
A --> C["events ๋ธ๋ก<br/>์ฐ๊ฒฐ ์ฒ๋ฆฌ ๋ฐฉ์"]
A --> D["http ๋ธ๋ก<br/>์น ์๋ฒ ์ค์ "]
D --> E["server ๋ธ๋ก<br/>๊ฐ์ ํธ์คํธ (์ฌ์ดํธ๋ณ)"]
D --> F["upstream ๋ธ๋ก<br/>๋ฐฑ์๋ ์๋ฒ ๊ทธ๋ฃน"]
E --> G["location ๋ธ๋ก<br/>URL ๊ฒฝ๋ก๋ณ ์ฒ๋ฆฌ"]
style A fill:#FFD700
style D fill:#87CEEB
style E fill:#90EE90
style G fill:#FFB3B3Mermaid
๋ณต์ฌ
graph LR
subgraph "๊ณ์ธต ๊ตฌ์กฐ"
M[main] --> EV[events]
M --> H[http]
H --> S1[server 1]
H --> S2[server 2]
S1 --> L1[location /]
S1 --> L2[location /api/]
S2 --> L3[location /]
endMermaid
๋ณต์ฌ
nginx.conf ์ ์ฒด ์์ (์ฃผ์ ํด์ค)
# ============================================
# ์ ์ญ ๋ธ๋ก (main context)
# ============================================
user www-data; # Nginx ์์ปค ํ๋ก์ธ์ค ์คํ ์ฌ์ฉ์
worker_processes auto; # ์์ปค ํ๋ก์ธ์ค ์ (auto = CPU ์ฝ์ด ์)
pid /run/nginx.pid; # PID ํ์ผ ์์น
error_log /var/log/nginx/error.log warn; # ์๋ฌ ๋ก๊ทธ ๊ฒฝ๋ก ๋ฐ ๋ ๋ฒจ
# ============================================
# events ๋ธ๋ก
# ============================================
events {
worker_connections 1024; # ์์ปค๋น ์ต๋ ๋์ ์ฐ๊ฒฐ ์
multi_accept on; # ํ ๋ฒ์ ์ฌ๋ฌ ์ฐ๊ฒฐ ์๋ฝ
}
# ============================================
# http ๋ธ๋ก
# ============================================
http {
# MIME ํ์
์ค์
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"';
access_log /var/log/nginx/access.log main;
# ์ฑ๋ฅ ์ต์ ํ
sendfile on; # ์ปค๋์์ ์ง์ ํ์ผ ์ ์ก
tcp_nopush on; # ํจํท ์ต์ ํ
keepalive_timeout 65; # ์ฐ๊ฒฐ ์ ์ง ์๊ฐ (์ด)
gzip on; # gzip ์์ถ ํ์ฑํ
# ์ฌ์ดํธ๋ณ ์ค์ ํ์ผ ํฌํจ
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Plain Text
๋ณต์ฌ
๊ฐ ๋ธ๋ก ์์ธ ์ค๋ช
1. ์ ์ญ ๋ธ๋ก (main)
์ง์์ด | ๊ฐ | ์ค๋ช
|
user | www-data | ์์ปค ํ๋ก์ธ์ค ์คํ ์ฌ์ฉ์ |
worker_processes | auto | ์์ปค ํ๋ก์ธ์ค ์ (auto = CPU ์ฝ์ด ์๋งํผ) |
pid | /run/nginx.pid | ๋ง์คํฐ ํ๋ก์ธ์ค PID ํ์ผ ์์น |
error_log | ๊ฒฝ๋ก ๋ ๋ฒจ | ์๋ฌ ๋ก๊ทธ ํ์ผ๊ณผ ๋ก๊ทธ ๋ ๋ฒจ |
์ ์ญ ๋ธ๋ก์ Nginx ์ ์ฒด์ ์ํฅ์ ์ฃผ๋ ์ค์ ์ด์์. ์ด๋ค ๋ธ๋ก์๋ ์ํ์ง ์๋ ์ต์์ ๋ ๋ฒจ์ ์ค์ ๋ค์ด ์ฌ๊ธฐ์ ์์.
2. events ๋ธ๋ก
์ง์์ด | ๊ฐ | ์ค๋ช
|
worker_connections | 1024 | ์์ปค ํ๋๊ฐ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์ฐ๊ฒฐ ์ |
multi_accept | on | ํ ๋ฒ์ ์ฌ๋ฌ ์ฐ๊ฒฐ์ ๋์์ ์๋ฝ |
use | epoll | ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ์ (๋ฆฌ๋
์ค: epoll) |
์ต๋ ๋์ ์ฐ๊ฒฐ ์ = worker_processes ร worker_connections
์: 4 ร 1024 = 4,096๊ฐ ๋์ ์ฐ๊ฒฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ!
3. http ๋ธ๋ก
http ๋ธ๋ก์ ์น ์๋ฒ ๊ด๋ จ ๋ชจ๋ ์ค์ ์ ๊ฐ์ธ๋ ํฐ ๋ธ๋ก์ด์์. ์ฌ๊ธฐ ์์ server ๋ธ๋ก, upstream ๋ธ๋ก ๋ฑ์ด ๋ค์ด๊ฐ์.
4. server ๋ธ๋ก (๊ฐ์ ํธ์คํธ)
server {
listen 80; # ์์ ํฌํธ
server_name example.com www.example.com; # ๋๋ฉ์ธ
root /var/www/html; # ์น ๋ฃจํธ ๋๋ ํ ๋ฆฌ
index index.html; # ๊ธฐ๋ณธ ๋ฌธ์
location / {
try_files $uri $uri/ =404;
}
}
Plain Text
๋ณต์ฌ
์ง์์ด | ์ค๋ช
| ์์ |
listen | ์์ ํ ํฌํธ | 80, 443 ssl |
server_name | ๋งค์นญํ ๋๋ฉ์ธ ์ด๋ฆ | example.com *.example.com |
root | ์น ํ์ผ์ด ์๋ ๋๋ ํ ๋ฆฌ | /var/www/html |
index | ๊ธฐ๋ณธ ๋ฌธ์ ํ์ผ๋ช
| index.html index.htm |
server ๋ธ๋ก ํ๋๊ฐ ํ๋์ ์น์ฌ์ดํธ๋ฅผ ๋ด๋นํด์. ๋๋ฉ์ธ๋ณ๋ก ๋ค๋ฅธ server ๋ธ๋ก์ ๋ง๋ค๋ฉด, ํ ๋์ ์๋ฒ์์ ์ฌ๋ฌ ์น์ฌ์ดํธ๋ฅผ ์ด์ํ ์ ์์ด์!
5. location ๋ธ๋ก (URL ๊ฒฝ๋ก๋ณ ์ฒ๋ฆฌ)
graph TD
A["ํด๋ผ์ด์ธํธ ์์ฒญ<br/>URL ๊ฒฝ๋ก"] --> B{location ๋งค์นญ}
B -->|"/"| C["location / <br/>๊ธฐ๋ณธ ๋งค์นญ"]
B -->|"/api/"| D["location /api/<br/>ํ๋ก์ ์ ๋ฌ"]
B -->|"/images/"| E["location /images/<br/>์ ์ ํ์ผ + ์บ์ฑ"]
B -->|".php$"| F["location ~ \\\\.php$<br/>์ ๊ท์ ๋งค์นญ"]
style C fill:#90EE90
style D fill:#87CEEB
style E fill:#FFD700
style F fill:#DDA0DDMermaid
๋ณต์ฌ
location ๋งค์นญ ์ฐ์ ์์
์์ | ๊ธฐํธ | ์๋ฏธ | ์์ |
1 | = | ์ ํํ ์ผ์น | location = /favicon.ico |
2 | ^~ | ์ ๋์ฌ ์ผ์น (์ ๊ท์ ๋ฌด์) | location ^~ /images/ |
3 | ~ | ์ ๊ท์ ์ผ์น (๋์๋ฌธ์ ๊ตฌ๋ถ) | location ~ \\.php$ |
4 | ~* | ์ ๊ท์ ์ผ์น (๋์๋ฌธ์ ๋ฌด์) | location ~* \\.(jpg\|png)$ |
5 | (์์) | ์ ๋์ฌ ์ผ์น (์ผ๋ฐ) | location /api/ |
6 | / | ๊ธฐ๋ณธ ๋งค์นญ (๋ชจ๋ ์์ฒญ) | location / |
์ฐ์ ์์๊ฐ ๋์ ๊ฒ๋ถํฐ ๋งค์นญ๋ผ์. ์๋ฅผ ๋ค์ด /favicon.ico ์์ฒญ์ด ์ค๋ฉด, location = /favicon.ico(์ ํ ๋งค์นญ)๊ฐ location /(๊ธฐ๋ณธ ๋งค์นญ)๋ณด๋ค ๋จผ์ ์ ํ๋ผ์.
์์ฃผ ์ฐ๋ ์ค์ ํจํด
์ ์ ํ์ผ ์๋น
location / {
root /var/www/html;
index index.html;
try_files $uri $uri/ /index.html; # SPA(React) ๋์
}
Plain Text
๋ณต์ฌ
๋ฆฌ๋ฒ์ค ํ๋ก์
location /api/ {
proxy_pass <http://localhost: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_set_header X-Forwarded-Proto $scheme;
}
Plain Text
๋ณต์ฌ
์ ์ ํ์ผ ์บ์ฑ
location ~* \\.(css|js|png|jpg|gif|ico|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
Plain Text
๋ณต์ฌ
HTTP โ HTTPS ๋ฆฌ๋ค์ด๋ ํธ
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
Plain Text
๋ณต์ฌ
์ค์ ํ์ผ ๊ด๋ฆฌ ๋ฐฉ์
flowchart TD
A["nginx.conf<br/>(๋ฉ์ธ โ ๊ฑด๋๋ฆฌ์ง ์์)"] -->|include| B["sites-enabled/*<br/>(ํ์ฑํ๋ ์ฌ์ดํธ)"]
A -->|include| C["conf.d/*.conf<br/>(์ถ๊ฐ ์ค์ )"]
D["sites-available/<br/>(๋ชจ๋ ์ฌ์ดํธ ์ค์ ๋ณด๊ด)"] -->|"์ฌ๋ณผ๋ฆญ ๋งํฌ"| B
style A fill:#FFD700
style B fill:#90EE90Mermaid
๋ณต์ฌ
๊ถ์ฅ ๋ฐฉ์: nginx.conf๋ ๊ฐ๊ธ์ ์์ ํ์ง ๋ง๊ณ , ์ฌ์ดํธ๋ณ ์ค์ ์ sites-available/์ ํ์ผ์ ๋ง๋ ๋ค sites-enabled/์ ๋งํฌ!
# ์ ์ฌ์ดํธ ์ค์ ๋ง๋ค๊ธฐ
sudo nano /etc/nginx/sites-available/mysite.conf
# ํ์ฑํ (์ฌ๋ณผ๋ฆญ ๋งํฌ)
sudo ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/
# ๊ธฐ๋ณธ ์ฌ์ดํธ ๋นํ์ฑํ (ํ์์)
sudo rm /etc/nginx/sites-enabled/default
# ํ
์คํธ ํ ์ ์ฉ
sudo nginx -t && sudo systemctl reload nginx
Bash
๋ณต์ฌ
์ฃผ์ ๋ณ์ (Variables)
Nginx๊ฐ ์์ฒญ ์ฒ๋ฆฌ ๊ณผ์ ์์ ์๋์ผ๋ก ์ฑ์์ ์ ๊ณตํ๋ ๋ด์ฅ(๋ฏธ๋ฆฌ ์ ์๋) ๋ณ์๋ผ์ ๋ณ๋๋ก ์ ์ธํ์ง ์๊ณ ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ด์.
๋ณ์ | ์ค๋ช
| ์์ ๊ฐ |
$host | ์์ฒญ๋ ํธ์คํธ๋ช
| example.com |
$uri | ํ์ฌ ์์ฒญ URI | /api/users |
$request_uri | ์ฟผ๋ฆฌ์คํธ๋ง ํฌํจ URI | /api/users?page=1 |
$remote_addr | ํด๋ผ์ด์ธํธ IP | 192.168.1.100 |
$scheme | ํ๋กํ ์ฝ | http ๋๋ https |
$server_name | server_name ๊ฐ | example.com |
$request_method | HTTP ๋ฉ์๋ | GET, POST |
$status | ์๋ต ์ํ ์ฝ๋ | 200, 404 |
ํต์ฌ ์ ๋ฆฌ
Nginx ์ค์ = ์ง์์ด(Directive)์ ๋ธ๋ก(Block)์ ๊ณ์ธต ๊ตฌ์กฐ
ํต์ฌ ๋ธ๋ก: main โ events โ http โ server โ location
server ๋ธ๋ก = ๊ฐ์ ํธ์คํธ (๋๋ฉ์ธ๋ณ ์ฌ์ดํธ ์ค์ )
location ๋ธ๋ก = URL ๊ฒฝ๋ก๋ณ ์ฒ๋ฆฌ ๊ท์น
์ค์ ๊ด๋ฆฌ:
sites-available/์ ๋ณด๊ด โ sites-enabled/์ ๋งํฌ โ nginx -t โ reload




