μμ§μμ€λ‘ μμ보λ 리λ²μ€ νλ‘μ
μλ νμΈμ Mambo μ λλ€.
μ€λμ μΉ μλΉμ€ μΈνλΌμμ 리λ²μ€ νλ‘μ ꡬμ±μ μν΄ μ¬μ©λλ Nginxμ ν¨κ» 리λ²μ€ νλ‘μμ λν΄ μμλ³΄κ³ μ ν©λλ€.
Nginx
Nginxλ μ μ νμΌμ λ°°ν¬ν μ μλ HTTP μΉ μλ²μ λλ€. μ΅κ·Ό μ ν리μΌμ΄μ μλ²λ₯Ό λ°°ν¬νλ κ²½μ° λ¨λ μΌλ‘ ꡬμ±νμ§ μκ³ Nginxλ₯Ό ν¨κ» μ¬μ©ν©λλ€. μλ§μ‘΄ μΉ μλΉμ€μ Elastic Beanstalk νκ²½μμλ 리λ²μ€ νλ‘μ ꡬμ±μ μνμ¬ Nginxλ₯Ό κΈ°λ³Έμ μΌλ‘ μ 곡νκ³ μμ΅λλ€. μ΄λ κ² μ ν리μΌμ΄μ μλ² μμμ λ¨Όμ νΈλν½μ μ²λ¦¬νλλ‘ κ΅¬μ±νλ 리λ²μ€ νλ‘μλ₯Ό μ¬μ©νλ μ΄μ λ 무μμΌκΉμ?
리λ²μ€ νλ‘μ
리λ²μ€ νλ‘μλ μ¬μ©μμ μμ²μ λν μ¬νμ²λ¦¬λ₯Ό μννμ¬ μ ν리μΌμ΄μ μλ²λ‘ νΈλν½μ μ λ¬λλλ‘ νλ κ²μ λ§ν©λλ€. 리λ²μ€ νλ‘μ ꡬμ±μ μ₯μ μ μ¬μ©μμκ² μ ν리μΌμ΄μ μλ²κ° μ€νλλ μμ΄νΌ λλ ν¬νΈλ₯Ό 곡κ°νμ§ μκ±°λ μλͺ»λ μμ²μ μ ν리μΌμ΄μ μλ²κΉμ§ μ λ¬λμ§ μλλ‘νμ¬ λ³΄νΈν μ μμ΅λλ€.
λ‘λ λ°Έλ°μ±
리λ²μ€ νλ‘μλ₯Ό ꡬμ±ν¨μΌλ‘μ¨ μ¬μ©μλ νΉμ μ ν리μΌμ΄μ μλ²λ‘ μ§μ μμ²νλ κ΅¬μ‘°κ° μλλ―λ‘ λμμ λ°μνλ μ λ§μ μΉ μμ²μ 1κ° μ΄μμΌλ‘ μ€νλ λ€μμ μ ν리μΌμ΄μ μλ²λ‘ λ‘λλ°Έλ°μ±(νΈλν½μ λΆμ°) ν¨μΌλ‘μ¨ μ ν리μΌμ΄μ μλ²μ λν λΆνλ₯Ό μ€μΌ μ μμ΅λλ€.
λ¬Όλ‘ , μν½ κ²μμ¦μ 340λ§ λμ μ μ΄ν μλΉμ€ λ€μ΄ κ΄λ ¨ μ¬ν λΆμ λ΄μ©μ²λΌ 리λ²μ€ νλ‘μλ₯Ό ꡬμ±νλ€κ³ ν΄μ λͺ¨λ νΈλν½μ κ°λΉν μ μλ κ²μ μλλλ€.
SSL μ€νλ‘λ
Nginxλ‘ λ¦¬λ²μ€ νλ‘μλ₯Ό ꡬμ±ν¨μΌλ‘μ¨ μνν μ μλ μ¬νμ²λ¦¬ μ€ νλλ SSL μ€νλ‘λμ λλ€. 리λ²μ€ νλ‘μλ₯Ό μννλ μΉ μλ²μμ SSL μΈμ¦μλ₯Ό κ΄λ¦¬νκ³ SSL Terminationμ μνν¨μΌλ‘μ¨ μ ν리μΌμ΄μ μλ²κ° νΈλν½ μνΈνλ₯Ό μν΄ μννλ λΆνμ κ΄λ¦¬ ν¬μΈνΈλ₯Ό μ€μΌ μ μμ΅λλ€.
μ μ νμΌ μΊμ
μ ν리μΌμ΄μ μλ²κ° λ°°ν¬νλ μ μ νμΌμ λν΄μ Nginx μ체μ μΌλ‘ μΊμνμ¬ μ μ νμΌμ μλ΅ν μ μμ΅λλ€. μ ν리μΌμ΄μ μλ²λ‘ μ λ¬λλ νΈλν½μ΄ λ§μμ§ κ²½μ° μ μ νμΌμ μλ΅νκΈ° μν μμ²μ μ²λ¦¬νλ κ²λ λΆλ΄μ΄ λ μ μμ΅λλ€. λ§μ νΈλν½μ μ μ 리μμ€λ₯Ό μ¬μ©νμ¬ μ²λ¦¬ν μ μλ μΉ μλ²μμ μ μ νμΌμ λν μμ²μ μ²λ¦¬νμ¬ μ ν리μΌμ΄μ μλ²μ λΆλ΄μ μ€μΌ μ μκ² λ©λλ€.
μ°½μ²ν₯λ‘λμ Nginx Cache λ¬Έμ ν΄κ²° μ리μ¦μ²λΌ μΊμλ₯Ό μ ꡬμ±ν΄μΌν μ μμ΅λλ€.
Nginx λ컀 컨ν μ΄λ νμ΅
λ컀λ μ΄λ ν κΈ°μ μ νμ΅νκΈ° μν νκ²½μ ꡬμ±νκΈ°μ μ ν©ν λꡬμ λλ€. λ컀λ₯Ό μ¬μ©νμ¬ μ ν리μΌμ΄μ μλ²μ ν¨κ» 리λ²μ€ νλ‘μλ₯Ό ꡬμ±νλ Nginxλ₯Ό μ€μ ν΄λ³΄λ©° νμ΅ν΄λ³΄λλ‘ νκ² μ΅λλ€.
μ μ νμ΅ νκ²½μ λ€μκ³Ό κ°μ΅λλ€. νκ²½μ΄ λ€λ₯Έ κ²½μ° λ€λ₯Έ λΆλΆμ΄ μ‘΄μ¬ν μ μμΌλ μ£Όμν΄μΌν©λλ€.
- Docker version 20.10.8, build 3967b7d
- Nginx 1.21.3
- Amazon Corretto 11
κ·Έλ¦¬κ³ νμ΅μ νμ©λ νμΌλ€μ κΉνλΈμ 곡μ λμ΄μμΌλ μ°Έκ³ νμ λ μ’μ΅λλ€.
κΈ°λ³Έ 컨ν μ΄λ νκ²½
λ컀 μ»΄ν¬μ¦λ₯Ό νμ©νμ¬ μ€νλ§ λΆνΈ μ ν리μΌμ΄μ κ³Ό Nginxκ° κ΅¬λλλλ‘ μ»¨ν μ΄λ νκ²½μ ꡬμ±νμ΅λλ€.
version: '3.8'
services:
nginx:
image: nginx:1.21.3-alpine
ports:
- 80:80
- 443:443
app:
image: amazoncorretto:11-alpine
ports:
- 8080:8080
command: 'java -jar /etc/app.jar'
volumes:
- ./demo-0.0.1-SNAPSHOT.jar:/etc/app.jar
λ컀 μ»΄ν¬μ¦ λͺ λ Ήμ΄λ‘ 컨ν μ΄λ νκ²½μ μ€νν©λλ€.
docker compose up -d
[+] Running 3/3
- Network nginx_default Created
- Container nginx_nginx_1 Started
- Container nginx_app_1 Started
μ μ»΄ν¨ν° νΈμ€νΈ νμΌμ 127.0.0.1μ λνμ¬ mambo.krκ° μ§μ λμ΄μμΌλ―λ‘ λ€μκ³Ό κ°μ΄ Nginxκ° 80ν¬νΈμ λν μμ²μ λν΄ κΈ°λ³Έ νμ΄μ§λ₯Ό μλ΅νμμ΅λλ€.
κΈ°λ³Έ Nginx μ€μ
λ컀 μ»΄ν¬μ¦ λͺ λ Ήμ΄λ‘ 컨ν μ΄λ μ§μ ν κΈ°λ³ΈμΌλ‘ μ μ©λμ΄μλ Nginx μ€μ μ νμΈν΄λ³΄λλ‘ νκ² μ΅λλ€.
docker compose exec nginx sh
/ # cat /etc/nginx/nginx.conf
80ν¬νΈλ₯Ό μμ νλ μΉ μλ² μ€μ μ /etc/nginx/conf.d/default.confμ μμΉνκ³ μμμ΅λλ€. λ€μμ default.confμ μ μλ λ΄μ© μ€ μΌλΆμ λλ€.
/etc/nginx/conf.d # cat default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# ...
}
server λΈλ‘μ ν΅ν΄ 80ν¬νΈλ₯Ό μμ (listen)νμκ³ λ£¨νΈ κ²½λ‘(/)μ λν μμ²μ /usr/share/nginx/htmlμ μμΉν index.htmlμ΄λΌλ μ μ νμΌμ μλ΅νλλ‘ μ μλμ΄μμ΅λλ€.
μ¬μ©μ μ μ Nginx μ€μ
κΈ°λ³ΈμΌλ‘ μ μ©λμ΄μλ nginx.confλ₯Ό λ³Όλ₯¨μΌλ‘ μ§μ νμ¬ μ¬μ©μ μ μν μ μλλ‘ ν΄λ³΄κ² μ΅λλ€. λ컀 μ»΄ν¬μ¦ λ¬Έμμ Nginx μλΉμ€μ λ³Όλ₯¨μ μ§μ νμ¬ λ‘컬 νμΌλ‘ μ μ₯λμ΄μλ nginx.confλ₯Ό μ§μ νκ² μ΅λλ€.
version: '3.8'
services:
nginx:
image: nginx:1.21.3-alpine
ports:
- 80:80
- 443:443
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
#app:
# ...
νΈμ€νΈμ 443ν¬νΈλ₯Ό Nginx μλΉμ€μ λ°μΈλ©νμμΌλ―λ‘ 443ν¬νΈλ₯Ό μμ νλλ‘ μ μν΄λ³΄κ² μ΅λλ€.
http {
server {
listen 443 ssl;
server_name localhost 127.0.0.1 mambo.kr;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://app:8080;
}
}
include /etc/nginx/conf.d/*.conf;
}
λ컀 μ»΄ν¬μ¦λ‘ 컨ν μ΄λ νκ²½μ λ€μ μ€ννλ©΄ μ μμ μΌλ‘β¦
nginx: [emerg] no "events" section in configuration
μ€λ₯κ° λ°μνλ€μ. nginx.confμ events λΈλ‘μ νμλ‘ μ‘΄μ¬ν΄μΌνλ λ― ν©λλ€.
νλ‘μΈμ€ λ° μ²λ¦¬ μ΅μ
Nginxλ λ§μ€ν° νλ‘μΈμ€μ μ컀 νλ‘μΈμ€λ‘ ꡬμ±λμ΄ μ€μ λ‘ μμ²μ μ²λ¦¬νλ κ²μ μ컀 νλ‘μΈμ€κ° λ΄λΉν©λλ€. μ¬μ©κ°λ₯ν CPU μ½μ΄ μ λ§νΌ μ컀 νλ‘μΈμ€λ₯Ό ν λΉνλκ² μ’μΌλ©° μ컀 νλ‘μΈμ€λ³λ‘ μ¬μ©ν μ μλ μ΅λ μ΄λ¦° νμΌ κ°μ μ νμ μ€μ νλ κ²μ΄ μ’μ΅λλ€.
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65536;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
μ΄μ체μ λ³ ν¨μ¨μ μΈ μ°κ²° μ²λ¦¬ λ°©μμ΄ μμΌλ©° 리λ μ€ μ»€λ 2.6+μμλ epollμ μ¬μ©ν μ μμ΅λλ€.
Nginx μλΉμ€ 컨ν μ΄λκ° μ μμ μΌλ‘ μ€νλμ§ μμ μνμ΄λ―λ‘ λ컀 μ»΄ν¬μ¦λ‘ 컨ν μ΄λ νκ²½μ μ€νν΄μΌν©λλ€.
docker compose up -d
[+] Running 2/2
- Container nginx_nginx_1 Started
- Container nginx_app_1 Running
μ μ€νλκ²μΌλ‘ 보μ΄λ https://mambo.krμΌλ‘ μ μν΄λ³΄λλ‘ νκ² μ΅λλ€.
443 ν¬νΈλ‘ μμ²λ νΈλν½μ΄ Nginxλ₯Ό κ²½μ νμ¬ 8080ν¬νΈλ‘ μ€νλ μ ν리μΌμ΄μ μλ²λ‘ μ λ¬λκ³ μλ΅μ λ°μμ΅λλ€. λ°λ‘ μ΄κ²μ 리λ²μ€ νλ‘μλΌκ³ ν©λλ€.
리λ²μ€ νλ‘μ
리λ²μ€ νλ‘μλ₯Ό ꡬμ±νλ©΄ μ ν리μΌμ΄μ μλ²λ μ΄λμ μμ²νλμ§μ λν μ 보λ₯Ό μ μ μμ΅λλ€. κ·Έλμ Nginxμ κ°μ 리λ²μ νλ‘μλ₯Ό ꡬμ±νλ μΉ μλ²μμλ νλ‘μ κ΄λ ¨ ν€λλ₯Ό ν¨κ» μ λ¬νμ¬ μ΄λμ μμ²λμλμ§λ₯Ό μ λ¬ν μ μλλ‘ μ€μ ν μ μμ΅λλ€.
http {
server {
listen 443 ssl;
server_name localhost 127.0.0.1 mambo.kr;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://app: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;
}
}
include /etc/nginx/conf.d/*.conf;
}
μΉμμΌ νλ‘μ
HTTP 1.1 νλ‘ν μ½μ Hop-By-Hopμ΄λΌκ³ νλ Upgrade ν€λλ₯Ό μ¬μ©νμ¬ μ»€λ₯μ μ λ³κ²½νλ 맀컀λμ¦μ μ 곡ν©λλ€. Upgrading to a WebSocket connectionκ³Ό WebSocket proxying λ¬Έμλ₯Ό μ°Έκ³ νμ¬ λ€μκ³Ό κ°μ΄ μΉμμΌ νλ‘μμ λν μ€μ μ ꡬμ±ν μ μμ΅λλ€.
server {
location /ws/ {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 65s;
}
}
νλ‘μ μλ²λ κΈ°λ³Έμ μΌλ‘ 60μ΄ μ΄λ΄μ μ λ¬λλ λ°μ΄ν°κ° μλ κ²½μ° μ°κ²°μ ν΄μ§ν©λλ€. μλ₯Ό λ€μ΄, 1λΆλ§λ€ μΉμμΌμΌλ‘ μ λ¬λλ λ°μ΄ν°κ° μλ κ²½μ°λ₯Ό μν΄ proxy_read_timeoutμ μ‘°μ ν΄μΌν©λλ€.
μ΄λ²€νΈ μ€νΈλ¦Ό νλ‘μ
리λ²μ€ νλ‘μ ꡬμ±μμ SSE(Server Sent Event)μ κ°μ μ΄λ²€νΈ μ€νΈλ¦Όμ μ¬μ©νλ κ²½μ° λ²νΌλ§ μ΅μ μ λΉνμ±ν ν΄μΌν©λλ€.
- EventSource / Server-Sent Events through Nginx
- For Server-Sent Events (SSE) what Nginx proxy configuration is appropriate?
server {
location / {
proxy_buffering off;
proxy_cache off;
}
}
HTTPS 리λ€μ΄λ νΈ
μΌλ° HTTPλ₯Ό μ¬μ©νμ¬ 80ν¬νΈλ‘ μμ²ν κ²μ HTTPSλ₯Ό μ¬μ©νλλ‘ μ λνκΈ° μν΄μ HTTPS 리λ€μ΄λ νΈ μλ΅μ μ μ©ν μ μμ΅λλ€.
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
μ μ νμΌ λ°°ν¬
μΆκ°μ μΌλ‘ μ μ νμΌμ΄ ν¬ν¨λ ν΄λλ₯Ό λ³Όλ₯¨μΌλ‘ μ§μ νμ¬ Nginxμμ μ μ νμΌμ μλ΅ν μ μλλ‘ μ€μ νκ² μ΅λλ€.
version: '3.8'
services:
nginx:
image: nginx:1.21.3-alpine
ports:
- 80:80
- 443:443
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./server.crt:/etc/nginx/server.crt
- ./server.key:/etc/nginx/server.key
- ./static:/etc/nginx/static
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65536;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
http {
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name localhost 127.0.0.1 mambo.kr;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://app: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;
}
location /dist/ {
alias /etc/nginx/static/;
limit_except GET {
deny all;
}
}
}
include /etc/nginx/conf.d/*.conf;
}
μ μ νμΌκΉμ§ μλ΅ν μ μλλ‘ μ€μ νμμ΅λλ€.
Nginx μ€μ μ΅μ ν
μ¬μ©μ μ μν Nginx μ€μ λ§μΌλ‘λ 리λ²μ€ νλ‘μ λ° μ μ νμΌμ λ°°ν¬νλλ°μλ λ¬Έμ κ° μμ΅λλ€. κ·Έλ¬λ Nginxμμλ λ ν¨μ¨μ μΌλ‘ λμν μ μλλ‘ λ€μν μ΅μ μ μ 곡ν©λλ€. μ¬λ¬κ°μ§ μ΅μ λ€μ μ μ©ν΄λ³΄λ©΄μ μ΅μ νν΄λ³΄λλ‘ ν©μλ€.
Nginx μ€μ μ΅μ νμ λν΄μλ λ€μμ κΈμ μ°Έκ³ νλ©΄ μ’μ΅λλ€.
TCP μ΅μ
Nginx Optimization: understanding sendfile, tcp_nodelay and tcp_nopushμμλ TCP μ΅μ μ μ§μ νλ μ΄μ μ λν΄μ μ€λͺ ν©λλ€. λ€νΈμν¬ νκ²½μ΄ λΉ λ₯Έ κ²½μ° TCP μ€νμμ Nagle μκ³ λ¦¬μ¦μ μ¬μ©νλ κ²μ΄ λΉν¨μ¨μ μΌ μ μλ€κ³ ν©λλ€.
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
}
μμΆ μ΅μ
μΉ μμ²μ λν μλ΅ λ°μ΄ν°λ₯Ό μμΆνλ κ²μ λ€νΈμν¬ λΉμ©μ μ€μ΄κ³ λΉ λ₯΄κ² μλ΅ν μ μλ μ’μ λ°©λ²μ λλ€. μλ² μ±λ₯μ λ°λΌ μμΆ λ 벨μ μ΅λνμΌλ‘ μ§μ νλ κ²μ΄ μ’μ΅λλ€. λν, μμ ν¬κΈ°μ λ°μ΄ν°μ λνμ¬ μμΆμ μλνλ κ²λ λΉν¨μ¨μ μ λλ€.
http {
gzip on;
gzip_min_length 1k;
gzip_comp_level 9;
gzip_vary on;
gzip_disable msie6;
gzip_proxied expired no-cache no-store private auth;
gzip_types
# text/html is always compressed by HttpGzipModule
text/css
text/javascript
text/xml
text/plain
application/javascript
application/json
application/xml
font/truetype
font/opentype
application/vnd.ms-fontobject
image/svg+xml;
}
μΌλ°μ μΌλ‘ ν μ€νΈ μ νμ λ°μ΄ν°λ₯Ό μμΆνλλ‘ μ§μ ν©λλ€.
λ‘κ·Έ μ΅μ
λͺ¨λ μμ²μ λν΄ μ‘μΈμ€ λ‘κ·Έλ₯Ό μ μ₯νλ κ²μ λΉν¨μ¨μ μΌλ‘ I/Oλ₯Ό λ°μμν¬ μ μμ΅λλ€.
error_log /var/log/nginx/error.log crit;
http {
access_log off;
server {
listen 80;
access_log /var/log/nginx/access.log;
}
}
보μ μ΅μ
λ§μ μ¬λλ€μ΄ server_tokens μ΅μ μ λΉνμ±ννμ¬ μλ΅ ν€λμ Nginx λ²μ μ λͺ μνμ§ μλλ‘ κΆμ₯ν©λλ€. 곡격μλ Nginxμ νΉμ λ²μ μ μ μ μμΌλ―λ‘ λ λ§μ μ·¨μ½μ μ λν 곡격μ μλν΄μΌν©λλ€.
http {
server_tokens off;
}
ν΄λΌμ΄μΈνΈ μ΅μ
μ°κ²° μ μ§ ν΄λΌμ΄μΈνΈ μμ μ΅λ μ μ§ μκ° κ·Έλ¦¬κ³ ν΄λΌμ΄μΈνΈ μμ² ν¬κΈ°λ₯Ό μ‘°μ ν μ μμ΅λλ€.
http {
keepalive_timeout 65;
keepalive_requests 10000;
client_max_body_size 100m;
}
리λ μ€ μ»€λ νλΌλ―Έν°
Nginx μ΅μ μ μ§μ νλλΌλ μ€μ λ‘ νμ©ν μ μλμ§ λ¦¬λ μ€ μ»€λ νλΌλ―Έν°λ₯Ό κ²ν ν΄μΌν μ μμ΅λλ€.
- Linux increase ip_local_port_range TCP port range
- TCP κ΄λ ¨ μ²λ¦¬λ λ리기 - 리λ μ€ μ»€λ νλ
Nginx μ€μ λ§λ¬΄λ¦¬
μμλ³Έ λ΄μ©μ μ‘°ν©νλ©΄ λ€μκ³Ό κ°μ΄ Nginx μ€μ μ μ μν μ μκ² λ©λλ€.
user nginx;
# νλ‘μΈμ€ μ΅μ
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65536;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
pid /var/run/nginx.pid;
error_log /var/log/nginx/error.log crit;
#thread_pool backend threads=32 max_queue=65536;
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
upstream backend {
server app:8080;
keepalive 128;
}
# HTTPS 리λ€μ΄λ νΈ
server {
listen 80;
server_name _;
return 301 https://$host$request_uri;
}
# HTTPS λ° HTTP2 μ§μ
server {
listen 443 ssl http2;
server_name localhost 127.0.0.1 mambo.kr;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
# 리λ²μ€ νλ‘μ
location / {
proxy_pass http://backend;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#aio threads=backend;
access_log /var/log/nginx/access.log;
}
# 리λ²μ€ μΉμμΌ νλ‘μ
location /ws/ {
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;
# hop-by-hop
proxy_http_version 1.1;
proxy_set_header Connection "upgrade";
proxy_set_header Upgrade $http_upgrade;
proxy_read_timeout 65s;
}
location /dist/ {
alias /etc/nginx/static/;
limit_except GET {
deny all;
}
}
}
# Optimization
server_tokens off;
keepalive_timeout 65s;
client_max_body_size 100m;
# TCP μ΅μ
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# Gzip μμΆ μ΅μ
gzip on;
gzip_min_length 10k;
gzip_comp_level 9;
gzip_vary on;
gzip_disable msie6;
gzip_proxied expired no-cache no-store private auth;
gzip_types
# text/html is always compressed
text/css
text/javascript
text/xml
text/plain
application/javascript
application/json
application/xml
font/truetype
font/opentype
application/vnd.ms-fontobject
image/svg+xml;
# νμΌ λ¦¬μ€νΈ λΉνμ±ν
autoindex off;
include /etc/nginx/conf.d/*.conf;
}
λ컀 μ»΄ν¬μ¦λ₯Ό μ¬μ©νμ¬ μ€νλμ΄μλ Nginx νλ‘μΈμ€μ λ³κ²½λ μ€μ μ λ°μνλ©΄μ λ§μΉλλ‘ νκ² μ΅λλ€.
docker compose exec nginx nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
docker compose exec nginx nginx -s reload
2021/09/25 09:38:03 [notice] 34#34: signal process started
κ°μ¬ν©λλ€.