我正在尝试启动一个网络服务器,为多个子域下的多个站点提供服务。我正在使用 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'}.
我究竟做错了什么?谢谢你的帮助!