nginx+ssh实现内网穿透

nginx+ssh实现内网穿透

在本地搭建的项目只能通过本地的server在本地的电脑上运行,那么怎么通过云服务器的ip端口让外界来访问呢。

需要准备的环境:

1.自己本地运行起来的项目(这里以vue项目为例:http://localhost:8082)

2.一台云服务器,阿里云,腾讯云等等。

3.云服务器上安装过nginx,如果nginx未安装,请自行百度安装一下,安装过程还是相对简单的。

4.域名(可以没有)

一、首先登录云服务器

ssh user@ip (user为云服务器用户名,ip为云服务公网ip)。

输入密码进入服务器目录。

二、进入到nginx的安装目录,我的nginx安装在了/usr/local/nginx目录下

cd /usr/local/nginx

执行命令ls查看nginx的目录,会有一个conf文件夹,cd conf进入到文件夹,执行ls查看文件夹目录。nginx.conf为nginx的默认配置文件。

三、我们在conf文件夹下执行命令mkdir defaultconf来创建一个defaultconf文件夹,此文件夹用来存放我们额外的nginx配置。cd defaultconf进入到这个文件夹。执行命令touch cross.conf,来创建我们自己的nginx配置文件。执行命令vi cross.conf,进入到文件的编译模式。按下键盘i键进入编辑模式,然后将下面代码贴入进去

server {
  listen 8888; #这里监听的为后续访问的云服务器端口,可以设置为任意一个服务器上还不存在的端口号
  server_name xx.xx.cn; # 这里填你的域名,如果没有域名则填localhost
  
  location / {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;
    
    proxy_pass http://localhost:8899; 
    # 这里的8899相当于一个标识,和后面在本地创建通道相关,可以任意设置一个值
  }
}

到这里,按下键盘esc退出编辑模式,然后再输入:wq退出文件查看模式。

接下来 我们需要重启一下nginx,cd /usr/local/nginx/sbin,

执行./nginx -s reload。./nginx -t查看nginx启动状态。

接下来回到本地,在本地终端输入命令ssh -vnNt -R 8899:localhost:8082 user@ip

8899为我们nginx配置的标识,localhost:8082为我们本地项目的访问地址,user为云服务器用户名,ip为云服务器公网地址。回车输入云服务器登录密码就好了。最后几行为下面这样代表成功。

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: remote forward success for: listen 8899, connect localhost:8082
debug1: All remote forwarding requests processed

四、接下来我们可以打开本地浏览器,输入自己的云服务器公网ip(如果有域名也可通过域名来访问)和端口来进行访问,例如http://xx.xx.xx.xx:8888。

如果出现Invalid Host header这样的字样,不要慌,是因为vue项目devserver导致的,我们只需要在devserver里面加一个disableHostCheck: true属性即可。

注意

1.nginx的配置和安装目录可能会因为服务器环境和nginx的版本导致存在部分差异,但都大同小异,慢慢来,先确定nginx环境正常,再检查配置的穿透配置是否正确。

2.如果各个运行环境正常,第一次访问如果浏览器一直转圈的话,不要着急,耐心等一下。

要在 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 进行内网穿透的步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值