nginx+ssh通过云服务器配置内网穿透

前言

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

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

背景

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

SSH反向隧道

ssh -fNR LOCAL_PORT:localhost:REMOTE_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       9876;
    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       9876;
    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隧道所建立的端口

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

运行

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

再通过nginx反向代理,将云上9090端口收到的包反向代理给7860端口

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

要在 Docker 容器中运行 Nginx 并使用 SSH 进行内网穿透,可以采用以下步骤: 1. 在 Docker 中运行 Nginx 可以使用以下命令来运行一个 Nginx 容器: ``` docker run -d --name nginx -p 80:80 nginx ``` 这将在 Docker 中创建一个名为 “nginx” 的容器,并将容器内的 80 端口映射到宿主机的 80 端口。可以通过访问宿主机的 IP 地址来访问 Nginx。 2. 安装 SSH 服务 在 Nginx 容器中安装 SSH 服务,可以使用以下命令: ``` docker exec -it nginx bash apt-get update apt-get install ssh ``` 这将在容器内安装 SSH 服务。 3. 配置 SSH 服务 编辑 SSH 配置文件 `/etc/ssh/sshd_config`,将以下内容添加到文件末尾: ``` GatewayPorts yes ``` 这将启用 SSH 网关端口转发功能,以便可以从公共网络访问 Docker 容器中的服务。 4. 启动 SSH 服务 使用以下命令启动 SSH 服务: ``` service ssh start ``` 5. 配置内网穿透 使用 ngrok 等工具,将宿主机的 SSH 端口映射到公共网络上。然后,使用 SSH 客户端连接到公共网络上的 ngrok 服务器,并将流量转发到 Docker 容器中的 SSH 服务。 例如,假设 ngrok 将宿主机的 SSH 端口映射到 `tcp://0.tcp.ngrok.io:12345`,则可以使用以下命令连接到 Docker 容器中的 SSH 服务: ``` ssh -p 12345 -o "ProxyCommand=nc -X 5 -x 127.0.0.1:1080 %h %p" root@localhost ``` 请注意,上述命令中的 `-o "ProxyCommand=nc -X 5 -x 127.0.0.1:1080 %h %p"` 部分是用于 SOCKS5 代理的,如果不需要代理,则可以省略此部分。 以上就是在 Docker 中运行 Nginx 并使用 SSH 进行内网穿透的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值