Created
November 11, 2014 09:28
-
-
Save href/d45c4c14c6e968fe027c to your computer and use it in GitHub Desktop.
Virtualhost in Morepath
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import morepath | |
import re | |
from pprint import pprint | |
class App(morepath.App): | |
def request(self, environ): | |
request = super().request(environ) | |
pprint(sorted(request.headers.items())) | |
print(request.url) | |
return request | |
class Wiki(morepath.App): | |
def __init__(self, id): | |
self.id = id | |
@App.path('') | |
class AppRoot(object): | |
pass | |
def adjust_url(request, url): | |
prefix = request.headers.get('x-http-prefix', '/') | |
negative_prefix = request.headers.get('x-http-script-name', '/') | |
url = prefix + '/' + re.sub('^{}'.format(negative_prefix), '', url) | |
return url.replace('//', '/') | |
@App.view(model=AppRoot) | |
def get_root(self, request): | |
return adjust_url(request, request.link(self)) | |
@Wiki.path('') | |
class WikiRoot(object): | |
pass | |
@Wiki.view(model=WikiRoot) | |
def get_wiki_root(self, request): | |
return adjust_url(request, request.link(self)) | |
@App.mount(path='wiki/{id}', app=Wiki) | |
def get_wiki(id): | |
return Wiki(id) | |
if __name__ == '__main__': | |
config = morepath.setup() | |
config.scan() | |
config.commit() | |
morepath.run(App()) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
server { | |
server_name morepath.dev; | |
listen *:80; | |
location / { | |
proxy_pass http://127.0.0.1:5000/; | |
proxy_set_header X-Http-Prefix /; | |
proxy_set_header X-Http-Script-Name /; | |
} | |
location /alternative-root { | |
proxy_pass http://127.0.0.1:5000/; | |
proxy_set_header X-Http-Prefix /alternative-root; | |
proxy_set_header X-Http-Script-Name /; | |
} | |
location /alternative-wiki-root { | |
proxy_pass http://127.0.0.1:5000/wiki; | |
proxy_set_header X-Http-Prefix /alternative-wiki-root; | |
proxy_set_header X-Http-Script-Name /wiki; | |
} | |
} | |
server { | |
server_name ~^(?<subdomain>[a-z0-9-]+)\.morepath\.dev$; | |
listen *:80; | |
location / { | |
proxy_pass http://127.0.0.1:5000/wiki/$subdomain$uri; | |
proxy_set_header X-Http-Prefix /; | |
proxy_set_header X-Http-Script-Name /wiki/$subdomain; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment