0

サーバーにmagentoをインストールしようとしています。これが私のVhostファイルです。

server {
    listen 80;
    ## SSL directives might go here
    server_name development.magento.in ; ## Domain is here twice so server_name_in_redirect will favour the www
    root /var/www/devcode/;

    client_max_body_size 2M;

    location / {
            index index.html index.php; ## Allow a static html file to be shown first
            try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler
            expires 365d; ## Assume all files are cachable
    }

    if ($request_uri = /index.php) {
            rewrite ^ http://$host? permanent;
    }

    location /app/                { deny all; }
    location /includes/           { deny all; }
    location /lib/                { deny all; }
    location /media/downloadable/ { deny all; }
    location /pkginfo/            { deny all; }
    location /report/config.xml   { deny all; }
    location /shell/              { deny all; }
    location /downloader/         { deny all; }
    location /cron.php            { deny all; }

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
       rewrite ^(.*.php)/ $1 last;
   }

    location  /. { ## Disable .htaccess and other hidden files
            return 404;
    }

    location @handler { ## Magento uses a common front handler
        rewrite / /index.php;
    }

    # serve static files directly

    location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|txt)$ {
        # root /var/www/devcode/skin/; # I tried to added to this also but never worked
        access_log        off;
        expires           30d;
    }

location ~ \.php$
{
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_read_timeout 300;
}

}

したがって、この設定により、Nginx はCss と js と Images に対して 403 を示します。面白いのは、静的ファイルを提供するためのセクションを削除すると、404と表示されることです。Stackoverflow のすべての投稿を試しました。これが私のメディアとスキンディレクトリのアクセス許可がどのように見えるかです

drwxr-xr-x. 23 nginx  nginx   4096 Mar 22 14:32     media
drwxr-xr-x.  5 nginx  nginx   4096 Mar 13 03:45     skin

どんな助けやヒントも非常に尊重されます!


編集

私の新しいConfファイルは次のようになります:

server {
    listen 80;
    ## SSL directives might go here
    server_name development.magento.in ; ## Domain is here twice so server_name_in_redirect will favour the www
    root /var/www/devcode/;

    index   index.html index.php; ## Allow a static html file to be shown first

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    include        /etc/nginx/fastcgi_params;

    access_log /var/log/nginx/development.access.log ;
    error_log  /var/log/nginx/development.error.log ;

    client_max_body_size 2M;

    location / {
            try_files $uri $uri/  /index.php?$args;   #@handler; ## If missing pass the URI to Magento's front handler
            expires 365d; ## Assume all files are cachable
    }

    if ($request_uri = /index.php) {
            rewrite ^ http://$host? permanent;
    }

    location ^~ /(app|includes|lib|media/downloadable|pkginfo|var)/ { internal; }
    location /var/export/ { internal; }

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler
       rewrite ^(.*.php)/ $1 last;
    }

    location  /. { ## Disable .htaccess and other hidden files
            return 404;
    }

    # serve static files directly
    location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|txt)$ {
        access_log        off;
        expires           30d;
    }

    location ~ \.php$
    {
        fastcgi_pass 127.0.0.1:9000;

        fastcgi_index index.php;
        fastcgi_param MAGE_RUN_CODE default;
        fastcgi_param MAGE_RUN_TYPE store;
        fastcgi_read_timeout 300;
    }

 }

今、私の以前の問題は修正されました。しかし、今では私のサイトを実行できません。access.log を確認しましHTTP 200 OKたが、index.php はリクエストを受信して​​いません。

4

1 に答える 1

2

静的ファイルには、単にエイリアスディレクティブを使用できます。

location /skin {
    alias /var/www/devcode/skin;
    access_log        off;
    expires           30d;
}

またはより明示的に

location /skin/ {
    alias /var/www/devcode/skin/;
    access_log        off;
    expires           30d;
}

(両端のスラッシュの違いを参照してください。)

実際には、ルートディレクティブを使用してそれを行うこともできますが、最後のスラッシュは多すぎます。aliasroot ここの違いを参照してください。スタティックを提供する明らかな理由があり、レベルでのみサポートされるため、alias代わりに使用することをお勧めします。rootlocation

私の答えに関係なく、この構成はApacheリライトロジックからのもののように見え、全体として十分に最適化されたnginxスタイルではありません。上記のように、静的コンテンツを別のサブフォルダーに分離することをお勧めします。次に、 Ifが悪である理由も知りたいと思うかもしれません。で書き直す代わりに、ファイルを試す@handlerことができます。

location @handler { ## Magento uses a common front handler
    try_files       $uri $uri/ /index.php?$args;
}

私はsのためのより賢いアイデアを思い付くことができませんdeny all。ただし、最初にこれらを除外することで、publicフォルダー内のphpコンテンツと静的コンテンツを分離し、それをとして定義します。これらのアドバイスのいくつかは、特定のニーズと矛盾する場合、無意味に聞こえるかもしれないことに注意してください。rootdeny

于 2013-03-22T21:10:39.553 に答える