5

ドメインまたはパスに基づいてリダイレクトを実行して、サイト固有の場所を指すようにURIを書き換えることができることを知っています。また、次のコードに示すように、すべてのサイトで残忍なifステートメントelifを確認しました。これは避けたいと思います。 。

if site == 'site1':
    ...
elif site == 'site2:
    ...

単一の一般的なPythonWebフレームワーク(つまり、Pylons、TurboGearsなど)から複数のサイトを実行するための優れた賢い方法は何ですか?

4

4 に答える 4

10

Django にはこれが組み込まれています。サイト フレームワーク を参照してください。

一般的な手法として、ホスト固有にするデータにアタッチされたデータベース スキーマに「ホスト」列を含め、Hostデータを取得するときにクエリに HTTP ヘッダーを含めます。

于 2008-09-17T16:39:06.960 に答える
7

mod_python を使用して apache で Django を使用し、次の apache 構成を使用して複数の (関連のない) Django サイトをホストします。

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site1
        ServerName site1.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site1.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site1
        </Location>
</VirtualHost>

<VirtualHost 1.2.3.4>
        DocumentRoot /www/site2
        ServerName site2.com
        <Location />
                SetHandler python-program
                SetEnv DJANGO_SETTINGS_MODULE site2.settings
                PythonPath "['/www'] + sys.path"
                PythonDebug On
                PythonInterpreter site2
        </Location>
</VirtualHost>

複数の apache インスタンスやプロキシ サーバーは必要ありません。サイトごとに異なる PythonInterpreter ディレクティブを使用すると (入力する名前は任意です)、名前空間が分離されたままになります。

于 2008-09-17T19:29:30.590 に答える
3

私は Web サーバーとして CherryPy (Turbogears にバンドルされています) を使用し、localhost にバインドされたさまざまなポートで、CherryPy Web サーバーの複数のインスタンスを実行するだけです。次に、mod_proxy と mod_rewrite を使用して Apache を構成し、HTTP 要求に基づいて要求を適切なポートに透過的に転送します。

于 2008-09-17T16:52:59.517 に答える
3

ローカル ポートで複数のサーバー インスタンスを使用することは良い考えですが、HTTP 要求をリダイレクトするためにフル機能の Web サーバーは必要ありません。

私はポンドをリバースプロキシとして使用して仕事をします。小さく、速く、シンプルで、ここで必要なことを正確に実行します。

ポンドとは:

  1. リバース プロキシ: クライアント ブラウザーからの要求を 1 つ以上のバックエンド サーバーに渡します。
  2. ロード バランサー: セッション情報を保持しながら、クライアント ブラウザーからの要求を複数のバックエンド サーバーに分散します。
  3. SSL ラッパー: Pound は、クライアント ブラウザーからの HTTPS 要求を復号化し、それらをプレーンな HTTP としてバックエンド サーバーに渡します。
  4. HTTP/HTTPS サニタイザー: Pound はリクエストの正確性を検証し、整形式のもののみを受け入れます。
  5. フェイルオーバーサーバー: バックエンドサーバーに障害が発生した場合、Pound はその事実を記録し、回復するまでリクエストの受け渡しを停止します。
  6. リクエスト リダイレクタ: リクエストは、リクエストされた URL に従ってサーバー間で分散される場合があります。
于 2008-09-17T18:10:57.317 に答える