nginxでIPアドレス制限をして404出てハマった話


Nginx

ハマったというと少々大げさかもしれない。

とりあえずIPアドレス制限はconfファイル書き換えてすぐに実装できたけど、許可したIPからアクセスしたら404ばっかり出てチンプンカンプンだったのでエントリ。

一部のディレクトリだけ特定のIPしかアクセスさせない

まず、今回はDocumentRoot配下にはる/hoge というディレクトリは一部のIPのみアクセスさせるようにしたかった。
調べると confファイル内の location 部分に書くとヨロシイらしい。

server {
    listen   80;
    server_name localhost;

    location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
    }
}


↑こんな感じの設定が conf.d の中に入ってて読み込まれてたから、ここの server設定直下に以下を追記

location /hoge/ {
    allow XXX.XXX.XXX.XXX/27;
    allow XXX.XXX.XXX.XXX/32;
    deny all;
}

サブネットマスクもそのまま書いてOKだそうですね。
また、apacheとは違って、最初に
order deny allow

とか書いていくのはご法度だそうです。

で、実際に /hoge/index.html にアクセスしにいったところ記載したIP以外からはちゃんと403が出て見れなくなっていた。
しかし、記載したIPからアクセスしたところ、見れると思いきや 404 NotFoundが出る。。

location 書くとDocumentRoot変わるっぽい

ハマったというか、お恥ずかしながら最初違うerror.log見ていて(*ノω・*)テヘ 全然気が付かなかったんですが、error.logを確認したところ

*2 open() “/etc/nginx/html/hoge/index.html” failed (2: No such file or directory),
みたいなログ出てて、んん!? と。

今回、設置した対象のディレクトリは、 /usr/share/nginx/html… だったのですが、どうも /etc/nginx/html/..にアクセスされたようでした。
つまり、一回目の location / で設定したDocumentRootが適用になっていなかった的な?

つーわけで書き換えました。

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    } 

    location  /hoge/ { 
        root   /usr/share/nginx/html; 
        index  index.html index.htm;
        allow XXX.XXX.XXX.XXX/27;
        allow XXX.XXX.XXX.XXX/32;
        deny all;
    } 

これで動いたぜ。
いまふと思ったんだけど、 root と index の設定を普通に server 設定直下にあげておけばいいんじゃないかな。。
いずれにせよ、今後は部分的な location をproxyしたりとか設定を追加するので、ひととまずこれで運用してみます。

基本がなってないですねぇ〜〜(TдT)

2015-05-27 | Posted in サーバー小ネタ(Linux)No Comments » 


関連記事

Comment





Comment



*