2011-12-08 4 views
47

Nginx, Passenger 및 Rails가 Linode에서 아름답게 작동합니다. 시작하기 전에 내 IP에서만 사이트를 볼 수 있도록 액세스를 제한하고 싶습니다.Nginx.conf를 통해 단일 IP 주소에 대한 액세스를 허용하려면 어떻게합니까?

나는 모두에 대한 액세스를 거부하고 Nginx에서 내 IP에만 액세스를 허용하려고했습니다. 그것은 모두에게 접근을 거부하지만, 나는 허용하도록 할 수 없습니다. nginx.conf에서 지정하는 IP 주소가 올바른 공용 IP인지 확인했습니다.

다음은 내 nginx.conf입니다. 파일을 편집 한 후 nginx를 다시 시작하고 예상대로 작동하는 다른 변경 사항을 테스트했습니다 (예 : 모든 사이트를 제거하고 예상대로 사이트에 액세스 할 수 있음).

내가 뭘 잘못하고 있니?

http { 
     passenger_root /path/to/passenger-3.0.11; 
     passenger_ruby /path/to/ruby; 
     include  mime.types; 
     default_type application/octet-stream; 
     sendfile  on; 
     keepalive_timeout 65; 
     gzip on; 
     server { 
     listen 80; 
     server_name www.foo.bar; 
     root /path/to/rails/public/; 
     passenger_enabled on; 
     location/{ 
      allow my.public.ip.here; 
      deny all; 
     } 
     } 
    } 
+0

하지의 nginx의 설정에 익숙한 수정,하지만 당신은 순서를 전환 시도? 내가하고있는 일은 당신의 IP에 대한 액세스를 허용하고 모든 사용자에 대한 액세스를 거부하는 것이라고 생각합니다. 귀하의 IP는 모두에 포함되어 있으므로 허용을 지우고 있습니다. – Corbin

+0

불행히도 작동하지 않았습니다. [nginx documentation] (http://wiki.nginx.org/HttpAccessModule)에서 : "거부/허용 순서가 가장 중요합니다. 아파치 세계에서 온다면 유혹을받을 수 있습니다. 위의 예제에서 순서를 바꾸면 모든 주소에 대한 액세스가 거부 된 결과가 발생합니다. " – MrDerp

답변

102

은 nginx.conf 모든

server { 
    listen 80; 
    server_name www.foo.bar; 

    location/{ 
     root /path/to/rails/public/; 
     passenger_enabled on; 

     allow my.public.ip.here; 
     deny all; 
    } 
    } 
+7

분명히 allow가 첫 번째이고, deny가 두 번째이고, 그렇지 않으면 deny가 'stronger'라는 것이 중요합니다. –

+0

위의 내용을 nginx.conf 파일에 추가하면 더 이상 nginx를 다시 시작할 수 없습니다. 이 오류가 발생합니다 : [....] nginx 재시작 (systemctl을 통해) : nginx.service에 대한 nginx.serviceJob 오류 코드와 함께 제어 프로세스가 종료 되었기 때문에 실패했습니다. 자세한 내용은 "systemctl status nginx.service"및 "journalctl -xe"를 참조하십시오. 실패했습니다! <<<<< 내 빌드로 어떤 일이 벌어지고 있는지 알 수 있습니까? @erkasraim – Supplement

+0

@Supplement 허용의 끝에서 쉼표를 놓친 지 확인하거나 다른 규칙을 확인하십시오. – William

관련 문제