Nginx는 웹 서버, 리버스 프록시, 로드 밸런서 및 HTTP 캐시 기능을 제공하는 오픈 소스 소프트웨어입니다. Nginx는 높은 성능과 낮은 리소스 사용량으로 유명하며, 웹 트래픽을 효율적으로 처리할 수 있습니다.
웹 서버:
<aside> 💡 웰드코리아는 HTML, CSS, JS 이미지는 클라이언트에서 빌드된 파일을 서빙합니다.
</aside>
<aside> 💡 Static(기량검증 이미지, 온라인 동영상 컨텐츠)은 Google Cloud Storage를 통하여 전달되고, Asset(배너 이미지, favicon 이미지 등)은 nginx가 전달합니다.
</aside>
리버스 프록시:
<aside> 💡 /api로 시작하는 요청은 메인 웹서버로 보냅니다.
</aside>
로드 밸런싱:
HTTP 캐시:
SSL/TLS 종단:
<aside> 💡 HTTPS 인증은 Letsencrypt를 이용하여 인증합니다. 이때, 3개월마다 갱신해줘야합니다.
</aside>
user nobody nogroup;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
gzip_min_length 256;
gzip_types
application/json
application/javascript
text/javascript
text/css
text/plain;
# Allow maximum 110M size reqeust (for uploading files).
client_max_body_size 110M;
# To allow POST on static pages
error_page 405 =200 $uri;
server {
listen 80;
server_name weldkorea.com www.weldkorea.com;
server_tokens off;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl http2;
server_name weldkorea.com;
server_tokens off;
root /client/build;
# For SSL
ssl_certificate /etc/letsencrypt/live/weldkorea.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/weldkorea.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location /api {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass <http://web:8000/api>;
proxy_redirect off;
}
# Longer cache duration for images and pdf.
location ~* "/static.*(png|jpe?g|webp|svg|pdf)$" {
root /;
expires 30d;
}
location ~* "/assets.*(png|jpe?g|webp|svg|pdf)$" {
root /client/build;
expires 30d;
}
location /static {
root /;
expires 1d;
}
location / {
try_files $uri $uri/ /index.html;
}
}
}