我正在创建一个服务,根据需要生成django容器,以便用户在线测试后端功能。
我想让主域上的用户可以使用衍生的实例:
示例:用户生成公开端口userapp
的容器8000
,它应该可以在我的域中以mydomain.net/userapp/
我不知道预先运行的实例数量或名称。
我found a nginx-proxy容器在这里为nginx动态创建配置,以便将容器提供给子域:
$ docker run -e VIRTUAL_HOST = userapp.mydomain.com ...
我想在路径上访问它。如何使用nginx或django创建动态代理路径?
答案 0 :(得分:1)
我用django-http-proxy来解决这个问题。
我可以继承HttpProxy
并创建DynProxyView
:
<强> views.py 强>
from httpproxy.views import HttpProxy
class DynProxyView(HttpProxy):
def get_object(self):
return Fiddle.objects.get(pk=self.kwargs['pk'])
rewrite = True
@property
def base_url(self):
url= self.request.scheme+"://localhost:" + str(self.get_object().port)
print url
return url
def get_full_url(self, url):
result = super(DynProxyView, self).get_full_url(url)
return result[:-1] # To get rid of a pesky redundant slash
<强> urls.py 强>
...
url(r'^(?P<pk>[-\w]+)/result/(?P<url>.*)$', DynProxyView.as_view(),name='result'),
...
<强> models.py 强>
class Fiddle(models.Model):
name = models.CharField(max_length=20, unique=True)
hash = models.CharField(max_length=32, null=True, blank=True)
port = models.IntegerField(null=True, blank=True)
这样我就能获得理想的效果。