2012-03-05 170 views
1

我正在瀏覽幾個文件,但由於某種原因,我無法將我的頭圍繞我所要做的配置所需的配置。基本上,我想:Nginx配置

  • 所有目錄請求應該保持自己的網址,但通過的index.php處理

  • 所有的.js,的CSS,.JPEG並在其各自的目錄.png文件(/ JS /,/ 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 2012-03-05 03:44:49

+0

您應該使用「try_files」指令而不是「重寫」。國際海事組織它只是爲你正在尋找的東西:) http://wiki.nginx.org/HttpCoreModule – conradkdotcom 2012-03-05 19:08:43

+0

@conradk我以前在網站上使用過try_files,但我不確定那是他在找什麼。他希望除指定文件夾以外的任何文件都被拒絕,並且try_files不斷讓它們通過。我猜想,當你有'try_files $ uri/index.php $ uri'之類的東西時,它會在內部重寫(或類似的東西)。現在,如果我可以結合只允許某些文件夾並嘗試/index.php上的所有其他文件,那將非常棒。 – Nenoco 2012-03-06 01:04:10