카테고리 없음

Nginx 보안 취약점 수정

Code Canvas 2025. 3. 26. 15:59

1. GET, POST, HEAD, OPTIONS HTTP 메서드만 허용

  • GET, POST만 허용 (나머지 PUT, DELETE, PATCH, OPTIONS 등) 403 Forbidden 에러 발생
server {
	listen 80;
	server_name xxx.com;
    
    //GET, POST 메서드만 허용
    location / {
    	limit_except GET POST {
        	deny all;
        }
        
        proxy_pass http://localhost:8080/;
        proxy_set_header X-Real-IP $reomote_addr;
        proxy_set_header X-Forwarded-For $proxy-add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
}

 

1.1 proxy_pass http://localhost:8080:

 'http://localhost/' 들어오는 요청을 http://localhost:8080/으로 전달하는 역할

 

1.2 proxy_set_header Host $http_host;

클라이언트가 example.com 에 요청을 보냈다면, 이 Host 헤더는 벡엔드 서버에 example로 전달됨

 

1.3 proxy_set_header X-Real-IP $reomote_addr;

클라이언트의 실제 IP 주소를 벡엔드 애플리케이션 서버에 전달할 때 사용

 

1.4 proxy_set_header X-Forwarded-For $proxy-add_x_forwarded_for;

 X-Forwarded-For 헤더 값에 클라이언트의 IP 주소를 덧붙여 추가하는 방식

-  X-Forwarded-For : HTTP 헤더로, 클라이언트의 원본 IP 주소를 추적하기 위해 사용

 

 

1.5 위에 설정을 명시적으로 추가하는 이유

proxy_pass http://localhost:8080/;
proxy_set_header X-Real-IP $reomote_addr;
proxy_set_header X-Forwarded-For $proxy-add_x_forwarded_for;
proxy_set_header Host $http_host;

 

Nginx는 리버스 프록시 역할을 할 때, 기본적으로 모든 헤더를 자동으로 설정하지 않기 때문에, 개발자가 명시적으로 설정을 추가해줘야 한다. 

 

 

1.6 왜 nginx는 기본적으로 제공하지 않는것인가? 

 

1.보안상 이유 () Nginx는 클라이언트의 정보를 지나치게 노출하지 않도록 설계되어 있음.ex) 클라이언트의 IP 주소

2. 성능 최적화( 자동으로 모든 헤더를 처리하려면 추가적인 비용이 발생 하기 떄문)

3. 구체적인 설정을 요구하기 위해 

4. 다양한 배포 환경에 맞춘 유연성(nginx는 범용적인 웹 서버/프록시 서버로 설계되어 있음)

 

 

2.400, 500 에러코드 설정

server {
	listen 80;
	server_name xxx.com;
    
    location / {
    	limit_except GET POST {
        	deny all;
        }
        
        proxy_pass http://localhost:8080;
        proxy_set_header X-Real-IP $reomote_addr;
        proxy_set_header X-Forwarded-For $proxy-add_x_forwarded_for;
        proxy_set_header Host $http_host;
    }
    
    //에러 페이지 설정
    error_page 400 500 /error.html;
}