排行榜
原创科技生活

利用frp+nginx实现外网通过域名访问内网网站

本文阅读 5 分钟
首页 科技生活 正文
广告

先说效果,例如访问:http://nas.unfit.cn,可以直接访问内网nas服务器里的http://192.168.0.10:5000的nas项目,实现远程控制。


  1. 硬件需求:

          1. 公网服务器,配置无要求,但是必须得有公网的固定ip(如果没有公网ip的话,也可以利用ssh密钥远程自动解析实现,但是我们这篇文章只说有固定ip的)

          2. 内网服务器(例如:192.168.0.10。这台机器上网站项目正常运行,也就是说http://192.168.0.10:5000可以正常访问,我这里内网项目是群晖的nas,所以端口号是默认的5000,如果你是自己搭的项目,原理都是一样的

  2. 列一个流程图吧

    image.png

  3. 接下来我们一步一步来,先配置公网服务器的nginx配置:


先添加 nas.unfit.cn.conf 文件

在nginx的配置文件夹下,我的在:/usr/local/nginx/conf/vhost

server {
    listen 80;#公网接入端口,这里使用默认80
    server_name nas.unfit.cn; #example.com 填写被访问外网域名
    location / {    #默认是可以访问根目录也就是所有,这里可以设置别名,配合如下配置。
        proxy_pass http://localhost:8081; #内部主机IP及端口,域名后面可以加具体网站路径来显示访问权限
    }
}


添加之后,记得重启nginx服务

systemctl restart nginx.service


这里的nginx配置,就是监听80端口,如果请求域名是nas.unfit.cn的话,就将请求转发至本机的8081端口。


再修改 frps.ini 的配置信息

如果还不会操作frp,那可以看看这篇文章:使用frp免费做内网的穿透,实现从公网远程连接本地无公网ip的服务器。 - 不明文档 - 万档归一


我的本地地址是:/usr/local/frp/frps.ini


[common]
bind_addr = 0.0.0.0
bind_port = 7000
vhost_http_port = 8081 //这个是http的请求地址
vhost_https_port = 8880 //这个是https的请求地址


保存,重启 frp 服务


ps -aux|grep frp| grep -v grep //这个是查frp的进程
kill -9 对应的进程id //如果没有进程的话,这一步可以不操作
nohup ./frps -c frps.ini &


这样的话,公网的服务器就配好了。公网服务器的frp配置就是将nginx转发过来的8081端口的请求,再转发到内网服务器。


配置内网服务器

打开内网服务器的 frpc.ini

[common]
server_addr = x.x.x.x //这里填公网服务器的ip地址
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[unraid]
type = tcp
local_ip = 127.0.0.1
local_port = 5000  //这里配置内网机器的端口
remote_port = 8081 //这里配外网机器的端口,这个就相当于将外网的8081转到本机的5000端口
custom_domains = nas.unfit.cn


一样的,保存,然后重启服务

ps -aux|grep frp| grep -v grep #这个是查frp的进程
kill -9 对应的进程id #如果没有进程的话,这一步可以不操作
nohup ./frpc -c frpc.ini &


这里是和公网服务器的frp联动配置。公网服务器转发到内网服务器的5000端口。内网服务器的5000端口是正常能访问的,那就可以正常的响应请求。


这样就行了。可以通过 http://nas.unfit.cn 来访问了,不用带任何端口号。


还可以加上ssl,等空了再来处理吧。着急的同学,可以先参考文章自己弄弄:利用frp内网穿透实现https穿透 - 不明文档 - 万档归一 (unfit.cn)




-----2023年7月7日更新-----


加上ssl,实现https访问


修改公网服务器的nginx配置文件

vim /usr/local/nginx/conf/vhost/nas.unfit.cn.conf



server {
  listen 80; 
  listen 443 ssl http2;
  ssl_certificate /usr/local/nginx/cert/nas_unfit/cert.cer; #在这里要有ssl的文件,后缀是.cer或.pem都可以
  ssl_certificate_key /usr/local/nginx/cert/nas_unfit/cert.key; #这里要有.key文件
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on; 
  ssl_session_timeout 10m;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  ssl_buffer_size 1400;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_stapling on; 
  ssl_stapling_verify on; 
  server_name nas.unfit.cn;
  access_log /data/wwwlogs/nas_unfti_cn_nginx.log combined; #不做请求记录的话,这行可以不要
  location / { 
      proxy_pass http://localhost:8081;
    }   
}


保存,然后重启nginx服务

systemctl restart nginx.service


这样就可以通过https://nas.unfit.cn访问内网了。

其实原理很简单,就是在公网服务器的nginx配置里加上443端口ssl的监听就好了。80端口的http请求还是同样的转发至8081端口。

原创文章,作者:大洋哥,如若转载,请注明出处:https://www.unfit.cn/archives/161.html
利用frp内网穿透实现https穿透
« 上一篇 07-05
利用python脚本实现自动阿里云域名DNS解析
下一篇 » 07-21
广告

相关推荐