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.如果各个运行环境正常,第一次访问如果浏览器一直转圈的话,不要着急,耐心等一下。

Logo

前往低代码交流专区

更多推荐