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