如何实现FFT NPainting LaMa远程访问?Nginx反向代理配置
1. 为什么需要远程访问WebUI?
本地运行http://127.0.0.1:7860很方便,但实际使用中常遇到这些情况:
- 你用手机或平板临时查看修复效果,却无法直连本地地址
- 团队成员想协作测试,但每人单独部署太费时间
- 客户需要在线体验图像修复能力,不能要求对方装环境
- 你在公司外想继续处理昨天没修完的图片
这些问题的本质是:WebUI默认只监听本地回环地址(0.0.0.0:7860虽显示,但未开放公网访问权限)。而Nginx反向代理正是安全、稳定、零依赖的解决方案——它不修改原程序,不重写代码,只需几行配置,就能把http://your-domain.com映射到后端的http://127.0.0.1:7860。
更重要的是,科哥二次开发的这个FFT NPainting LaMa WebUI,界面友好、操作直观,但它的服务本质仍是Flask/FastAPI类轻量Web应用,天然适配反向代理。我们接下来就一步步把它“搬”到公网可访问的位置。
2. 前置准备:确认服务已就绪且可本地访问
在配置Nginx前,请务必验证以下三点,避免后续排查绕路:
2.1 确认WebUI服务正在运行
打开终端,执行:
cd /root/cv_fft_inpainting_lama bash start_app.sh看到如下输出即为成功启动:
===================================== ✓ WebUI已启动 访问地址: http://0.0.0.0:7860 本地访问: http://127.0.0.1:7860 按 Ctrl+C 停止服务 =====================================验证点:
0.0.0.0:7860表示服务监听所有网卡,而非仅限localhost,这是反向代理的前提。
2.2 本地浏览器验证可用性
在服务器本机(或SSH连接后用curl)测试:
curl -I http://127.0.0.1:7860返回HTTP/1.1 200 OK即通。再用本地电脑浏览器访问http://服务器IP:7860—— 如果能打开完整界面(含画笔工具、上传区等),说明端口未被防火墙拦截。
2.3 检查系统基础组件
确保服务器已安装Nginx并开机自启(以Ubuntu/Debian为例):
# 安装(如未安装) sudo apt update && sudo apt install -y nginx # 启动并设为开机自启 sudo systemctl enable nginx sudo systemctl start nginx # 验证Nginx运行状态 sudo systemctl status nginx | grep "active (running)"若使用CentOS/RHEL,替换为sudo yum install -y nginx或sudo dnf install -y nginx。
3. Nginx反向代理核心配置详解
Nginx配置不是“复制粘贴就完事”,关键在于理解每行作用。我们为你拆解最精简、最稳妥的配置方案。
3.1 创建专属站点配置文件
不修改默认的/etc/nginx/sites-enabled/default,而是新建一个独立配置,便于管理与回滚:
sudo nano /etc/nginx/conf.d/fft-lama.conf粘贴以下内容(请逐行阅读注释):
# fft-lama.conf —— FFT NPainting LaMa 反向代理配置 upstream lama_backend { # 指向本地WebUI服务(注意:必须用127.0.0.1,不可用localhost) server 127.0.0.1:7860; } server { listen 80; server_name your-domain.com; # ← 替换为你的域名,如 imagefix.example.com # 强制HTTPS(推荐,如暂无SSL证书可先注释此行) # return 301 https://$server_name$request_uri; # 根路径代理全部请求 location / { proxy_pass http://lama_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 关键:支持WebSocket(WebUI中部分实时交互依赖此) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 超时设置(大图修复可能耗时较长) proxy_connect_timeout 60s; proxy_send_timeout 300s; proxy_read_timeout 300s; # 防止大文件上传被截断(修复图常达5MB+) client_max_body_size 50M; } # 静态资源缓存优化(提升UI加载速度) location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 1y; add_header Cache-Control "public, immutable"; } }3.2 配置说明:为什么这样写?
| 配置项 | 作用 | 不这样写的后果 |
|---|---|---|
upstream lama_backend | 定义后端服务池,解耦地址变更 | 直接写proxy_pass http://127.0.0.1:7860也可,但扩展性差 |
proxy_set_header X-Real-IP等 | 传递真实客户端IP,日志和限流才准确 | 所有访问日志IP都显示为127.0.0.1 |
proxy_http_version 1.1+Upgrade | 启用WebSocket支持 | 画笔实时绘制、进度条更新等功能失效 |
proxy_read_timeout 300s | 允许最长5分钟响应(大图修复需时间) | 修复中途报504 Gateway Timeout |
client_max_body_size 50M | 支持上传高清图(如4K截图) | 上传稍大图片直接报413 Request Entity Too Large |
注意:
server_name必须填你实际拥有的域名。若暂无域名,可先用服务器IP(如server_name 123.45.67.89;),但浏览器会提示“不安全”,且部分功能(如Service Worker)受限。
3.3 启用配置并重启Nginx
# 测试配置语法是否正确(关键!避免重启失败) sudo nginx -t # 若输出"Syntax OK",则重载配置(比restart更安全) sudo systemctl reload nginx此时,在浏览器访问http://your-domain.com(或http://服务器IP),应看到与http://服务器IP:7860完全一致的WebUI界面。
4. 进阶加固:启用HTTPS与基础安全防护
HTTP明文传输存在风险:上传的图片、标注数据可能被中间人窃取。启用HTTPS是生产环境的底线要求。
4.1 使用Certbot一键获取免费SSL证书
以Let’s Encrypt为例(Ubuntu/Debian):
# 安装Certbot sudo apt install -y certbot python3-certbot-nginx # 自动获取并配置证书(自动修改Nginx配置) sudo certbot --nginx -d your-domain.com # 按提示选择:1. Redirect to HTTPS(强烈推荐)执行后,Certbot会:
- 自动申请
your-domain.com的SSL证书 - 修改
/etc/nginx/conf.d/fft-lama.conf,添加443端口HTTPS配置 - 设置自动续期(systemd timer)
验证:浏览器访问
https://your-domain.com,地址栏显示锁图标,且无证书警告。
4.2 添加基础访问控制(可选但推荐)
防止恶意扫描或暴力尝试,可在location /块内加入简单IP白名单(如仅允许公司IP访问):
# 在 location / { ... } 内添加(替换为你的可信IP段) allow 203.0.113.0/24; allow 192.0.2.10; deny all;或添加基础认证(输入账号密码才能访问):
# 生成密码文件(首次运行会提示输入密码) sudo htpasswd -c /etc/nginx/.htpasswd admin # 在 location / { ... } 内添加 auth_basic "FFT LaMa Admin Access"; auth_basic_user_file /etc/nginx/.htpasswd;5. 故障排查:5个高频问题与解决方法
当访问https://your-domain.com出现异常时,按此顺序排查:
5.1 问题:页面空白,控制台报错Failed to load resource: net::ERR_CONNECTION_REFUSED
- 原因:WebUI服务未运行,或Nginx未正确代理到7860端口
- 检查:
# 确认WebUI进程存在 ps aux | grep app.py | grep -v grep # 确认7860端口被监听 ss -tuln | grep :7860 # 查看Nginx错误日志 sudo tail -20 /var/log/nginx/error.log
5.2 问题:样式错乱、JS加载失败,F12看到404
- 原因:WebUI生成的静态资源URL仍指向
http://127.0.0.1:7860/static/... - 解决:在启动脚本
start_app.sh中,强制指定根URL(常见于Gradio/Streamlit类框架)
修改启动命令为:python app.py --server-name 0.0.0.0 --server-port 7860 --root-path "/" # 或若为Gradio,加 --root-path 参数 # gradio app.py --server-name 0.0.0.0 --server-port 7860 --root-path "/"科哥版本已内置
--root-path "/"支持,确保start_app.sh中调用时包含该参数。
5.3 问题:上传图片后卡在“执行推理...”,无响应
- 原因:Nginx超时设置过短,或后端内存不足
- 解决:
- 检查Nginx配置中
proxy_read_timeout是否 ≥300 - 查看服务器内存:
free -h,若剩余<1G,考虑关闭其他进程或升级配置 - 在
app.py中降低模型精度(如将fp16=True改为fp16=False)
- 检查Nginx配置中
5.4 问题:画笔无法绘制,或绘制后无反应
- 原因:WebSocket未启用,或浏览器拦截了非安全上下文的WebSocket
- 解决:
- 确认Nginx配置中包含
proxy_http_version 1.1和Upgrade头 - 必须使用HTTPS(HTTP下现代浏览器禁用WebSocket)
- 清除浏览器缓存,或换Chrome无痕窗口测试
- 确认Nginx配置中包含
5.5 问题:修复结果图片下载路径错误,显示为http://127.0.0.1:7860/file=...
- 原因:WebUI生成的下载链接未适配反向代理后的域名
- 解决:在
app.py或前端JS中,将所有window.location.origin替换为https://your-domain.com
或更稳妥方式:在Nginx中重写响应头(需编译Nginx withsubstitutions4nginx模块,较复杂,建议优先改代码)
6. 生产环境最佳实践建议
完成基础配置后,让系统更健壮、更易维护:
6.1 使用Systemd守护WebUI进程
避免SSH断开导致服务终止。创建服务文件:
sudo nano /etc/systemd/system/fft-lama.service[Unit] Description=FFT NPainting LaMa WebUI After=network.target [Service] Type=simple User=root WorkingDirectory=/root/cv_fft_inpainting_lama ExecStart=/bin/bash /root/cv_fft_inpainting_lama/start_app.sh Restart=always RestartSec=10 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target启用并启动:
sudo systemctl daemon-reload sudo systemctl enable fft-lama sudo systemctl start fft-lama6.2 日志集中管理
将WebUI日志接入系统日志,便于统一监控:
# 修改 start_app.sh,将输出重定向到 journal # 原:python app.py ... # 改为: python app.py --server-name 0.0.0.0 --server-port 7860 2>&1 | systemd-cat -t fft-lama查看日志:sudo journalctl -u fft-lama -f
6.3 定期备份与版本管理
- 输出目录
/root/cv_fft_inpainting_lama/outputs/建议每日rsync到NAS或对象存储 - 代码仓库打Tag:
git tag v1.2.0-nginx-ready && git push origin v1.2.0-nginx-ready - 记录配置变更:
sudo cp /etc/nginx/conf.d/fft-lama.conf /etc/nginx/conf.d/fft-lama.conf.bak.$(date +%Y%m%d)
7. 总结:从本地到远程,只需三步
回顾整个过程,你真正需要动手的只有三件事:
- 确认服务健康:
bash start_app.sh→curl http://127.0.0.1:7860→ 界面可访问 - 配置Nginx代理:新建conf文件 → 填写域名 →
nginx -t→systemctl reload nginx - 启用HTTPS:
sudo certbot --nginx -d your-domain.com→ 选重定向
没有复杂的编译,不改动一行Python代码,不安装额外Python包。科哥的二次开发版本,本就为工程落地而生;而Nginx反向代理,正是连接“开发完成”与“用户可用”之间最平滑的桥梁。
现在,你可以把https://your-domain.com发给同事、客户或自己手机,随时开启专业级图像修复——移除水印、擦除路人、修复老照片,一切都在指尖完成。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。