前言

内网穿透说白了就是要有公网IP,网上的文章推荐的花生壳软件,他肯定也是挑了个公网IP分给你。
不过我不喜欢装软件,能不装就不装

所以就用自己的云服务器和公网IP搞一下

背景

我搞这个是想在公网能访问我自己电脑部署的stable-diffusion服务

SSH反向隧道

ssh -fNR REMOTE_PORT:localhost:LOCAL_PORT root@REMOTE_IP

这个的作用,是把远端主机所有发送到REMOTE_PORT端口的包转发到本地主机上
是双向通信
(在本地主机上执行)

nginx反向代理

nginx默认会使用/etc/nginx/nginx.conf这个文件,这里指定include了/etc/nginx/conf.d中的*.conf
所以在/etc/nginx/conf.d下新建个default.conf然后写入配置就行

server {
    listen       7860;
    server_name  your_domain_or_server_ip;

    location / {
        proxy_pass http://127.0.0.1:7860;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # WebSocket代理配置
    location /ws {
        proxy_pass http://127.0.0.1:7860;
        proxy_http_version 1.1;
        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 Origin "";
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
    
}

**注意:**上述写法只能代理访问路径是url/ws的websocket请求,如果websocket代理报错什么websocket请求404 not found,很可能是因为协议没升级,普通地作为http请求转发过去了,检查配置路径是否正确

或者,将websocket代理合并到主路径:

server {
    listen       7860;
    server_name  your_domain_or_server_ip;

    location / {
        proxy_pass http://127.0.0.1:7860;
        proxy_http_version 1.1;
        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 Origin "";
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 86400;
    }
}

反向代理的作用,是监听云服务器上的另一个端口,然后转发给ssh隧道所建立的端口

因为端口只能被一个进程绑定,所以需要一个服务器来转发请求

小结

1)通过ssh反向隧道将本地的7860端口与云服务器的7860端口建立连接

2)在云服务器上配置nginx反向代理,将云上9090端口收到的包反向代理给7860端口

3)访问云服务器的9090端口,即可实现到本地主机7860端口的内网穿透

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐