2011-12-08 60 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文檔](http://wiki.nginx.org/HttpAccessModule):「請注意,拒絕/允許的順序是最重要的。如果你來自Apache世界,你可能會被誘惑認爲你可以切換訪問指令的順序,一切都會工作,事實上並不是這樣,切換上例中的順序是拒絕訪問所有地址的結果。 – 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

顯然重要的是,允許是第一,否認是第二,否則否認是'更強'。 –

+0

每當我將上述內容添加到我的nginx.conf文件中時,我不再能夠重新啓動nginx。我得到這個錯誤:[....]重新啓動nginx(通過systemctl):nginx.serviceJob for nginx.service失敗,因爲控制進程退出並顯示錯誤代碼。有關詳細信息,請參閱「systemctl status nginx.service」和「journalctl -xe」。 失敗! <<<<<任何想法在我的構建中發生了什麼? @erkasraim – Supplement

+0

@補充嘗試看看你是否在允許的末尾錯過了一個逗號,或者任何其他規則 – William