(機械翻訳) 仮想ホスティング

"バーチャルホスティング"は大まかに言うと、a:app: Pyramid`アプリケーションまたはa:app: Pyramid`アプリケーションの一部をURL空間の下に置くことです。

:app: Pyramid`は、URL"接頭辞 "でアプリケーションを提供する機能と、ルートURLの下にa:term: traversal`ベースのアプリケーションを提供する機能を提供します。

URL接頭辞でのアプリケーションのホスティング

:アプリは:http://example.com/ ``の下で、例えばいくつかの他のサイト(の「サブセット」として Pyramid`アプリケーション:アプリ: Pyramid`あなたがホストすることができる仮想ホスティングの一般的な形式をサポートしていますmypyramidapplication / `` http:// example.com / ``とは対照的です)。

&quot;純粋なPython &quot;環境を使用している場合、この機能は `rutter <http://rutter.readthedocs.io/en/latest/> `_、複合WSGIアプリケーションを形成します。代わりに、:term: `mod_wsgi`を使用してアプリケーションを提供することもできます。これは、この仮想ホスティングの翻訳をあなたのために処理します。

a:app: Pyramid`アプリケーションの rutter``複合アプリケーションを使用する場合、または:term: mod_wsgi`を使用して:app: Pyramid`アプリケーションを提供する場合、何も特別なものはありませんプレフィックスを含むURLが生成されるようにアプリケーション内で行う必要があります。 Rutterと:term: `mod_wsgi`は、 PATH_INFO``と SCRIPT_NAME``変数が与えられたプレフィックスに対して正しいように:term: WSGI`環境を操作します。

次に、 `` rutter``コンポジットを含むPasteDeploy設定スニペットの例を示します。

1
2
3
4
5
6
[app:mypyramidapp]
use = egg:mypyramidapp

[composite:main]
use = egg:rutter#urlmap
/pyramidapp = mypyramidapp

これは接頭辞 `` / pyramidapp``にある:app: `Pyramid`アプリケーションをルーツにして、ファイル内の&quot;メイン&quot;アプリケーションとしてコンポジットを提供します。

注釈

Apacheサーバを使用して `` urlmap``コンポジットにプロキシする場合は、 ProxyPreserveHost <http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypreservehost> `_ HTTP_HOST`ヘッダをアプリケーションに渡すよう指示するので、URLが適切に生成されます。この記事を書いている時点で、 ` urlmap``コンポジットは、 `` HTTP_HOST``が間違っていても元のホストヘッダを含む `` HTTP_X_FORWARDED_HOST``パラメータを尊重しているように見えません。

:term: mod_wsgi`を使うと、 .ini``ファイルに 複合 アプリケーションを使う必要はありません。 a:term: `mod_wsgi`設定の `WSGIScriptAlias``設定はあなたのために働きます:

1
WSGIScriptAlias /pyramidapp /Users/chrism/projects/modwsgi/env/pyramid.wsgi

上記の設定では、Apache設定内の `` / pyramidapp``にa:app: `Pyramid`アプリケーションをルートしています。

仮想ルートサポート

:app: Pyramid`は:term: traversal`ベース(ただし、term: `URL dispatch`ベースのアプリケーション)では使用できない&quot;仮想ルーツ&quot;もサポートしています。

仮想ルートのサポートは、リソースパス自体を含まないURLパス名の下で:app: Pyramid`リソースツリー内のアプリケーションとしていくつかのリソースをホストしたい場合に便利です。たとえば、 ` / cms``を `` http:// example.com / を介して到達可能なアプリケーションとして( &quot;http://example.com&quot;とは対照的に)トラバーサルパスでオブジェクトを提供したいかもしれません/ cms)。

仮想ルートを指定するには、環境変数をWSGI環境の `` HTTP_X_VHM_ROOT``に `` root &#39;&#39;リソースとして動作するリソースツリー内のリソースオブジェクトへの絶対パス名で挿入します。その結果、トラバーサルマシンはトラバース中にこの値を尊重します(トラバーサルが開始される前にPATH_INFOに先行します)。:meth: pyramid.request.Request.resource_url APIは、&quot;正しい&quot;仮想的に生成されますURL。

この機能を使用する `` http:// www.example.com / ``として `` / cms``サブオブジェクトをホストするApacheの `` mod_proxy``設定の例は次のとおりです:

1
2
3
4
5
6
7
8
9
NameVirtualHost *:80

<VirtualHost *:80>
  ServerName www.example.com
  RewriteEngine On
  RewriteRule ^/(.*) http://127.0.0.1:6543/$1 [L,P]
  ProxyPreserveHost on
  RequestHeader add X-Vhm-Root /cms
</VirtualHost>

注釈

`` RequestHeader``指示文を使うには、Apacheの `` mod_headers <http://httpd.apache.org/docs/2.2/mod/mod_headers.html> `_ moduleは使用しているApache環境で利用可能です。

term: mod_wsgi`の下で動作するa:app: Pyramid`アプリケーションでは、 `` SetEnv``を使って同じことができます:

1
2
3
<Location />
  SetEnv HTTP_X_VHM_ROOT /cms
</Location>

仮想ルートを設定しても、term: `URL dispatch`に基づいてアプリケーションを使用しても効果はありません。

その他のドキュメントと例

:ref: traversal_module`ドキュメントには、a:func: pyramid.traversal.virtual_root` APIのAPIドキュメントがあります。呼び出されると、仮想ルートオブジェクト(または仮想ルートが指定されていない場合は物理ルートオブジェクト)を返します。

:ref: modwsgi_tutorial`は:term: mod_wsgi`を提供するための詳細な情報を持っています:app: `Pyramid`アプリケーション。