0

我正在尝试启动一个网络服务器,为多个子域下的多个站点提供服务。我正在使用 Pythen 和 webapp2 并粘贴。我的服务器位于为服务器分配静态 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 设置为 CNAME,例如 example.dlinkddns.com

这是服务器/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')

这是我局域网中服务器的静态分配 IP 地址。输出变为

Fallback... () {'domain':'192.168.178.33'}.

我究竟做错了什么?谢谢你的帮助!

4

0 回答 0