您的位置:首页 > 教育 > 培训 > 上海红蚂蚁装潢设计有限公司_宁波互联网公司_企业查询系统_百度指数如何分析

上海红蚂蚁装潢设计有限公司_宁波互联网公司_企业查询系统_百度指数如何分析

2025/1/8 6:09:36 来源:https://blog.csdn.net/caridle/article/details/144935331  浏览:    关键词:上海红蚂蚁装潢设计有限公司_宁波互联网公司_企业查询系统_百度指数如何分析
上海红蚂蚁装潢设计有限公司_宁波互联网公司_企业查询系统_百度指数如何分析

搞了一个晚上,终于建立了一个内网穿透。和AI配合,还是得自己思考,AI配合才能搞定,不思考只依赖AI也不行。内网服务器只是简单地使用了python -m http.server 8899,但是对于Gradio建立的服务器好像不行,会出问题。
在这里插入图片描述


问题背景

需求

  • 将内网的 Web 服务器(http://localhost:8899)通过 SSH 隧道映射到外网服务器,使外网可以通过外网服务器的 8080 端口访问内网服务。

环境

  • 内网服务器
    • Web 服务运行在 localhost:8899
    • 可以访问外网服务器,但外网服务器无法直接访问内网服务器(由于防火墙限制)。
  • 外网服务器
    • 外网 IP:47.238.40.212
    • 需要将 8080 端口的流量通过 SSH 隧道转发到内网的 8899 端口。

问题分析

  1. SSH 隧道未正确建立

    • 外网服务器的 8080 端口被 sshd 监听,但流量未正确转发到内网的 8899 端口。
    • 错误日志显示 upstream prematurely closed connection,表明连接被提前关闭。
  2. Nginx 配置问题

    • Nginx 配置正确,将请求转发到 127.0.0.1:8080,但 SSH 隧道未正常工作。
  3. 客户端服务问题

    • 内网的 Web 服务(http://localhost:8899)正常运行,但未通过 SSH 隧道暴露到外网。

解决方案

1. 配置 SSH 隧道

在内网服务器上执行以下命令
ssh -R 8080:localhost:8899 user@47.238.40.212
  • 参数说明
    • -R 8080:localhost:8899:将外网服务器的 8080 端口转发到内网的 8899 端口。
    • user@47.238.40.212:外网服务器的用户名和 IP 地址。
验证 SSH 隧道
  • 在外网服务器上检查 8080 端口是否被 sshd 监听:
    netstat -tuln | grep 8080
    
    输出示例:
    tcp        0      0 127.0.0.1:8080          0.0.0.0:*               LISTEN      12345/sshd: user
    tcp6       0      0 ::1:8080                :::*                    LISTEN      12345/sshd: user
    

2. 配置外网服务器的 SSH 服务

编辑 /etc/ssh/sshd_config
  • 确保以下配置项已启用:
    AllowTcpForwarding yes
    GatewayPorts yes
    
  • 重启 SSH 服务以应用更改:
    sudo systemctl restart sshd
    
检查防火墙
  • 确保外网服务器的防火墙允许 8080 端口的流量:
    sudo firewall-cmd --permanent --add-port=8080/tcp
    sudo firewall-cmd --reload
    

3. 配置 Nginx

编辑 Nginx 配置文件
  • 在外网服务器上编辑 /etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf,添加以下内容:
    server {listen 80;server_name xinnian.wang;location / {proxy_pass http://127.0.0.1:8080;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_connect_timeout 300s;proxy_read_timeout 300s;proxy_send_timeout 300s;}
    }
    
测试 Nginx 配置
  • 检查配置文件语法:
    sudo nginx -t
    
  • 重新加载 Nginx 配置:
    sudo systemctl reload nginx
    

4. 启动内网 Web 服务

在内网服务器上启动 Web 服务
  • 使用 Python 的 http.server 模块启动 Web 服务:
    python -m http.server 8899
    
  • 确保服务正常运行,并可以通过 http://localhost:8899 访问。

5. 测试 SSH 隧道

在外网服务器上测试
  • 使用 curl 测试 8080 端口:
    curl http://127.0.0.1:8080
    
    如果 SSH 隧道正常工作,应该返回内网 Web 服务的内容。
通过外网访问
  • 在外网浏览器中访问 http://47.238.40.212:8080,确认可以访问内网 Web 服务。

最终结果

  • SSH 隧道成功建立
    • 外网服务器的 8080 端口通过 SSH 隧道转发到内网的 8899 端口。
  • Nginx 配置正确
    • Nginx 将外网请求转发到 127.0.0.1:8080,并通过 SSH 隧道传递到内网。
  • 测试成功
    • 通过 curl http://127.0.0.1:8080 和浏览器访问 http://47.238.40.212:8080,成功访问内网 Web 服务。

后续建议

  1. 保持 SSH 隧道稳定

    • 使用 autosshtmux 保持 SSH 隧道的稳定性。
    • 示例:
      autossh -M 0 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 8080:localhost:8899 user@47.238.40.212
      
  2. 安全性

    • 使用 SSH 密钥认证代替密码认证。
    • 限制允许访问的 IP 地址。
  3. 日志监控

    • 定期检查 Nginx 和 SSH 的日志,确保没有异常访问或错误。
      🚀

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com