简介 现在我需要搭建一个自己的文件存储网站或者是博客，但是我没钱，买不起大容量的服务器，所以我需要在本地服务器上把服务搭建出来，然后在穿透出去，从而实现我在外网访问自己的服务器。 这个的作用和frp一样，这个有个优点就是管理是在服务端管理，80端口和443端口配置起来很简单，没有frp复杂。 准备工作 本地服务器一台 带公网IP的服务器一台 安装NPS服务端 NPS是一个开源的穿透服务，和FRP一样，都是免费的，但是我这里使用NPS是因为NPS对小白比较友好，客户端只要连接上服务端就可以，剩下的配置直接在可 视化界面上配置了，不需要像FRP一样每台客户端都需要手动去配置穿透服务器。 首先使用SSH工具连接到有公网IP的服务器，我这里使用的是FinalShell这个工具。 然后到Githun上找到对应自己服务器的服务端，NPS项目在Githun上的地址：https://github.com/ehang-io/nps 我这里使用的是linux_amd64_servicer.tar.gz这个，找到了之后右键，复制连接地址 然后回到服务器上输入wget粘贴刚刚复制的连接进行下载 下载完成后文件是在公网服务器上的ROOT目录下的，输入tar -zxvf文件名进行解压 解压完成后，我们可以看到root目录下面多出了三个文件，分别是conf、nps、web，这三个文件都是NPS的文件 输入下面命令进行安装 ./nps install 安装完成后输入下面命令服务端的启动 nps start 启动好了之后我们就可以在浏览器输入服务器地址加8080端口进行访问管理了 登录、配置服务 默认的登录名为admin,默认的密码为123，登录进去之后就可以看到NPS的管理界面了 首先我们先新增一个客户端，点击【客户端】，然后点击【新增】 【备注】随便填写，【允许客户端通过配置文件连接】我们可以选择【否】，这样可以方便管理，还有效避免了端口冲突，【唯一验证密钥】我们可以手动填写，也可以留空，留空则自动生成，填写完成后点击【新增】按钮 添加成功后我们就可以在【客户端】里面看到了，但是现在是离线状态，还没有连接 现在我需要添加一条TCP隧道，用于远程SSH连接我的内网服务器，首先点击【TCP隧道】，然后点击【新增】 客户端ID】这个需要和【客户端】里面的对应上，【备注】可以随便填，【服务端端口】需要填的是穿透出来后我们是通过那个端口访问，我这里填的是23端 口，意思就是我待会需要用SSH连接我内网服务器的时候我是通过公网服务器的23端口转过去的，目标IP可以直接填127.0.0.1:22，SSH默认的端口是22端口，本 机地址用127.0.0.1代替，填写完成后点击【新增】完成。 新增完成后就可以在TCP隧道里面看到刚刚新增的记录了 连接服务 服务器那边配置好之后就可以到客户端这边连接了 首先先到Github上下载对应自己电脑的客户端，我这里下载的是windows_amd64_claent.atr.gz这个 下载完成后解压。 进入解压出来的文件夹，继续解压，继续进入解压出来的文件夹，里面有一个conf文件夹和一个npc程序 我们进入conf文件夹，里面有两个conf文件，我们需要改的是npc.conf这个文件 用记事本打开文件，然后删除[health_check_test1]以下的配置 然后修改地址和连接密钥，然后保存 然后双击刚刚看到的NPC程序运行 这时候我们就可以在管理面板里面看到客户端是在线的了 刚刚我们穿透的是SSH服务，服务端端口填的是23，那么现在我就可以用公网IP加23端口访问我内网服务器的SSH了，但是因为我这里客户端是WINDOWS系统， 没有SSH服务，所以就不演示了，linux的客户端使用方法和这个是一样的，只是在配置文件配置好了之后使用./npc来启动客户端
简介 早先时候，各大运营商还可以申请到公网ip，那时候是不需要内网穿透的，现在已经很难申请到公网ip了，所以只能曲线救国，使用内 网穿透来实现从外面访问家里的服务了。 我使用的是frp，一个开源的小工具，使用frp的话只有80和443端口是不用在浏览器里面输入端口直接访问的，如果有服务把这两个端 口占用，其他服务就只能使用ip+端口的方式访问了，这时候就需要利用到了nginx来进行端口复用了。 二、准备工作 一台用公网ip的服务器 一台内网机 三、安装frps frps的安装我这里使用的是一键安装脚本。 使用ssh工具连接到公网服务器 复制下面命令到公网服务器上按回车开始执行 wget https://raw.githubusercontent.com/MvsCode/frps-onekey/master/install-frps.sh -O ./install-frps.sh chmod 700 ./install-frps.sh ./install-frps.sh install 选择脚本的源，这里有两个源，我选的是第二个 选择frpc和frps连接的端口，可以使用默认端口也可以自定义端口，我这里自定义为20050端口 选择http端口，默认为80，可以自定义，这里我们需要自定义，因为待会需要安装nginx，要用nginx来进行端口复用，http默认的是80端口，所以80端口不能被占用，要预留出来。我这个80端口已经被占用，默认会报错。我用的是30000端口。 选择https端口，默认为443，和80端口一样，预留出来，所以需要自定义，我选的是30001端口。 选择web面板的端口，我选20051端口。 输入登录web面板的用户名，默认为admin，我这里使用默认的，直接回车即可 输入登录web面板的密码，我这里是演示，直接输入123456 输入frpc连接frps的密码，我这里使用默认的，直接回车即可 输入服务器ip，直接回车 输入frps的最大连接数，默认50个，一个人用50个也是够了，最大两百个，我这里默认了 选择日志级别，默认即可 选择日志最大天数，默认3天，最大30天，我这里默认 选择日志文件，直接默认 下面的选项就一直默认回车即可，直到出现这个界面就配置完成了，直接回车就开始部署了 出现这个界面就部署完成了，frps就好了 可以尝试登录一下web控制面板看看能不能登录上去，在浏览器地址栏中输入服务器ip+20051端口,看到这个界面就是安装并运行成功了。 这个脚本是在github上找的，想要看详细的信息可以访问：https://github.com/MvsCode/frps-onekey查看。 四、安装和配置frpc 在github中搜索frp，第一个就是。 点击进入，点击tags 最顶部的是最新版，点击进入 然后找到对应自己内网机系统版本的frp下载，我这里使用的内网机是x86架构64位的centos7，依然是远程，所以我是复制下载链接，待会用wget命令下载。 使用ssh工具连接到内网机 使用wget命令下载刚刚复制下来的frp工具的地址 wget https://github.com/fatedier/frp/releases/download/v0.44.0/frp_0.44.0_linux_amd64.tar.gz 下载完成后可以使用ls命令查看下载的包，然后使用tar命令解压 tar -zxvf frp_0.44.0_linux_amd64.tar.gz 解压完成后进入解压出来的文件夹 cd frp_0.44.0_linux_amd64 使用ls命令查看里面的文件，使用vi frpc.ini编辑配置文件 按i开始编辑，配置文件第二行为服务器地址，这里把127.0.0.1替换成你外网服务器的地址，第三行为frpc连接frps的端口，刚刚我们设置的是20050，在第四行加一行token = f7DXNLlbwjni4jvV，等于号后面的密钥是不同的，可以在刚刚的安装完成的界面查看的. 下面是穿透的服务，[]里面的穿透的服务名称，这里就讲究使用ssh服务来做演示，第七行type = tcp为服务的类型，一般分为tcp和udp，第八行local_ip = 127.0.0.1是内网机的地址，直接使用127.0.0.1就可以，当然也可以改为内网机的ip地址，第九行local_port = 22是内网机的服务端口，ssh服务是22端口，这个地方就填22端口，如果你的是web服务，是80端口，这个地方就填80，第十行remote_port = 30003是穿透出去的端口。待会访问的时候就用外网服务器的ip+这个30003端口进行访问。配置好配置文件后按esc，然后输入:wq回车进行保存。 保存后输入./frpc开始运行，如下图所示没有报错则连接成功 这时候可以尝试一下使用外网访问内网的服务了，这里已经成功的连接上了 到这里frp就配置完成了，下面就开始配置nginx了 五、安装nginx 用ssh连接到外网的服务器，输入下面命令开始安装编译工具和库文件 yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel 安装PCRE，先到这个网站去复制最新的PCRE连接，然后使用wget命令下载安装，点击进入第一个 选择最顶上的这个最新的这个 点击选择后缀名为tar.gz的这个 等待弹出下载选项，然后右键复制下载地址 复制到下载地址后，回到ssh连接外网服务器，使用wget命令下载PCRE wget https://cytranet.dl.sourceforge.net/project/pcre/pcre/8.45/pcre-8.45.tar.gz 等待下载完成后，使用ls命令查看下载到的文件，使用tar -zxvf命令解压文件 ls tar -zxvf pcre-8.45.tar.gz 解压完成后使用cd命令进入安装包目录 cd cd pcre-8.45 运行下面命令进行编译安装 ./configure make && make install 下载nginx，首先进入这个网站复制nginx的最新的链接，然后右键复制稳定版的链接 进入到/usr/local/src/目录 使用wget命令下载最新稳定版nginx wget https://nginx.org/download/nginx-1.22.0.tar.gz 使用ls命令查看下载下来的压缩包，然后使用tar命令解压下载下来的压缩包 ls tar -zxvf nginx-1.22.0.tar.gz 使用cd命令进入解压出来的文件夹内 cd nginx-1.22.0 依次输入以下命令开始编译安装 ./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcr-8.45 make make install 使用以下命令可以查看nginx的版本，只要可以看到版本就说明已经安装成功了 /usr/local/webserver/nginx/sbin/nginx -v 下面就可以开始配置nginx的配置文件了，使用cd命令进入配置文件夹，使用ls命令查看所有文件，使用vi命令编辑配置文件,按i键开始编辑 cd /usr/local/webserver/nginx/conf/ ls vi nginx.conf i 以下是我的配置文件，可以参考以下，其实要改的地方就那么三个地方 #user nobody; worker_processes 2; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; #监听80端口 server_name 47.106.122.149; #监听的域名，这里填写的是域名，我这边是测试服务器所以填写的是ip #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; proxy_pass http://47.106.122.149:30004; #跳转到的ip、域名和端口 } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} } 配置文件配置好了之后按esc，然后按:wq回车保存并退出 输入以下命令启动nginx，如果启动没有报错的话就成功了 /usr/local/webserver/nginx/sbin/nginx 下面这几条命令是nginx常用的命令，记得每次修改完配置文件都需要重启nginx服务 /usr/local/webserver/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/webserver/nginx/sbin/nginx -s reopen # 重启 Nginx /usr/local/webserver/nginx/sbin/nginx -s stop # 停止 Nginx