2011-12-08 40 views
47

Nginx, Hành khách và Đường ray đang chạy đẹp trên Linode của tôi. Trước khi tôi khởi chạy, tôi muốn hạn chế quyền truy cập để chỉ IP của tôi mới có thể xem trang web.Làm cách nào để cho phép truy cập vào một địa chỉ IP thông qua Nginx.conf?

Tôi đã cố gắng từ chối quyền truy cập vào tất cả và cho phép truy cập chỉ IP của tôi trong Nginx. Nó từ chối truy cập vào tất cả, nhưng tôi không thể nhận được cho phép để làm việc. Tôi đã kiểm tra để đảm bảo địa chỉ IP mà tôi chỉ định trong nginx.conf là ip công khai chính xác của tôi.

Đây là nginx.conf của tôi. Tôi đã khởi động lại nginx sau khi chỉnh sửa tệp và thử nghiệm một số thay đổi khác hoạt động như mong đợi (ví dụ: tôi đã từ chối tất cả và có thể truy cập trang web, như mong đợi).

Tôi đang làm gì sai?

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

Không phải tất cả những gì quen thuộc với nginx cấu hình, nhưng bạn đã thử chuyển đổi thứ tự? Tôi sẽ tưởng tượng những gì nó đang làm là cấp quyền truy cập vào ip của bạn, và sau đó từ chối truy cập vào tất cả. IP của bạn được bao gồm trong tất cả, do đó, nó xóa cho phép. – Corbin

+0

Thật không may là nó không hoạt động. Từ [tài liệu nginx] (http://wiki.nginx.org/HttpAccessModule): "Lưu ý rằng thứ tự từ chối/cho phép là quan trọng nhất. Nếu bạn đến từ thế giới Apache, bạn có thể bị cám dỗ nghĩ rằng bạn có thể chuyển đổi thứ tự chỉ thị truy cập và mọi thứ sẽ hoạt động. Trong thực tế nó không. Chuyển đổi thứ tự trong ví dụ trên có kết quả từ chối truy cập vào tất cả các địa chỉ. " – MrDerp

Trả lời

102

sửa đổi nginx.conf bạn

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

Rõ ràng điều quan trọng là cho phép điều đầu tiên, từ chối là thứ hai, nếu không phủ nhận là 'mạnh hơn'. –

+0

Bất cứ khi nào tôi thêm phần này vào tệp nginx.conf của tôi, tôi không thể khởi động lại nginx được nữa. Tôi nhận được lỗi này: [....] Khởi động lại nginx (thông qua systemctl): nginx.serviceJob cho nginx.service thất bại vì quá trình kiểm soát đã thoát với mã lỗi. Xem "trạng thái systemctl nginx.service" và "journalctl -xe" để biết chi tiết. không thành công! <<<<< Bất kỳ ý tưởng những gì đang xảy ra với xây dựng của tôi? @erkasraim – Supplement

+0

@Supplement thử và xem bạn có bỏ lỡ dấu phẩy ở cuối cho phép hay bất kỳ quy tắc nào khác không – William

Các vấn đề liên quan