2011-12-08 1 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の設定ファイルを持つすべてのこと馴染みのごnginx.confを変更しますが、順序を切り替える試してみましたか?私はそれがあなたのipへのアクセスを許可し、そしてすべての人へのアクセスを拒否していることを想像するでしょう。あなたのIPはすべてに含まれているので、許可を拭き取っています。 – Corbin

+0

残念ながら、それはうまくいきませんでした。 [nginx documentation](http://wiki.nginx.org/HttpAccessModule)から: "拒否/許可の順序が最も重要であることに注意してください。あなたがApacheの世界から来ているなら、あなたは上記の例の順序を切り替えると、すべてのアドレスへのアクセスが拒否された結果になります。 – MrDerp

答えて

102

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が2番目であることが重要です。そうでなければdenyは 'stronger'です。 –

+0

これをnginx.confファイルに追加するたびに、もはやnginxを再起動できなくなります。私はこのエラーが表示されます:[....] nginxを再起動する(systemctl経由):制御プロセスがエラーコードで終了したため、nginx.serviceのnginx.serviceJobが失敗しました。詳細については、「systemctl status nginx.service」および「journalctl -xe」を参照してください。 が失敗しました。 <<<<<私のビルドで何が起こっているのか? @erkasraim – Supplement

+0

@Supplement allowの後ろにカンマがないかどうか、または他のルール – William

関連する問題