nginx에서 로컬 사용자 만 허용 외부 IP가 아닌 로컬 호스트에 바인딩하기 위해

127.0.0.1 만 액세스 할 수 있도록 일부 VHost에 대한 액세스를 제한하고 싶습니다. 항상 VHost를 외부 IP가 아닌 로컬 호스트에 바인딩하기 위해 다음과 같은 것을 사용했습니다.

server {
    listen 127.0.0.1;
    server_name myvhost.local;
    location / {
        ....
    }
}

그러나 일부 자습서에는 allowlocalhost에 대한 명시 적 지시문이 포함되어 있으며 다른 모든 호스트를 신속하게 거부하는 것으로 나타났습니다 .

server {
    listen 127.0.0.1;
    server_name myvhost.local;
    location / {
        allow 127.0.0.1;
        deny all;
        ...
    }
}

127.0.0.1에서만 이미 청취 할 때 이러한 allow/ deny지시문이 실제로 필요합니까?



답변

listen지시어는 웹 서버 바인딩 자체를 인터페이스 무엇에 운영 체제를 알려줍니다. 따라서 netstat -anginx를 시작한 후 살펴보면 nginx가 127.0.0.1 IP 포트 80에서만 수신한다는 것을 알 수 있습니다. 이는 다른 인터페이스를 통해 nginx 서버에 연결할 수 없음을 의미합니다.

특정 IP 주소에 대한 바인딩은 실제 네트워크 스택 에서 nginx 구성 의 allow/ deny지시문 보다 낮은 수준에서 작동 합니다.

즉 , 네트워크 스택에서 연결이 제한되어 있으므로 사용 사례와 함께 구성 내에 별도의 allow/ deny지시문이 필요하지 않습니다 .

사용자가 지정 listen 80;하고 allow/ deny지시문을 사용 하면 nginx는 클라이언트에 HTTP 오류 코드를 전송하여 액세스가 거부되었음을 알려줍니다.

listen 127.0.0.1;경우 브라우저에 연결할 TCP 포트가 없기 때문에 브라우저가 서버에 전혀 연결할 수 없습니다.


답변

네트워크 ID가이라고 가정하고 192.168.1.0conf 파일을 다음과 같이 편집하십시오.

location / {
  # block one workstation
  deny    192.168.1.1;
  # allow anyone in 192.168.1.0/24
  allow   192.168.1.0/24;
  # drop rest of the world
  deny    all;
}

어떻게 작동하는지 알려주세요.

편집 # 1 :

네, 공식 Nginx 위키 에 따르면 allow 지시문은 필수 입니다 . 그들의 예는 다음과 같습니다.

location / {
    allow 192.168.1.1/24;
    allow 127.0.0.1;
    deny 192.168.1.2;
    deny all;
}

답변

나는 동일한 기능을 달성하고 싶었고 (nginx의 로컬 사용자 만 허용) 다음과 같이 간단한 것을 할 수 있다는 것을 알았습니다.

server {
    listen 127.0.0.1:80;

    index index.html index.htm index.nginx-debian.html;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /path/to/folder;
    }

    location / {
        include proxy_params;
    }
}

이 구성 파일은 나에게 잘 작동하며 allow지시문을 사용하지 않고 있지만 127.0.0.1:80nginx 액세스를 로컬 사용자로만 제한 할 수 있습니다!