Nginx

Nginx restrict access by ip 사용자 ip로 제한하기-2(추가작업)

babbeolicoding 2023. 6. 27. 23:10

지난 포스팅에서 nginx에서 ip를 기준으로

사용자 접근을 허용, 제한하는 방법에 대해서 알아봤다.

 

https://babbeolicoding.tistory.com/55

 

Nginx restrict access by ip 사용자 ip로 제한하기

우선 기본적으로 nginx에서 ip기준으로 서비스를 차단, 허용하는 방법은 allow, deny를 사용하는 것이다. allow ip deny all; -> 이런 경우특정 ip 만 허용되고 나머지 경우는 전부 차단된다. 하지만 lb를 통

babbeolicoding.tistory.com

 

지난 시간에 포스팅한 내용에서
2번 방법을 사용하면 /etc/nginx/nginx.conf가 아닌
/etc/nginx/conf.d/*.conf 파일들에 각각 if 문을 적용해야 한다.
서비스가 추가될때 마다 해당 if문을 추가하기란 너무 번거롭다.


이런 경우 정책을 관리하는 파일을 만들어

그 파일을 include 시키면 한 곳에서 관리가 가능하다.

나는 이름을 location으로 지어서 사용했다.(이름을 아무렇게나 지어도 상관없다)

적용하는 방법은 location이라는 파일을 만들어
적용할 조건을 세팅한다.
(참고로 location 파일을 포함하는 기본 경로는 /etc/nginx/ 이다)

 

파일 생성 후 각 /etc/nginx/conf.d/*.conf 파일 안에 include locations; 라는 구문만 추가해주면 된다.

server {
    listen 80;
    include locations;
    server_name example.com;
    location /{
        proxy_pass https://{upstream+_name};
    }
}

 

 

추가적으로 nginx에서 if문 안에 if문을 사용하는 방법도 있다.
만약 조건 1,2가 성립하는 경우만 403으로 return을 하고 싶은 경우
아래 방법을 사용하면 된다.

set $test  "";

# 조건 1이 성립할때
if ( $http_x_forwarded_for = "test11")
{
    set $test "true"; 
}

# 조건 2가 성립할때
if ( $http_x_forwarded_for !~ 'test22' )
{
    set $test "${test}+true"; 
}

if ($test = "true+true") { 
    return 403 "deny";
}