複数のサブドメインで複数のサイトにサービスを提供する Web サーバーを起動しようとしています。私は webapp2 と貼り付けで Pythen を使用しています。私のサーバーは、サーバーに静的IPアドレスを割り当て、ポート80を転送するルーターの背後にあります。ルーター自体には、ISPによって割り当てられた静的IPアドレスがないため、DDNSを使用しています(example.dlinkddns.comとしましょう)。私のフォルダー階層では、各フォルダーはサブドメインを表し、Python モジュールです。
このような:
server/app.py
server/www
server/www/__init__.py
server/test
server/test/__init__.py
www.mydomain.com および test.mydomain.com 経由でアクセスできる必要があります。 *.mydomain.com を example.dlinkddns.com の CNAME に設定します
これは server/app.py です:
import sys
import os
import webapp2
from webapp2_extras import routes
from paste import httpserver
DOMAIN = 'mydomain.com'
class Fallback(webapp2.RequestHandler):
def get(self, *args, **kw):
self.response.write('Fallback...\n'+str(args)+'\n'+str(kw))
def main():
dirs = [name for name in os.listdir(".") if os.path.isdir(name)]
dirs.remove('env') # folder created by package virtualenv - needed for paste
rs = []
for subdomain in dirs:
# import subdomain package
exec('import '+subdomain)
# add routes defined for subdomain
exec('rs += [routes.DomainRoute("'+subdomain+'.'+DOMAIN+'", '+subdomain+'.routes)]')
rs += [routes.DomainRoute("<domain:.*>",[webapp2.Route('/<:.*>',Fallback,name='fallback')])]
app = webapp2.WSGIApplication(rs)
httpserver.serve(app, host='0.0.0.0', port='80')
if __name__ == '__main__':
main()
そして、これは私の www パッケージがどのように見えるかです:
__init__.py
import webapp2
class MainMain(webapp2.RequestHandler):
def get(self,target):
self.response.write('Hello, webapp2! www.mydomain.com at:'+target)
routes = [
webapp2.Route('/<target>', handler=MainMain, name='main-main')
]
問題は、www.mydomain.com にアクセスすると、フォールバック ハンドラーは一致しているように見えますが、MainMain ハンドラーは一致するはずです。出力は
Fallback... () {'domain':'0.0.0.0'}.
アプリがドメインをまったく認識しないようです。example.dlinkddns.com にアクセスしても同じことが起こります。フォールバックハンドラーなしでも試してみましたが、すべてのルートとすべてのドメインの404ページしか表示されませんでした...
私もサーバーを起動しようとしました
httpserver.serve(app, host='192.168.178.33', port='80')
これは、LAN 内のサーバーに割り当てられた静的 IP アドレスです。出力は次のように変わります
Fallback... () {'domain':'192.168.178.33'}.
私は何を間違っていますか?助けてくれてありがとう!