2016-11-30 11 views
0

私はApacheからnginxに切り替えたばかりですが、まだまだ使い慣れています。Nginxの設定が正しく動作しない

私はこの設定があるPagekitサイト実行しているよ:Unforunately https://gist.github.com/DarrylDias/be8955970f4b37fdd682

server { 
    listen 80; 
    listen [::]:80; 

    # SSL configuration 

    listen 443 ssl; 
    listen [::]:443 ssl; 

    ssl     on; 
    ssl_certificate  /etc/ssl/private/mydomain.com.crt; 
    ssl_certificate_key /etc/ssl/private/mydomain.com.private.key; 
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2; 
    ssl_ciphers   HIGH:!aNULL:!MD5; 

    ssl_client_certificate /etc/ssl/private/cloudflare.origin-pull-ca.pem; 
    ssl_verify_client  on; 

    server_name mydomain.com www.mydomain.com; 

    root /home/vhosts/domains/mydomain.com/public/; 

    index index.php; 

    # Leverage browser caching of media files for 30 days 
    location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff)\$ { 
     access_log off; 
     expires 30d; 
     add_header Pragma public; 
     add_header Cache-Control "public, mustrevalidate, proxy-revalidate"; 
    } 

    location/{ 
     try_files $uri $uri/ /index.php?$args; 
    } 

    # Deny access to sensitive folders 
    location ~* /(app|packages|storage|tmp)/.*$ { 
     return 403; 
    } 

    # Deny access to files with the following extensions 
    location ~* \.(db|json|lock|dist|md)$ { 
     return 403; 
    } 

    # Deny access to following files 
    location ~ /(config.php|pagekit|composer.lock|composer.json|LICENSE|\.htaccess) { 
     return 403; 
    } 

    location ~ \.php$ { 
     try_files $uri =404; 
     fastcgi_pass unix:/var/run/php7-fpm.sock; 
     fastcgi_index index.php; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     include fastcgi_params; 
     fastcgi_param HTTP_MOD_REWRITE On; 
    } 
} 

を、(私を含め)多くは、彼らがしているので、このようなjs|css|jpg|<etc>などの拡張子を持つファイルが403応答を得ているという問題がありますいずれかのapp or packagesディレクトリ内にあります。

私は、これらのファイルのlocationにnginxのより高い優先順位を付けるようにしようとしましたが、何の効果もなかったようです。

これらの種類のファイルを許可するためにこの設定ファイルを変更する必要がありますが、それらのディレクトリ内の他のすべてのファイルに対して403を返しますか?

EDIT:ファイルURLはhttps://example.com/app/js/something.min.js?v=1921のように見えますが、?v=1921のためにおそらく動作しませんか? nginx's documentによると

+0

クエリ文字列は 'location'ブロックと一致しません。あなたのnginxサーバーは、いくつかの種類のCDNの後ろにありますか?これらのCDNサーバーのキャッシュによって発生する可能性があります。 URLをhttps://example.com/app/js/something.min.js?v=1922に変更して、キャッシュをバイパスしてみてください。 –

+0

私はcloudflareを使用していますが、自分自身を開発モードにしてキャッシュをクリアするようにしました。私は事実を知っていますが、URLはページキットそのもののためにそうです。 – xorinzor

+0

キャッシュはCloudflareによってサーバー側に保管されているため、ブラウザー開発モードのみが実際には機能しません。おそらく、バージョン番号を "1921"から他の文字列に変更して、最後の 'location'を上に移動した後に動作するかどうかを確認するだけです。 –

答えて

2

:ために正規表現で与え

nginxのチェックの場所は

だからまず、あなたがあなたの最後のlocation最上部に移動する必要がある設定ファイルに記載されています。

次に、静的ファイルとの一致を試みる正規表現も正しくありません。ドル記号 "$"はパスの終わりと一致する必要がありますが、以前のバックスラッシュ "\"でエスケープされています(実際には文字 "$"に一致します)。バックスラッシュを削除して問題を解決します:

location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff)$ { 
    ... 
} 
+0

私もそれを試みましたが、どちらも助けなかったので、私はその変更を元に戻しました。 EDIT:更新された質問を確認してください。おそらく問題が説明されていますか? – xorinzor

+0

面白い...私はnginxの設定で同様のルールを持っており、うまくいきます。あなたは設定を変更した後にnginxをリロードしましたか? –

+0

はい、しました(問題の編集を確認してください。 – xorinzor

関連する問題