2012-03-05 13 views
1

私はいくつかの文書を見ていますが、なんらかの理由で私がやろうとしていることに必要な構成を頭で覆すことはできません。基本的に私がしたい:Nginxの設定

  • すべてのディレクトリ要求は、そのURLを保つ必要がありますが、すべての.js、.cssの、.JPEGと.PNGファイルは(/ jsのそれぞれのディレクトリにindex.phpを

  • によって処理されます/、/ css /、/ images /)は、PHP処理なしで提供されるべきです。

  • その他のファイルへのアクセスはすべて拒否されます(すべての.phpを含む)。

私は.PHP処理のための場所を設定しようとしましたが、私はそれが正しく動作して取得する方法を見つけ出すことはできません。私はそれを維持するつもりだが、いくつかの迅速なヘルプも期待していた:)

ありがとう!

編集2:私はまともなものを思いついたと思います。完璧ではないかもしれませんが、うまくいくはずです。

server { 
    listen 80; 

    server_name _; 
    server_tokens off; 

    root /mypath/www; 

    access_log /mypath/access.log; 
    error_log /mypath/error.log; 

    index index.html; 

    location ^~ /app { 
     return 404; 
    } 

    location ~ \.conf { 
     return 404; 
    } 

    location ~ \.php { 
     return 404 ; 
    } 

    location ~ /images/.*.(jpg|jpeg|png|gif) { 
     try_files $uri $uri = 404; 
     expires max; 
    } 

    location ~ /css/.*.css { 
     try_files $uri $uri = 404; 
     expires 1d; 
    } 

    location ~ /js/.*.js { 
     try_files $uri $uri = 404; 
     expires 1d; 
    } 

    location/{ 
     try_files $uri @PHPProxy; 
     error_page 500 501 502 503 504 505 $document_root/error.html; 
    } 

    location @PHPProxy { 
     include fastcgi_params; 
     fastcgi_pass unix:/tmp/php.socket; 
     fastcgi_param SCRIPT_FILENAME $document_root/index.php; 
    } 
} 

答えて

2

これは面白いことでした。以前はディレクトリをブロックしたり、ドキュメントルートにアクセスしたくないファイルがないことを確認していました。

私はそれを行う方法を見つけたと思う。他のファイルに対して実際に404または403を与えるわけではなく、指定したディレクトリ以外のすべてを/index.phpに書き換えます。ここで

私がテストした設定は、次のとおりです。

server { 
listen 80; 
listen your.domain.name:80; 
server_name your.domain.name; 

root /var/www/vhost/testing; 
server_tokens off; 

location ~ ^/(images|css|js)/.* { 
    expires max; 
} 
location/{ 
    index index.php; 
    rewrite ^(.*)$ /index.php$1 last; 
} 
location ~ ^/index.php { 
    fastcgi_pass 127.0.0.1:9000; 
    fastcgi_param PATH_INFO $fastcgi_script_name; 
    include /etc/nginx/fastcgi_params; 
} 
} 

そうで/画像何でも、/ CSS、または/ JSのは、ちょうどロードされますが、他のすべては、インデックスファイルに書き換えられます。

これらの3つのフォルダにないファイルは完全に見落とされます。

+0

これは私がやっていたことに似ていますが、もっと考え抜かれています。私は明日これを撃つだろう。ありがとう! – Kris

+0

おそらく、 "書き換え"の代わりに "try_files"指示文を使用するべきです。 IMOそれはあなたが探しているもののためだけに作られています:) http://wiki.nginx.org/HttpCoreModule – conradkdotcom

+0

@conradk前にサイトでtry_filesを使用しましたが、私は彼が探していたものかどうかはわかりません。彼は、指定されたフォルダ以外のファイルは拒否され、try_filesはそれらを通過させたがっていました。あなたが 'try_files $ uri/index.php $ uri'のようなものを持っているときは、とにかく内部的に書き直しをします。今、もし私が特定のフォルダだけを許可し、/index.php上の他のすべてを試してみると、それはかなり素晴らしいでしょう。 – Nenoco