0

UPD !!! :ここで説明する問題は、このトピックによって完全に解決されます。

http://groups.drupal.org/node/155564

そして、以下の詳細な調査によって:

Nginx&Drupalの第一人者によるNginx構成-AntónioPPAlmeida(ペルシオ)。

https://github.com/perusio/drupal-with-nginx


次の問題を解決できません:ApacheモジュールとしてFreeBSD、Apache 2.2、PHP(FastCGIなし!)、nginx0.8.5.4があります。

Boostとimage_cacheが有効になっているDrupalポータルをパーソナルVPSサーバーに移動しようとしています。

私の目標は、nginxでclean_urlを書き換え、boostとimage_cacheのルールを修正することです。

助けてください!現在のnginx構成に何か問題があることを知っています。一日がカットされました。

これがnginx.confです(/ routeのみが機能するようになりました):

ユーザーwwwwww;
worker_processes 1;

イベント{
    worker_connections 1024;
}

http {
    mime.typesを含める;
    default_type application / octet-stream;

    log_format main'$ remote_addr-$ remote_user [$ time_local] "$ request"'
                      '$ status $ body_bytes_sent "$ http_referer"'
                      '"$ http_user_agent" "$ http_x_forwarded_for"';

    access_log /var/log/nginx-access.log main;

    reset_timedout_connection on;
    sendfile on;
    aio sendfile;
    tcp_nopush on;

    #keepalive_timeout 0;
    keepalive_timeout 65;

    gzipをオンにします。

    アップストリームバックエンド{
        #Apacheサーバー
        サーバー77.72.19.19:81;
    }

    サーバー{
        リッスン77.72.19.19:80デフォルトaccept_filter=httpready;
        server_name 77.72.19.19;

        proxy_set_header Host $ host;
        proxy_set_header X-Real-IP $ remote_addr;
        proxy_set_headerX-転送-$remote_addrの場合;

        gzipをオンにします。
        gzip_static on;
        gzip_proxied any;

        gzip_types text / plain text / html text / css application / json application / x-javascript text / xml application / xml application / xml + rss text / javascript;

        $ myroot / usr / local / www / apache22 / data/alfaを設定します。
        ルート$myroot;

        場所〜^\。{{
            すべてを拒否します。
        }

        $boost""を設定します;
        $boost_query"_"を設定します;

        if($ request_method = GET){
            $boostGを設定します。
        }

        if($ http_cookie!〜 "DRUPAL_UID"){
            $ boost "${boost}D"を設定します;
        }

        if($ query_string = ""){
            $ boost "${boost}Q"を設定します;
        }

        if(-f $ myroot / cache / normal / $ http_host $ request_uri $ boost_query $ query_string.html){
            $ boost "${boost}F"を設定します;
        }

        if($ boost = GDQF){
            ^。*$/cache/normal/$http_host/$request_uri$boost_query$query_string.htmlbreak;を書き換えます。
        }

        if(-f $ myroot / cache / perm / $ http_host $ request_uri $ boost_query $ query_string.css){
            $ boost "${boost}F"を設定します;
        }

        if($ boost = GDQF){
            ^。*$/cache/perm/$http_host/$request_uri$boost_query$query_string.cssbreak;を書き換えます。
        }

        if(-f $ myroot / cache / perm / $ http_host $ request_uri $ boost_query $ query_string.js){
            $ boost "${boost}F"を設定します;
        }

        if($ boost = GDQF){
            ^。*$/cache/perm/$http_host/$request_uri$boost_query$query_string.jsbreak;を書き換えます。
        }

        場所〜^ / sites /.*/ files / imagecache / {
            #try_files $ uri @rewrite;
            error_page 404 = /;
        }

        場所〜* \。(txt | jpg | jpeg | css | js | gif | png | bmp | flv | pdf | ps | doc | mp3 | wmv | wma | wav | ogg | mpg | mpeg | mpg4 | htm | zip | bz2 | rar | xls | docx | avi | djvu | mp4 | rtf | ico)$
        {{
            最大有効期限が切れます。
            add_header Vary Accept-Encoding;
            if(-f $ request_filename){
                壊す;
            }
            if(!-f $ request_filename){
                proxy_pass "http:// backend";
                壊す;
            }
        }

        場所〜* \。(html(.gz)?| xml)$ {
            add_header Cache-no-cache、no-store、must-validateを制御します。
            ルート$myroot;
            if(-f $ request_filename){
                壊す;
            }
            if(!-f $ request_filename){
                proxy_pass "http:// backend";
                壊す;
            }
        }        

        if(!-e $ request_filename){
            最後に^/(。*)$/index.php?q=$1を書き換えます。
            壊す;
        }

        位置 / {
            proxy_pass http:// backend;
        }

     }
}

UPD:このnginx.confで私は/を使っています。そして、他のページは私に「ページは正しくリダイレ​​クトされていません」と表示します。ロケーションルールが評価される順序を誰が説明できますか?そしてそれが「ブレーク」である場合-nginxがこの行に出会うと、次に何をしますか。私は実際に約20のnginx構成サンプルを試しました。もう1つのリンクは必要ありません。nginx.confで何が起こっているのかを本当に理解している誰かの回答をお勧めします。

UPD2:交換した場合

        if(!-e $ request_filename){
            最後に^/(。*)$/index.php?q=$1を書き換えます。
            壊す;
        }

と:

        try_files $ uri $ uri / @drupal;
        場所@drupal{
            ^/index.php?q=$uriを最後に書き直します。#Drupal6の場合
        }

次に、ルート以外のすべてのページで404「要求されたURLがこのサーバーで見つかりませんでした」と表示されます。

4

2 に答える 2

0

回答2:

次のconf行を置き換えます

    if (!-e $request_filename) {
        rewrite  ^/(.*)$   /index.php?q=$1  last;
        break;
    }

    location / {
        proxy_pass http://backend;
    }

これとともに:

location / {
    root   /path/to/drupal;
    index  index.php index.html;

    if (!-e $request_filename) {
        rewrite  ^/(.*)$  /index.php?q=$1  last;
        break;
    }

}

便利なリンクは次のとおりです。

http://hostingfu.com/article/running-drupal-with-clean-url-on-nginx-or-lighttpd#toc-nginx

クイック情報:

drupalがルートディレクトリにインストールされている場合、

if (!-e $request_filename) {
rewrite  ^/(.*)$   /index.php?q=$1  last;
 break;
}

サブディレクトリにdrupalがある場合、

if ($request_uri ~* ^.*/.*$) {
rewrite ^/(\w*)/(.*)$  /$1/index.php?q=$2 last;
break;
}
于 2011-06-13T09:11:48.477 に答える
0

nginx を次のように構成すると: https://github.com/stanislaw/config_files/blob/master/nginx.confにより、Drupal は次のように動作しました: サイトがメンテナンス モードの場合、すべて正常に機能しました。すべての非ルート URL (管理者としてサインイン) のナビゲートは問題ありませんでした。しかし、サイトをオンライン モードにすると、「ページが正しくリダイレ​​クトされません」(最初の UPD) というメッセージが表示されるようになりました。

次に、drupal の新規インストールで同じ構成をテストしました。オフ モードとオンライン モードの両方で動作しました。すべての clean_urls へのナビゲーションが機能しました。

config は実際に機能していると思います!しかし、デプロイしようとしているサイトには多くのモジュールが含まれているため、このような不適切なリダイレクトが発生する可能性があります。

サイトの vhosts セクションにクリーンな URL があり、この問題は将来に残されています。私の現在の設定は github のものと非常に似ていますが (リンクを参照)、clean_urls セクションがコメントされています (現在は「location ~ .php」の代わりに「location /」を使用しています)。

とにかく、私の現在の構成に関するアドバイスやコメントには本当に感謝しています(githubのnginx.confを参照してください-上記のリンク)。

UPD: nginx の drupal グループに関する関連記事はこちら: http://groups.drupal.org/node/155564

于 2011-06-14T10:10:34.620 に答える