#大男孩的快乐#征稿活动火热进行中。只要投稿就有50金币等你拿,更有三千元乐高大奖与达人Z计划专属权益等待优秀的你~>活动详情戳这里<创作立场声明:本文纯属个人观点,不存在安利元素。
我要解决什么问题
卤煮最近撸了一台nas,部署了一个jellyfin,也问电信要了公网IP,每次想看个电影吧,XXX.XXX.XXX.XXX:8096。电信耙耙的IP差不多2个礼拜变一次,变了之后又要输入AAA.AAA.AAA.AAA:8096。能不能输入我自己的域名,直接跳转到我的jellyfin呢?不花钱的那种
,一分都不花的那种。
环境&工具
卤煮的nas环境是:Description: Debian GNU/Linux 10 (buster)
Release: 10
Codename: buster
工具:
花生壳(实名认证过,可以http内网穿透)
nginx
实现原理
图糙理不糙
我们在浏览器输入bcd.abc.com(花生壳二级域名),这个域名映射了nginx服务器,nginx服务器再返回302临时(一开始我用的是301,301会被浏览器缓存我改成302了,图片就懒的改了)重定向到我们的公网IP,此时浏览器上的URL变成了我们的公网IP,实现"动态解析"。
相信大家已经看出来了,接下来的事已经和花生壳,nginx没有半毛钱关系了,我们只是嫖花生壳一个免费域名。
具体实现
1. 花生壳
首先你需要有一个花生壳账号(ngrok,frp也是可以的)并且能使用http映射的。
花生壳http映射需要实名认证可能需要花6块钱(卤煮趁他搞活动撸的0元
,所以标题是0成本或者极低成本)。体验版的花生壳流量1G/月,宽带1M,2个映射(还有一个映射22端口)指望他来看电影几乎是不可能的。(提一句,注册开发者搞一个测试应用,送铂金版账号3个月,我只能说这么多了)
将花生壳域名映射到8080端口,以后我们的jellyfin只需要输入这个域名就能访问啦。
映射8080端口
2.Nginx
这里考虑到其他NAS我这里以docker版的nginx为例。前往dockerhub拉去官方镜像,由于众所周知的原因,我建议您先搞个加速器,不然你可能需要一个晚上(毕竟我们不是罗志祥晚上还是要睡觉的
)
命令 docker pull nginx
拉去完镜像之后,找个文件夹新建一个nginx配置,名字为web.conf,内容如下:
server {
listen 8080;
location / {
real_ip_header X-Forwarded-For;
set $out "http://你的公网ip:8096";
rewrite ^(.*)$ $out$request_uri redirect;
}
}
这个配置的意思是监听8080端口(必须和花生壳的映射端口一致),不管三七二十一301跳转到我们的公网IP去。
启动容器我们的nginx
卤煮还是喜欢使用docker-compose,文件如下:
web:
image: nginx
volumes:
- ./刚刚的web.conf:/etc/nginx/conf.d/web.conf
- 你的log文件夹:/var/log/nginx/
ports:
- "8080:8080"
如果你只需要docker命令,那么:
docker run --name 你的容器名字 -v 刚刚的web.conf:/etc/nginx/conf.d/web.conf -v 你的log文件夹:/var/log/nginx/ -p 8080:8080 -d nginx
说明下:/etc/nginx/conf.d/是nginx的配置目录,/var/log/nginx/是nginx的日志目录
做完这一步,小伙伴们你们可以测试一下是否成功,离完美还剩1%,接下来就是我们写脚本定时更新我的的公网IP了。
3. 更新公网IP的脚本
原理就是把nginx配置也就是上面的web.conf中的第6行的IP更新,保证它的正确性。
#!/bin/bash
#实时获取公网ip
PUBLIC_IP=`curl icanhazip.com`
IP_FILE='/tmp/ip.txt'
touch $IP_FILE
SYS_PUBLIC_IP=`cat $IP_FILE`
echo "系统公网IP:$SYS_PUBLIC_IP,本次获取的IP:$PUBLIC_IP"
#读取公网ip
if [ "$SYS_PUBLIC_IP" != "$PUBLIC_IP" ] ; then
echo $PUBLIC_IP > $IP_FILE
#这里6c表示第6行替换为XXXX
sed -i '6cset $out "http://'$G_PUBLIC_IP':8096"; ' 你的web.conf
#重启nginx容器
docker restart 你的nginx容器id
fi
把以上脚本加入到开机启动,设置成每1天跑一次就OK啦。
总结
完美的方案还是用dns去解决域名和IP直接的事情,不过这也算是一种方法啦(还是白嫖爽啦)。
卤煮本来还想通过nginx判断客户机真实IP完成一个域名搞定内外网。(外网跳转到外网IP,内跳转到内网IP),无奈花生壳没法获取到真实IP,如果大佬们有方案记得通知卤煮。(不要跟我说修改路由器host之类的,卤煮的路由器是老款菊花牌,不支持这些花里胡哨的功能)
新人投稿,码字不易,请点个赞
网友评论