目前平台只支持开放8080端口对外访问,如果您需要暴露多个容器内的服务(http 服务),那么可采用代理的方式是做一层路由转发实现,如使用 Nginx 转发等功能来实现。下面就介绍如何使用Nginx实现转发:

1、 安装 nginx

``
sudo apt update
sudo apt install nginx -y
pip install flask --ignore-installed blinker
`

2、启动需转发的服务

示例:
这里先用flask创建两个简单的程序,用来模拟您需开放端口的服务。创建两个文件
app2000.pyapp2001.py,让它们分别占用2000端口和2001端口。

app2000.py

`
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
return 'I
m port 2000'

if __name__ == '__main__':
# 启动服务,监听所有地址的 2000 端口
app.run(host='0.0.0.0', port=2000)

``

app2001.py

`
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
return 'I
m port 2001'

if __name__ == '__main__':
# 启动服务,监听所有地址的 2001 端口
app.run(host='0.0.0.0', port=2001)

``

然后启动这两个服务(&表示放在后台执行):

`
python app2000.py &
python app2001.py &
`

3、编辑nginx配置文件

新建配置文件 myproxy并通过下面代码进入编辑:

`
vim /myproxy
`

针对上面运行的两个程序服务,配置文件可如下:

`
server {
listen 8080;

# 代理 /v1/ 路径到本地 2000 端口
location /v1/ {
proxy_pass http://127.0.0.1:2000/; # 目标服务地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}

# 代理 /v2/ 路径到本地 2001 端口
location /v2/ {
proxy_pass http://127.0.0.1:2001/; # 目标服务地址
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

`

然后保存文件退出,用下列命令将配置文件链接到nginx(注意您创建/myproxy文件所处的路径是否有误)

`
ln -s /myproxy /etc/nginx/sites-enabled/ #将前一步创建的配置文件链接到nginx下
`

删除默认配置(可选):

`
rm /etc/nginx/sites-enabled/default
`

4、启动Nginx开始转发

`
nginx -g "daemon off;" # 将Nginx放前端启动(直接使用nginx运行可能出现僵尸进程)
nginx -s reload # 重新加载配置文件:如果以后有修改过配置文件后,就需重新加载
`

此时可以查看是否在监听8080端口:

`
ss -tlnp | grep 8080
`

如果想要检查nginx是否运行:

`
ps aux | grep nginx
`

5.验证:

可在终端中输入以下命令进行验证

`
curl http://localhost:8080/v1/ # 应返回:I
m port 2000
curl http://localhost:8080/v2/ # 应返回:Im port 2001
`

也可浏览器中访问(需在平台开放端口,并且获取到对应链接):

`
http://xn-a.suanjiayun.com:56585/v1/
http://xn-a.suanjiayun.com:56585/v2/
`

此时如果访问页面出现以下内容即为成功:

image.png

实践示例:

具体怎么替换为自己的服务:现在我需要将 /v1/替换为自己的服务:comfyui。/v2/保持不动

还是三个步骤:1.启动自己的服务。2.修改nginx配置文件。3.运行nginx

1、启动需要转发的服务:

(1)启动第一个服务:comfyui,注意设置ip(需要将host设置为0.0.0.0)和端口号(我这里设置为:2000),后面跟上 &放后台运行:

image.png

(2)启动第二个服务:继续运行之前 /v2/服务。

image.png

2、修改配置文件myproxy:

下面我将之前的/v1/修改为/comfy/,然后和上一步启服务的地址和端口对应起来,并且添加其它参数(一般下面的参数就能满足需求,可复制后按需修改),如下:

image.png

`
server {
listen 8080;

# 代理 /comfy/ 路径到本地 2000 端口
location /comfy/ {
proxy_pass http://127.0.0.1:2000/;
proxy_redirect off;
proxy_http_version 1.1;

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;

proxy_cache_bypass $http_upgrade;
proxy_buffering off;
}

# 代理 /v2/ 路径到本地 2001 端口
location /v2/ {
proxy_pass http://127.0.0.1:2001/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}

`

image.png

3、启动Nginx

启动服务、修改配置文件后就可以启动Nginx开启转发。

`
nginx -g "daemon off;" #这个命令将Nginx放在前端运行,避免出现僵尸进程
``

最后按照上文教程:开放端口-->对外开放端口-->获取访问地址,然后在地址后面分别跟上/comfy/或/v2/即可访问不同服务。
image.png
image.png