如何将用户重定向到容器 Web 应用,但显示不同的地址



我正在创建一个Web应用程序,当有人像这样访问它时:

http://x.x.x.x:1337/bazinga

它将创建一个容器,其中包含主机的端口8083映射到容器的端口80。然后我想将用户重定向到容器内的 Web 应用程序 (nginx)。

为此,我需要将用户重定向到http://localhost:8083,这将重定向到容器nginx。问题是我不希望用户看到端口8083。因为在不久的将来,这个 Web 应用程序应该会有 500 人,对于每个人,我将创建一个具有不同端口的容器,不仅8083而且我不希望他们能够通过尝试不同的端口来访问其他人的容器。

因此,我想将用户重定向到http://localhost:8083但不显示它。用户应该看到一些随机的URL,即:http://x.x.x.x/CS7YJVS7E8KTBD0AMDO3

我该怎么做?

这是我的代码:

from flask import Flask, session, redirect
import docker
import random
import string
app = Flask(__name__)
@app.route("/")
def index():
return "Congratulations, it's a web app!"
@app.route("/<random_id>")
def random_url(random_id):
if random_id not in global_routes:
return "URL doesn't exist"
return "My user!"
@app.route("/bazinga")
def bazinga():
randomString = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(20))
session["user"] = randomString
container = client.containers.run("nginx", remove=True, detach=True, ports={'80/tcp':'8083/tcp'})
global_routes[randomString] = True
return redirect("http://localhost:8083")

global_routes = {}
client = docker.from_env()
if __name__ == "__main__":
app.run(host="127.0.0.1", port=1337, debug=True)

我成功地做到了。

我创建了这样的动态路由:

@app.route("/<random_id>")
def random_url(random_id):
if random_id not in global_containers:
return "URL doesn't exist"
r = requests.get("http://localhost:" + str(global_containers[random_id].host_port))
return r.content

我正在保存容器并重定向到容器的 id.
在路由函数中,我可以使用该 ID 查找容器并向容器发送 get 请求将其返回。