1

Nginx と Apache を使用して同じサーバー上に複数の仮想ホストをセットアップしようとしていますが、興味深い構成の問題が発生しました。

nginx は、Apache への一般的なアップストリームで構成されています。

upstream backend {
  server 1.1.1.1:8080;
}

Apache で異なるマウントポイントにヒットする nginx で複数のサブドメインを設定しようとしています。それぞれが次の例のように動作します。

server {
    listen 80;
    server_name foo.yoursite.com;

    location / {
            proxy_pass http://backend/bar/;
            include /etc/nginx/proxy.conf;
    }
    ...
}

server {
    listen 80;
    server_name delta.yoursite.com;

    location / {
            proxy_pass http://backend/gamma/;
            include /etc/nginx/proxy.conf;
    }
    ...
}

これらのマウントポイントは django プロジェクトを指していますが、各 URL エントリは先頭に apache マウントポイント パスが追加されて戻ってきます。したがって、foo.yoursite.com/wiki/biz/ の django url エントリを呼び出すと、django は foo.yoursite.com/bar/wiki/biz/ を返しているように見えます。同様に、delta.yoursite.com/wiki/biz/ の URL エントリを呼び出すと、delta.yoursite.com/gamma/wiki/biz/ が取得されます。

django と apache によって URL エントリに返されるプレフィックスを取り除く方法はありますか?

4

1 に答える 1

1

最も簡単な方法は、WSGI スクリプト ファイルで次を使用することです。

... existing stuff

import django.core.handlers.wsgi
_application = django.core.handlers.wsgi.WSGIHandler()

def application(environ, start_response):
    # Wrapper to clear SCRIPT_NAME..
    environ['SCRIPT_NAME'] = ''
    return _application(environ, start_response)

各サーバーが異なる URL にマウントされるため、問題が発生します。したがって、SCRIPT_NAME をクリアして、実際にサーバーのルートにマウントされたとバックエンドに思わせる必要があります。

バックエンドにも直接アクセスしている場合、これは問題を引き起こすことに注意してください。そのような状況では、リクエストがプロキシ経由で来た場合にのみこれを行うように上記を変更する必要があります。

于 2010-04-06T00:06:09.977 に答える