Nginx.conf 설정
- worker_processes는 CPU 갯수, worker_connections는 1프로세스당 클라이언트 갯수를 넣으면 된다.
- access.log 파일을 json 형식으로 출력하였다. json_combined
- gzip 옵션 on 설정을 해주었다.
- server_tokens off 설정을 통해 버전이 노출되지 않도록 한다.
- client_max_body_size 를 설정하여 파일 업로드 크기 설정을 한다.
- X-Frame-Options, X-Content-Type-Options, X-XSS-Protection 옵션을 설정하여 보안을 추가하였다.
- charset은 utf-8로 설정한다.
- "/" 요청은 GET 메소드만 허용하도록 하였다.
- js/css/image 파일은 access 로그에서 제외하였다.
- 아래 샘플에서 ssl 설정은 주석처리 되어 있다.
user nginx;
worker_processes auto; # CPU count
#pid ./nginx.pid;
events {
worker_connections 1024; # Client Count
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 10;
types_hash_max_size 2048;
server_tokens off; # nginx 버전 노출 제한
server_names_hash_bucket_size 64; # 서버명 길이 기본값 : 32
server_names_hash_max_size 2048; # 서버명 길이 기본값 : 512
client_max_body_size 10M; # 파일 업로드 최대 사이즈 (기본 1MB)
gzip on; # gzip 설정 on
charset utf-8;
add_header X-Frame-Options SAMEORIGIN; # 도메인 기준으로 iframe 제한 (Deny : 모든 iframe제한, ALLOW-From Url : 주소를 설정하고 해당 주소는 가능)
add_header X-Content-Type-Options "nosniff"; # 잘못된 Mime 타입 제한
add_header X-XSS-Protection "1; mode=block"; # XSS 세션 하이재킹 방지
log_format json_combined '{ "time": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"request": "$request", '
'"request_method": "$request_method", '
'"request_uri": "$request_uri", '
'"uri": "$uri", '
'"query_string": "$query_string", '
'"http_referrer": "$http_referer", '
'"http_user_agent": "$http_user_agent" }';
# Combined로 설정하지 않으면, 공격 여부 파악, 공격자 사용 툴 파악, 공격자 위치 파악이 불가능하므로 반드시 Combined 포맷 또는 그에 준하는 포맷 스트링으로 설정해야 함.
access_log /var/log/nginx/access.log json_combined;
error_log /var/log/nginx/error.log warn;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
fastcgi_hide_header X-Powered-By; # 개발 언어 표시 제
fastcgi_hide_header X-Pingback; # http 프로토콜에서 xml 전송 제한
fastcgi_hide_header Link; # xml 관련 w3c 표준이지만 특별히 사용안한다면 막는다.
proxy_hide_header X-Powered-By;
proxy_hide_header X-Pingback;
proxy_hide_header X-Link;
charset utf-8;
location / {
root html;
index index.html index.htm;
# GET 메소드만 허용
if ( $request_method !~ ^(GET)$ ) {
return 444;
}
}
# js/css/image file access log off
location ~* \.(js|css|png|jpg|jpeg|gif|ico) {
access_log off;
}
error_page 404 /404.html; # error page 설정
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# HTTPS server
#server {
# listen 443 ssl;
# server_name localhost;
#
# ssl on;
#
# # === cert config start ===
# #ssl_certificate /{path}/{filename}.pem;
# #ssl_certificate_key /{path}/{filename}.key;
# #ssl_dhparam /{path}/{filename}.pem;
# # === cert config end ===
#
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
#
# ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# add_header Strict-Transport-Security "max-age=15768000; includeSubDomains";
#
# location / {
# root html;
# index index.html index.htm;
# }
#}
include servers/*;
}
Docker-compose 파일
version: '3'
services:
nginx:
container_name: nginx
image: nginx
ports:
- 80:80
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
`docker-compose up` 명령어를 실행해서 nginx 컨테이너를 실행한다.
curl localhost:80 결과
access.log 파일 확인
{ "time": "2020-02-01T00:00:47+09:00", "remote_addr": "::1", "remote_user": "-",
"body_bytes_sent": "612", "request_time": "0.000", "status": "200",
"request": "GET / HTTP/1.1", "request_method": "GET", "request_uri": "/",
"uri": "/index.html", "query_string": "-", "http_referrer": "-",
"http_user_agent": "curl/7.64.1" }
'Develop > infra' 카테고리의 다른 글
Datadog 이란? (0) | 2021.08.23 |
---|---|
CDC - debezium 설정 (1) | 2021.07.25 |
Docker Compose 이용한 ElasticSearch Cluster, Kibana 구성 (0) | 2020.12.15 |
Kubernetes 개념 (0) | 2020.11.24 |
MacOS Kubernetes 사용하기 (0) | 2020.11.23 |