首选方案:Nginx Stream
理由:1Panel 已经跑着 Nginx,你不需要安装任何额外软件,性能最好,最稳定,技术最“正统”。配置虽然要写几行代码,但结构非常清晰,一劳永逸。
备选方案(简单场景):sslh
理由:如果你不太想动 Nginx 的配置,或者担心改错,sslh 是独立安装的,不影响现有服务,配置极其简单。
备选方案(复杂场景):FRP
理由:只有当你的客户端机器没有公网 IP(比如你在家里的电脑上运行 rsync),或者你未来有更多内网穿透需求时,FRP 才是正确且唯一的选择。
最终推荐:sslh
考虑到你的场景(只有1个端口、服务器不能主动连外、面板可能直接用IP访问),sslh 是更稳妥、更简单的选择。
version: "3.8"
services:
rsync-server:
image: eeacms/rsync
container_name: rsync-server
ports:
- "5533:22"
environment:
SSH_AUTH_KEY_1: "ssh-rsa 秘== root@KylinV10"
volumes:
- /data/vdb/docker/compose/web/nginx/html/file:/data
command: server
restart: unless-stopped测试并能连接
{/collapse-item}
{collapse-item label="安装sslh和配置nginx" open}
公网用户 → :38888 → sslh 分流
├─ HTTPS/HTTP → Nginx(:8888) → 1Panel/Tomcat/WebDAV
└─ SSH/rsync → rsync-server(:5533)1Panel 地址是 http://192.168.0.204:30900/,这是通过 IP 直接访问。但是 sslh 需要监听 38888 端口并转发 HTTP/HTTPS 流量。
更新后的 docker-compose.yml
使用 yrutschle/sslh
version: '3.3'
services:
sslh:
image: ghcr.io/yrutschle/sslh:master
container_name: sslh
restart: always
network_mode: "host"
command: --listen 0.0.0.0:38888 --ssh 127.0.0.1:5533 --http 127.0.0.1:8888 --foreground参数 值 说明
--listen 0.0.0.0:38888 监听公网端口
--ssh 127.0.0.1:5533 转发到 rsync-server(SSH)
--http 127.0.0.1:8888 转发到 Nginx(HTTP)
--foreground - 容器前台运行(必须)
注意!
需要在 Nginx 配置中添加重定向重写规则,将返回的 Location 头中的端口和主机名修正。
location /webdav/ {
proxy_pass http://192.168.0.204:32888/;
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;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 86400;
# 关键:修改后端返回的重定向地址
proxy_redirect http://192.168.0.204:8888/ http://$host:38888/;
proxy_redirect http://$host:8888/ http://$host:38888/;
}各服务访问地址:
服务 地址
1Panel 面板 http://192.168.0.204:38888/
WebDAV http://192.168.0.204:38888/webdav/
Tomcat 应用 http://192.168.0.204:38888/jxsj/
Tomcat 应用 http://192.168.0.204:38888/tzsj/
upstream tomcat {
server tomcat9-jdk8:8080;
}
server {
listen 8888;
listen [::]:8888;
server_name localhost;
# 1Panel 面板路由(新增)
location / {
# 如果想让 / 直接访问 1Panel,用这个
proxy_pass http://192.168.0.204:30900/;
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;
# 1Panel 需要 WebSocket 支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 或者保留原来的静态页,用 /panel/ 访问 1Panel
# location /panel/ {
# proxy_pass http://192.168.0.204:30900/;
# 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;
# proxy_http_version 1.1;
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection "upgrade";
# }
# WebDAV 路由
location /webdav/ {
proxy_pass http://192.168.0.204:32888/;
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;
client_max_body_size 0;
proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 86400;
# 防止重定向跳转到 8888
proxy_redirect http://192.168.0.204:8888/ http://$host:38888/;
proxy_redirect http://$host:8888/ http://$host:38888/;
}
# Tomcat 路由
location ~ ^/(jxsj|tzsj) {
proxy_pass http://tomcat;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect http://$host:8888/ http://$host:38888/;
}
# 静态页(如果 location / 被 1Panel 占用,这个需要删除或移到其他路径)
# location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
# }
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~* \.(lst|log|conf|config|bak|sql|git|svn)$ {
deny all;
return 404;
}
}{/collapse-item}
评论 (0)