我正在创建一个服务,其中django容器是根据需要生成的,供用户在线测试后端功能。
我想让生成的实例对主域的用户可用:
示例:用户生成暴露端口8000
的容器userapp
,它应该可以在我的域上访问mydomain.net/userapp/
我不知道正在运行的实例的数量,也不知道它们的名称。
我在这里找到了一个nginx-proxy容器,它动态地为nginx创建配置,以便为子域提供容器:
$ docker run -e VIRTUAL_HOST=userapp.mydomain.com…
我想让它在路径上可访问。我如何创建动态代理路径与nginx或django?
我用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)