1

チェリーピー構成に次のように記述していますが、/foo はhttp://foo.bar.comへのリクエストを処理していません。チェリーピー アプリは、ホスト ヘッダーを通過させる nginx の背後にあります。 / の Host ヘッダーであり、「foo.bar.com」を返すため、/foo がこの要求を処理することを期待しています。

[/]
request.dispatch = cherrypy.dispatch.VirtualHost(**{ 
    'foo.bar.com': '/foo',
})

Nginx は 127.0.0.1 への proxy_pass を次のように実行しています。

proxy_set_header        Host            $host;
proxy_set_header        X-Real-IP       $remote_addr;
proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
4

2 に答える 2

0

問題はわかりませんが、アプリケーションとグローバル構成の問題のようです。グローバル構成にロードされたserver.cfgでVirtualHostsを設定していて、アプリケーション構成なしでマウントしていました:

cherrypy.config.update("server.cfg")
cherrypy.tree.mount(root, "/")

アプリケーション構成を設定すると、問題が修正されました。

conf = {
  "/": {
    "request.dispatch": cherrypy.dispatch.VirtualHost(
      **{
        "foo.domain.com:8000": "/foo",
        "bar.domain.com:8000": "/bar"
      }
    )
  }
}
cherrypy.tree.mount(root, "/", conf)

誰かが説明したい場合は、私は彼らの答えを受け入れます。server.cfg (cherrypy.config) の [/] の下に配置した設定が正しく機能するかどうか、またはすべてのパス固有の構成をアプリケーション構成に含める必要があるかどうか疑問に思っています。

于 2013-10-31T12:58:25.087 に答える
0

グローバル構成からディスパッチャーを設定することはできません。これは明らかではないと思いますが、ディスパッチャー自体が構成のマージを処理する責任があります

混乱のもう 1 つの理由は、cherrydコマンドを使用すると、通常のように見える可能性があるためです。

たとえば、次のようなアプリケーションをデプロイできます。

cherryd -c server.cfg 

次のように持つserver.cfg

[global]
tree.app = myapp.root
[/]
request.dispatch = cherrypy.dispatch.MethodDispatcher()

での次の実装myapp.py:

import cherrypy

class Root(object):
    exposed = True

    def GET(self):
        return "Hi!"

root = cherrypy.Application(Root())

しかしcherryd、彼の翼の下にいくつかのトリックがあります。

1 つは、設定する追加の名前空間「ツリー」です。tree.NAME_OF_APP = INSTANCE_OF_CHERRYPY_APPさらに重要なことに、「グローバル」構成ファイルにディスパッチャを設定するcherrydと、ツリーにアプリケーションが 1 つしかマウントされていない場合にコマンドが構成ファイルをアプリケーションにマージするため、機能します。

何かのようなもの:

cherrypy.tree.apps.values()[0].merge(config)

「アプリごとのローカル」構成のような「グローバル」構成を効果的に作成します。

于 2013-11-01T09:07:03.793 に答える