nginx에서 로컬 사용자 만 허용


22

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지시문이 실제로 필요합니까?


허용 라인을 다음과 같이 변경해보십시오.allow 127.0.0.1/32;
Itai Ganot

내 문제는 내가 그 필요 여부 allow나 설정 때문에 전혀 listen127.0.0.1.
Biggie

답변:


15

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 포트가 없기 때문에 브라우저가 서버에 전혀 연결할 수 없습니다.


1
좋아, 더 많은 VHost가 있고 그중 일부는 localhost에만 국한되지 않는다는 것을 언급하지 않았습니다. 그들 모두 (로컬 전용 및 로컬이 아닌) 동일한 nginx 인스턴스에서 실행 중입니다. 따라서 (모든 인터페이스) netstat의 로컬 주소를 보여줍니다 0.0.0.0:80. 그런 다음 여전히 로컬 전용 서버에서 deny/ allow를 생략 할 수 있습니까 ?
Biggie

이 경우 nginx는 listen 80 default_server;클라이언트가에 바인드 된 호스트를 요청할 때 지시문 으로 정의 된 가상 호스트의 내용을 표시합니다 127.0.0.1:80. default_server정의 되지 않은 경우 정의 된 서버가 표시 listen 80;됩니다.
Tero Kilkanen

로컬이 아닌 사용자가 서버에 액세스 할 가능성이 listen 127.0.0.1없고이 allow/deny서버 에서도 필요하지 않습니까?
Biggie

그렇습니다.
Tero Kilkanen

이것은 현재 최고 답변과 달리 질문에 대답합니다. 왜 최고가 아닌가?
Jortstek

16

네트워크 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;
}

1
난 정말에 대한 액세스를 제한 할 127.0.0.1) 나는 그 필요 여부 나의 질문은 allow내가 이미 설정된 모든 때문에에 listen127.0.0.1.
Biggie

편집 # 1을 확인하십시오.
Itai Ganot

Sry, 나는 당신이 내 질문을 이해하지 못한다고 생각합니다.) 당신이 게시 한 것은 이미 위의 질문에 내가 쓴 것입니다. 그러나 그것은 내 질문에 대한 대답이 아닙니다.
Biggie

1
@Biggie 127.0.0.1에 대한 액세스를 제한 할 필요는 없으며 로컬 시스템에서만 사용할 수 있습니다.
user9517은 GoFundMonica를 지원합니다.

아마도 이것은 사실이지만 OP의 질문에 구체적으로 대답하지는 않습니다! 받아 들여진 대답은 그렇지 않습니다.
Jortstek

4

나는 동일한 기능을 달성하고 싶었고 (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 액세스를 로컬 사용자로만 제한 할 수 있습니다!


로컬 사용자로 제한하는 훌륭하고 간단한 답변.
new2cpp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.