Virtual Hosts WebApp für Google App Engine ermöglicht Domain Masking / Multiple Hostname

Mit einem kleinen Workaround ist es möglich mehrere Domains über eine einzelne Google App Engine zu betreiben. Am einfachsten lassen sich multiple Hostnames bzw. Domain Masking für eine WebApp realisieren. Es funktioniert ähnlich Name-based Virtual Hosts bei einem Apache Webserver.

Virtual Hosts WebApp für Google App Engine

Für mein SimpleHomePage Framework wollte ich ähnlich Confixx mehrere Domains über eine App Engine betreiben und das Domain Masking über ein Admin Frontend dynamisch konfigurieren. Der Trick ist, dass ich abhängig vom HOST_NAME in os.environ das URL-Mapping in der Main-Methode steuere. Damit lassen sich beliebig viele Domains über eine Instanz betreiben.

 

#!/usr/bin/env python

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class DefaultMainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('default domain handler')

class TestMainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('test domain handler')

application_default = webapp.WSGIApplication([
  ('/', DefaultMainPage)
],debug=False)

application_test = webapp.WSGIApplication([
  ('/', TestMainPage)
],debug=True)

def main():
  import os
  if os.environ['HTTP_HOST'].startswith('test.'):
    run_wsgi_app(application_test)
  elif os.environ['HTTP_HOST'].startswith('localhost:8080'):
    run_wsgi_app(application_test)
  else:
    run_wsgi_app(application_default)

if __name__ == "__main__":
    main()

Im Beispiel gibt es die zwei VHOST-Mappings application_default und application_test. Für die Subdomain test.myappid.appspot.com und Domain localhost:8080 wird das Test-Mapping aufgerufen. Für alle anderen Hostnames wird das Default-Mapping genutzt. Der Else-If-Zweig kann für andere Domains (z.B. http://www.domain.com) um ein eigenes URL-Mapping erweitert werden.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: