Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 18,118
» Latest member: GanckaSak
» Forum threads: 67
» Forum posts: 67

Full Statistics

Online Users
There are currently 60 online users.
» 0 Member(s) | 59 Guest(s)
Google

Latest Threads
nginx简单配置多个php服务实例教程
Forum: WEB
Last Post: adahrzgj
11-10-2023, 08:38 AM
» Replies: 0
» Views: 7,322
php修改上传附件大小限制
Forum: WEB
Last Post: adahrzgj
10-19-2023, 02:37 PM
» Replies: 0
» Views: 7,870
Ubuntu 自建安装Nginx+MySQL+PH...
Forum: WEB
Last Post: adahrzgj
10-19-2023, 02:35 PM
» Replies: 0
» Views: 7,374
傻瓜教程: Orac1e的实例如何进入救援模式
Forum: VPS
Last Post: adahrzgj
10-12-2023, 03:46 PM
» Replies: 0
» Views: 8,112
利用 GAE 扩展谷歌永久免费机的月流量
Forum: VPS
Last Post: adahrzgj
10-06-2023, 04:44 PM
» Replies: 0
» Views: 8,264
搞了个DNS解锁,发出来分享一下
Forum: VPS
Last Post: adahrzgj
09-17-2023, 02:44 PM
» Replies: 0
» Views: 8,552
设置itunel连接后自动备份
Forum: 生活
Last Post: adahrzgj
07-10-2023, 07:02 AM
» Replies: 0
» Views: 697
rclone自己申请的账号7天失效的问题
Forum: WEB
Last Post: adahrzgj
04-22-2023, 04:06 PM
» Replies: 0
» Views: 7,013
使用 Shadowrocket Quantumul...
Forum: WEB
Last Post: adahrzgj
04-21-2023, 04:50 AM
» Replies: 0
» Views: 1,905
青龙删除日志
Forum: WEB
Last Post: adahrzgj
04-07-2023, 03:21 PM
» Replies: 0
» Views: 1,411

 
  彻底删除v2ray
Posted by: adahrzgj - 08-21-2022, 07:52 AM - Forum: VPS - No Replies



1、用SSH登录VPS主机
分别输入如下命令卸载V2ray

一些两种方法 systemd 和 sysv 二选一,取决于你的系统。如果不清楚其实没关系,两者都输入一下,不对的话会自然提示报错而已。

方法1、停用并卸载服务(systemd)

systemctl stop v2ray
systemctl disable v2ray
方法2、停用并卸载服务(sysv)

service v2ray stop
update-rc.d -f v2ray remove


2、删除V2ray多余的文件
分别输入如下代码,回车即可

#(配置文件删除)
rm -rf /etc/v2ray/*
#(程序删除)
rm -rf /usr/bin/v2ray/*
#(日志删除)
rm -rf /var/log/v2ray/*
#(systemd 启动项删除)
rm -rf /lib/systemd/system/v2ray.service
#(sysv 启动项删除)
rm -rf /etc/init.d/v2ray

Print this item

  甲骨文ubuntu dibian开启原生bbr
Posted by: adahrzgj - 08-21-2022, 07:50 AM - Forum: VPS - No Replies


#首先先更新下系统,然后安装依赖组建:
apt-get update
apt-get update && apt-get install -y wget curl

#之后开启原生BBR:
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p

#检测是否正常开启BBR:
sysctl net.ipv4.tcp_available_congestion_control
lsmod | grep bbr
如果第一项输出为reno cubic bbr第二项为tcp_bbr即表示开启成功。

*************************************************

今天老哥发的脚本更方便。wget-N--no-check-certificate "https://github.000060000.xyz/tcp.sh" && chmod+X tep.sh&&./tcp.sh

Print this item

  甲骨文ARM主机救砖指南
Posted by: adahrzgj - 08-21-2022, 07:50 AM - Forum: VPS - No Replies


1:新建个AMD机器

2:分离ARM机器硬盘----【甲骨文后台=>计算>>实例>>实例详细信息>>停止(即关机)】
【 甲骨文后台=>计算>>实例>>实例详细信息>>引导卷>>分离】

3:进去AMD机器SSH终端操作
[添加ARM硬盘]
附加命令(具体以甲骨文后台提示的命令为准,每个人都不同
示列如下:
sudo iscsiadm -m node -o new -T iqn.2015-02.oracle.boot:uefi -p 169.254.2.4:3260
sudo iscsiadm -m node -o update -T iqn.2015-02.oracle.boot:uefi -n node.startup -v automatic
sudo iscsiadm -m node -T iqn.2015-02.oracle.boot:uefi -p 169.254.2.4:3260 -l

用lsblk 命令查看有没有SDB 有的话就是挂载上去了

4:下载救转包

cd /root && wget http://app.isos.cc/ubuntu.img.gz

密码putaosi.com

5:DD到sbd 【ARM硬盘】

gzip -dc /root/ubuntu.img.gz | dd of=/dev/sdb

6:查看进度

新开一个SSH窗口
watch -n 5 pkill -USR1 ^dd$

7:DD完成分离硬盘》参照步骤3【分离和添加命令不同,自己后台看自己的】

8:挂载到ARM机器

Print this item

  EUServ德国免费小鸡支持大部分IPv4网站访问
Posted by: adahrzgj - 08-21-2022, 07:48 AM - Forum: VPS - No Replies

具体方法:直接执行

echo -e "nameserver 2001:67c:2b0::4\nnameserver 2001:67c:2b0::6" > /etc/resolv.conf

就可以了

Print this item

  Unraid启动后需要设置和注意的事项
Posted by: adahrzgj - 08-21-2022, 07:48 AM - Forum: VPS - No Replies

最近入了Unraid的坑,看起来是一个Nas系统,有相当于Pve或者Esxi这样的虚拟化服务,可以便捷的安装插件、加入Docker、添加虚拟机,玩法颇多,下面就将做一个记录以帮助初学者,也好给自己作个备忘。

  • 设置时区、NTP服务器:在【设置】→【日期和时间】中将时区设置为东八区,ntp服务器设置pool.ntp.org、time.apple.com、ntp1.aliyun.com、ntp3.aliyun.com,s1b.time.edu.cn,hk.pool.ntp.org、jp.pool.ntp.org、kr.pool.ntp.org等等
  • 开启阵列,并且在settings→磁盘设置中开启自启动(注意需要对加入阵列的硬盘格式化才能识别
    [Image: watermark,type_ZmFuZ3poZW5naGVpdGk,shado...FFFFF,t_70]

       //注意:添加新硬盘需先停止阵列再添加,原来的数据不会丢失
  • 设置共享文件夹,在一级菜单【共享】中设置
  • 安装应用市场:Plugins→安装插件输入(国内插件地址): 
    https://www.52help.net/ad/nas/Squidly271...ations.plg后点击【install】按钮安装,官方插件地址为:
    [u]https://raw.githubusercontent.com/Squidly271/community.applications/master/plugins/community.applications.plg[/u][u]([/u][u]因为网络原因有可能安装不上[/u][u])[/u]

  • 汉化:6.82有专门汉化插件;6.9x版官方自带,在apps→类别→语言,右侧找到简体中文安装即可。
  • 关于温度监控插件Dynamix System Temperature:需要安装Nerd Pack插件后再安装perl驱动,才能正常显示温度等信息。

    1. 在apps中安装Dynamix System Temperature
    2. 在apps中安装Nerd Pack插件
    3. 在Nerd Pack插件(在settings中显示为Nerd Tools)中安装perl驱动:
      [Image: watermark,type_ZmFuZ3poZW5naGVpdGk,shado...FFFFF,t_70]

    4. 然后再按如下图设置
      [Image: watermark,type_ZmFuZ3poZW5naGVpdGk,shado...FFFFF,t_70]

    • 启用docker(否则在应用市场apps中是无法安装docker应用的):settings→docker中配置docker映像文件位置和app存储位置,(首先得正确配置并开启阵列
      [Image: watermark,type_ZmFuZ3poZW5naGVpdGk,shado...FFFFF,t_70]

  • 在docker中添加模板中没有的参数(比如主机名参数--hostname)方法:打开高级视图,然后在额外参数中添加即可(可用空格隔开一次性添加多个参数)
  • 添加启动项:首先在apps中安装[b][b][b]CA Config Editor[/b][/b][/b][b][b][b]插件,[/b][/b][/b]然后即可在此选择go文件添加启动项(修改docker的源即可在此go文件中添加代码)。
    [Image: watermark,type_ZmFuZ3poZW5naGVpdGk,shado...FFFFF,t_70]

  • 市场加速、docker安装加速
  1. [b][b][b]通过修改hosts可以临时解决[/b][/b][/b][b][b][b]unraid[/b][/b][/b][b][b][b] apps应用市场打不开或打开慢的问题[/b][/b][/b][b][b][b]。[/b][/b][/b][b][b][b]即修改go文件,添加[/b][/b][/b]echo "199.232.4.133 raw.githubusercontent.com" >> /etc/hosts重启即可将apps市场的ip修改为199.232.4.133。当然,这个ip也可以换成你自己所在地可用的ip
  2. 修改docker源实现docker安装加速。同理修改go文件,添加加速源(这是别人的加速源,也可改成你自己的):
#修改docker源
mkdir -p /etc/docker
# 更新镜像源
tee /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://6evg8u3r.mirror.aliyuncs.com"]
}
EOF
------其它几个常用源-------
docker官网中国区镜像
https://registry.docker-cn.com
网易163 docker镜像
http://hub-mirror.c.163.com
USTC镜像加速
https://docker.mirrors.ustc.edu.cn
  • Windows virtio驱动(这是安装windows虚拟机的必要前提):在【设置settings】→虚拟机管理器中选择添加,它会自动改下载
  • 虚拟机常用选项释疑:  

    1. BIOS:SeaBIOS为传统模式兼容性好;OVMF为UEFI模式(关键看你的虚拟机系统支持何种引导模式)
    2. 机器Machine:iff0fx-**(虚拟机是windows时的默认值);Q35-**(虚拟机是linux时的默认值)
    3. Hyper-V:
  • 关于直通 

    1. 直通硬盘:ls /dev/disk/by-id找到拟直通硬盘的ID,比如ata-AS606_512GB_AA0000,然后在虚拟机中选择手动,填写/dev/disk/by-id/ata-AS606_512GB_AA0000即可直通该硬盘给虚拟机(但6.8.2版中总线选择中没有nmve,不知如何实现nmve硬盘的直通?----经测试,将总线设置为sata可以成功开启,设置成scsi则蓝屏
      [Image: watermark,type_ZmFuZ3poZW5naGVpdGk,shado...FFFFF,t_70]

    2. 直通显卡:加载驱动——modprobe i915加载intel核显,可通过ls /dev/dri是否显示by-path/  card0  renderD128来判断是否加载成功,然后在虚拟机创建是勾选该显卡
  • 我的常用插件: 

    1. Community Applications:这个插件大概是安装unraid之后第一个安装的插件了吧,类似与群晖的软件中心,这里提供了很多docker模版和插件的下载,本文所有插件都可以从这里下载。官方解释为:The One Stop Shop for all applications for unRaid
    2. CA Application Auto Update:一款可以自动更新插件和docker的插件(有点绕,自己更新自己有木有)。官方解释是:作为CA系列的一部分,自动更新应用程序将使您选择的插件和Docker应用程序保持最新状态。
    3. CA Cleanup Appdata:一款可以清理appdata目录的插件,当你删除docker容器的时候默认是不删除容器配置文件的,可以实用这款插件清理。官方解释为:作为CA系列的一部分,Cleanup Appdata将扫描您的appdata共享,以确定哪些文件夹不再使用(由于卸载了docker应用程序),并提示您删除它们
    4. CA Config Editor:一款可以编辑配置文件的编辑器,最常用的就是安装plex、jellyfin、emby调用硬件加速时编辑go文件,可以不需要命令行编辑。官方解释为:面向高级用户的简单配置文件编辑器
    5. Dynamix System Buttons:这个插件就是在右上角增加一个重启、关机的按钮,不需要每次关机都打开main页面,非常方便。官方解释为:Dynamix System Buttons将一个一键式按钮添加到标题中,使您可以立即进入睡眠状态,重新启动或关闭系统。
      [Image: 20210526222835376.png]

    6. Dynamix System Information:一款显示系统信息的插件,可以详细的看到机器的具体配置,给需要详细了解机器信息的人。官方解释为:Dynamix System Information显示了系统硬件和BIOS的各种详细信息。这包括处理器,内存和子系统组件。
    7. Dynamix System Statistics:一款可以查看系统CPU、内存、硬盘、网络实时信息的插件。官方解释为:Dynamix系统统计信息实时显示磁盘利用率和关键系统资源,例如CPU使用率,内存使用率,接口带宽和磁盘I / O带宽。
    8. Dynamix System Temperature:一款监测主板、CPU温度的插件、需使用Nerd Tools安装perl驱动才可以读取到温度信息,安装稍微麻烦一些(前面已详细介绍过)
    9. Fix Common Problems:一款可以修复docker、设置等问题的插件。适合强迫症患者。官方解释为:用于诊断和建议修复常见问题,配置错误等的插件。
    10. Unassigned Devices:一款可以挂载u盘、移动硬盘、未加入序列的硬盘或者SMB共享的插件,也是unraid必装插件了。官方解释为:此插件使用UDEV自动挂载和共享不属于Unraid阵列的磁盘。可用设备在“主要/未分配的设备”选项卡下列出。您还可以在其他服务器上安装远程SMB和NFS共享。
    11. Unassigned Devices Plus:一款补足Unassigned Devices缺陷的插件,增加了挂载hfs和exFat格式的设备。官方解释为:未分配的设备支持HFS +和exFAT磁盘格式,并启用破坏性模式
    12. User Scripts:一款可以运行用户自定义脚本的插件。贴吧有人使用这个插件设置每次开机自动更换docker源。官方解释为:一个插件,可充当任何用户脚本的简单前端,使您无需输入命令行即可运行它们。
    13. VFIO-PCI CFG(6.9x版似乎不需要了,在【工具】→【系统设备】中可直接勾选屏蔽):硬件直通插件,可以直接选择需要直通的硬件后生成VFIO-PCI.CFG文件,而不需要去修改Main→Flash→Syslinux 配置→Unraid OS项,手工添加硬件ID屏蔽,再实现硬件直通的繁琐设置了。

Print this item

  app/dns: failed to retrieve response > Post "https://dns.cloudflare.com/dns-query":
Posted by: adahrzgj - 08-21-2022, 07:47 AM - Forum: VPS - No Replies

same issue solved by

代码:

Code:
iptables -A OUTPUT  -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP

Print this item

  青龙面板修改端口,提高安全性。
Posted by: adahrzgj - 08-21-2022, 07:46 AM - Forum: VPS - No Replies


目录

前言
第一步
第二步 关闭docker
第三步 打开文件修改
第四步 重启docker
结尾
前言

最近很多小伙伴青龙被扫,出现下面的情况,所以这里带大家改一下端口,不再使用以前的5700了。


第一步

连接服务器,输入以下命令,查看你的容器id

sudo docker ps -a
1


第二步 关闭docker

输入以下命令,关闭docker

service docker stop
1


第三步 打开文件修改

路径 /var/lib/docker/container/

进入containers文件夹,进去前缀为你容器id的文件夹


找到hostconfig.json,打开编辑

把HostPort后面的5700改成你想要的端口,保存(只改这一个,其他别动)


第四步 重启docker

输入一下命令重启即可

systemctl restart docker
1
结尾

注意,修改完端口,记得去服务器开放你设置的端口,不然无法访问。
加入Q群,学习交流334996635

Print this item

  一键DD脚本
Posted by: adahrzgj - 08-21-2022, 07:44 AM - Forum: VPS - No Replies



一键DD脚本,支持性好,更智能更全面,支持国内外各种VPS重装,特别是对国内各种访问国外资源慢的VPS安装有奇效。

更新说明:
20220613:新版自定义密码支持特殊字符.!$@#&%
20220428:修复MoeClub新版DD过程中卡住的BUG,修复Centos7下出现 Error! Not Found grub. 的错误提示,新增支持 xz 压缩格式的 DD 系统镜像包。
20220406:CN系统镜像已失效,国内主机使用一键脚本1-25选项需要较长时间,推荐使用99的自定义系统镜像。
20211120:更新MoeClub新版,依赖更少,支持原版自定义密码安装,体验版可能有Bug.
20210909:支持debian11.
20210511:发现很多人不知道怎么DD甲骨文,使用支持uefi的镜像包即可.脚本已添加3个甲骨文专用选项23-25.
20210509:更新部分windows镜像,修正一处小问题.
20210127:更换部分windows镜像.
20210109:更新支持Ubuntu20.04安装,更新几个windows镜像.
20200708:更新自动为CN主机使用国内镜像源.

安装重装系统的前提组件:
Debian/Ubuntu:

apt-get install -y xz-utils openssl gawk file wget screen && screen -S os
RedHat/CentOS:

yum install -y xz openssl gawk file glibc-common wget screen && screen -S os
如果出现异常,请刷新Mirrors缓存或更换镜像源。
RedHat/CentOS:

yum makecache && yum update -y
Debian/Ubuntu:

apt update -y && apt dist-upgrade -y
使用:

wget --no-check-certificate -O NewReinstall.sh https://git.io/newbetags && chmod a+x NewReinstall.sh && bash NewReinstall.sh
如为CN主机(部分主机商已不能使用),可能出现报错或不能下载脚本的问题,可执行以下命令开始安装.

wget --no-check-certificate -O NewReinstall.sh https://cdn.jsdelivr.net/gh/fcurrk/reins...install.sh && chmod a+x NewReinstall.sh && bash NewReinstall.sh
点击使用旧版脚本


DD安装界面
输入Y确认DD后主机自动获取IP,N则自行设置IP 输入N后会自动检测出主机现用IP,如果正确可以按Y确认使用,如不正确则按N自行按正确的输入。
DD安装界面-选择系统
25合1的系统一键DD选择界面,输入99则使用自定义镜像。 以上系统密码不为默认密码的均为网络收集,如有疑虑使用自己的自定义镜像。

25合一系统密码:
1、CentOS 7.7 (已关闭防火墙及SELinux,默认密码Pwd@CentOS)
2、CentOS 7 (默认密码cxthhhhh.com)
3、CentOS 8 (默认密码cxthhhhh.com)
4、CentOS 6 (默认密码Minijer.com)
5、Debian 11 (默认密码Minijer.com)
6、Debian 10 (默认密码Minijer.com)
7、Debian 9 (默认密码Minijer.com)
8、Debian 8 (默认密码Minijer.com)
9、Ubuntu 20.04 (默认密码Minijer.com)
10、Ubuntu 18.04 (默认密码Minijer.com)
11、Ubuntu 16.04 (默认密码Minijer.com)
12、Windows Server 2019 (默认密码cxthhhhh.com)
13、Windows Server 2016 (默认密码cxthhhhh.com)
14、Windows Server 2012 (默认密码cxthhhhh.com)
15、Windows Server 2012 Lite (默认密码nat.ee)
16、Windows Server 2008 (默认密码cxthhhhh.com)
17、Windows Server 2008 Lite (默认密码nat.ee)
18、Windows Server 2003 (默认密码cxthhhhh.com)
19、Windows Server 2003 Lite (默认密码WinSrv2003x86-Chinese)
20、Windows 10 LTSC Lite (默认密码nat.ee)
21、Windows 7 x86 Lite (默认密码nat.ee)
22、Windows 7 Ent Lite (默认密码nat.ee)
23、Windows 7 Ent Lite (UEFI支持甲骨文)(默认密码nat.ee)
24、Windows Server 2008 Lite (UEFI支持甲骨文)(默认密码nat.ee)
25、Windows Server 2012 Lite (UEFI支持甲骨文)(默认密码nat.ee)
99、自定义镜像

注意:
经测试在谷歌云原版系统基础上DD会出现自动获取的子网掩码为255.255.255.255,如出现这种情况需要手工输入改正为正确的如255.255.255.0,否则会安装完成主机可能会离线。
Oracle Cloud(甲骨文云)可选择23-25一键DD,注意基础系统最好选择Ubuntu,如原系统是CentOS可能无法成功。

4-11项安装原版系统,可自定义密码,密码要求8-16位,以英文字母或数字开头,可以是大小写英文字母、数字及7个特殊字符.!$@#&%的任意组合。

特别感谢:Vicer、cxt、hiCasper等各位技术大佬的脚本,站长只是脚本的"搬运工"。

版权申明:以上所有脚本、系统均为网络收集,站长不对资源的安全及版权纠纷负责,如有侵犯您的权益欢迎联系。
站长邮箱:minijer#beta.gs(#换成@)

Print this item

  不用VPN,不用任何节点更不用VPS服务器 | 手把手教你如何免费搭建专属翻墙服务器
Posted by: adahrzgj - 08-21-2022, 07:43 AM - Forum: VPS - No Replies

前言
最近几天国内360旗下推出了一款叫做tuber浏览器的app,号称可以合法免费翻墙!就在短短的一天内,下载量就超过了550万次,火爆了全网,在YouTube或Google里铺天盖地的都是有关tuber浏览器的新闻,各种评测各种猜测也随之而来!但不知是由于下载量过大的原因还是处于种种压力,这款浏览器在一天之内就挂掉了,甚至官网都不能打开了!按说得到国家认可的app不应该因为服务器过载而挂掉才是啊?那么至于其他原因,咱们这里就不再去深做研究!但话又说回来,这款浏览器就算至今可用,那么它那需要手机号实名注册的政策,你的一切上网行为都将被监视着,你还敢用吗?我是不敢,倒不是怕啥,就是不喜欢被监视,有种被XX的感觉!

但只可惜,这款浏览器只是昙花一现,没有泛起任何大的波澜,就匆匆离世!毕竟只是想看看YouTube视频和google资料,且又不关心政治新闻的人占绝大多数,这样就对很大一部分人来说是比较惋惜的,不过呢?咱们也不用气馁!tuber浏览器能再带节点免费翻墙上网,那么我们为什么不能自己搭建一个类似的网页呢?重要的是,我们也是要无任何损失的,去做一个完全免费又真正属于自己的免费翻墙站点!不仅可以自己用,还可以分享给身边的朋友,让他们也能一睹外网的风采!

那如何实现呢?我们就需要借助于cloudflare来实现此功能!大家都知道,cloudflare自从推出了CloudFlare Workers这个项目,被众多程序员推崇!利用Workers部署jsproxy进行反代!!!将自己的代码复制进去就可实现我们想要的效果!而这个项目最终效果是让我们接入到特定服务器来进行科学上网!方便广大学子外网查资料所用!最终效果和tuber浏览器也是非常像!

站点预览准备工作:
1、要拥有一个cloudflare的账号;点击进入账号申请

2、一个域名地址并解析到cloudflare上去托管;freenom域名免费申请:点击进入

3、并激活workers功能!



第一步现在域名解析

第二步进入workers部署代码

点击创建一个workers后进入部署源码:

'use strict'

/**
* static files (404.html, sw.js, conf.js)
*/
const ASSET_URL = 'https://etherdream.github.io/jsproxy'

const JS_VER = 10
const MAX_RETRY = 1

/** @type {RequestInit} */
const PREFLIGHT_INIT = {
  status: 204,
  headers: new Headers({
    'access-control-allow-origin': '*',
    'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS',
    'access-control-max-age': '1728000',
  }),
}

/**
* @param {any} body
* @param {number} status
* @param {Object<string, string>} headers
*/
function makeRes(body, status = 200, headers = {}) {
  headers['--ver'] = JS_VER
  headers['access-control-allow-origin'] = '*'
  return new Response(body, {status, headers})
}


/**
* @param {string} urlStr
*/
function newUrl(urlStr) {
  try {
    return new URL(urlStr)
  } catch (err) {
    return null
  }
}


addEventListener('fetch', e => {
  const ret = fetchHandler(e)
    .catch(err => makeRes('cfworker error:\n' + err.stack, 502))
  e.respondWith(ret)
})


/**
* @param {FetchEvent} e
*/
async function fetchHandler(e) {
  const req = e.request
  const urlStr = req.url
  const urlObj = new URL(urlStr)
  const path = urlObj.href.substr(urlObj.origin.length)

  if (urlObj.protocol === 'http:') {
    urlObj.protocol = 'https:'
    return makeRes('', 301, {
      'strict-transport-security': 'max-age=99999999; includeSubDomains; preload',
      'location': urlObj.href,
    })
  }

  if (path.startsWith('/http/')) {
    return httpHandler(req, path.substr(6))
  }

  switch (path) {
  case '/http':
    return makeRes('请更新 cfworker 到最新版本!')
  case '/ws':
    return makeRes('not support', 400)
  case '/works':
    return makeRes('it works')
  default:
    // static files
    return fetch(ASSET_URL + path)
  }
}


/**
* @param {Request} req
* @param {string} pathname
*/
function httpHandler(req, pathname) {
  const reqHdrRaw = req.headers
  if (reqHdrRaw.has('x-jsproxy')) {
    return Response.error()
  }

  // preflight
  if (req.method === 'OPTIONS' &&
      reqHdrRaw.has('access-control-request-headers')
  ) {
    return new Response(null, PREFLIGHT_INIT)
  }

  let acehOld = false
  let rawSvr = ''
  let rawLen = ''
  let rawEtag = ''

  const reqHdrNew = new Headers(reqHdrRaw)
  reqHdrNew.set('x-jsproxy', '1')

  // 此处逻辑和 http-dec-req-hdr.lua 大致相同
  // https://github.com/EtherDream/jsproxy/bl...eq-hdr.lua
  const refer = reqHdrNew.get('referer')
  const query = refer.substr(refer.indexOf('?') + 1)
  if (!query) {
    return makeRes('missing params', 403)
  }
  const param = new URLSearchParams(query)

  for (const [k, v] of Object.entries(param)) {
    if (k.substr(0, 2) === '--') {
      // 系统信息
      switch (k.substr(2)) {
      case 'aceh':
        acehOld = true
        break
      case 'raw-info':
        [rawSvr, rawLen, rawEtag] = v.split('|')
        break
      }
    } else {
      // 还原 HTTP 请求头
      if (v) {
        reqHdrNew.set(k, v)
      } else {
        reqHdrNew.delete(k)
      }
    }
  }
  if (!param.has('referer')) {
    reqHdrNew.delete('referer')
  }

  // cfworker 会把路径中的 `//` 合并成 `/`
  const urlStr = pathname.replace(/^(https?):\/+/, '$1://')
  const urlObj = newUrl(urlStr)
  if (!urlObj) {
    return makeRes('invalid proxy url: ' + urlStr, 403)
  }

  /** @type {RequestInit} */
  const reqInit = {
    method: req.method,
    headers: reqHdrNew,
    redirect: 'manual',
  }
  if (req.method === 'POST') {
    reqInit.body = req.body
  }
  return proxy(urlObj, reqInit, acehOld, rawLen, 0)
}


/**
*
* @param {URL} urlObj
* @param {RequestInit} reqInit
* @param {number} retryTimes
*/
async function proxy(urlObj, reqInit, acehOld, rawLen, retryTimes) {
  const res = await fetch(urlObj.href, reqInit)
  const resHdrOld = res.headers
  const resHdrNew = new Headers(resHdrOld)

  let expose = '*'
 
  for (const [k, v] of resHdrOld.entries()) {
    if (k === 'access-control-allow-origin' ||
        k === 'access-control-expose-headers' ||
        k === 'location' ||
        k === 'set-cookie'
    ) {
      const x = '--' + k
      resHdrNew.set(x, v)
      if (acehOld) {
        expose = expose + ',' + x
      }
      resHdrNew.delete(k)
    }
    else if (acehOld &&
      k !== 'cache-control' &&
      k !== 'content-language' &&
      k !== 'content-type' &&
      k !== 'expires' &&
      k !== 'last-modified' &&
      k !== 'pragma'
    ) {
      expose = expose + ',' + k
    }
  }

  if (acehOld) {
    expose = expose + ',--s'
    resHdrNew.set('--t', '1')
  }

  // verify
  if (rawLen) {
    const newLen = resHdrOld.get('content-length') || ''
    const badLen = (rawLen !== newLen)

    if (badLen) {
      if (retryTimes < MAX_RETRY) {
        urlObj = await parseYtVideoRedir(urlObj, newLen, res)
        if (urlObj) {
          return proxy(urlObj, reqInit, acehOld, rawLen, retryTimes + 1)
        }
      }
      return makeRes(res.body, 400, {
        '--error': `bad len: ${newLen}, except: ${rawLen}`,
        'access-control-expose-headers': '--error',
      })
    }

    if (retryTimes > 1) {
      resHdrNew.set('--retry', retryTimes)
    }
  }

  let status = res.status

  resHdrNew.set('access-control-expose-headers', expose)
  resHdrNew.set('access-control-allow-origin', '*')
  resHdrNew.set('--s', status)
  resHdrNew.set('--ver', JS_VER)

  resHdrNew.delete('content-security-policy')
  resHdrNew.delete('content-security-policy-report-only')
  resHdrNew.delete('clear-site-data')

  if (status === 301 ||
      status === 302 ||
      status === 303 ||
      status === 307 ||
      status === 308
  ) {
    status = status + 10
  }

  return new Response(res.body, {
    status,
    headers: resHdrNew,
  })
}


/**
* @param {URL} urlObj
*/
function isYtUrl(urlObj) {
  return (
    urlObj.host.endsWith('.googlevideo.com') &&
    urlObj.pathname.startsWith('/videoplayback')
  )
}

/**
* @param {URL} urlObj
* @param {number} newLen
* @param {Response} res
*/
async function parseYtVideoRedir(urlObj, newLen, res) {
  if (newLen > 2000) {
    return null
  }
  if (!isYtUrl(urlObj)) {
    return null
  }
  try {
    const data = await res.text()
    urlObj = new URL(data)
  } catch (err) {
    return null
  }
  if (!isYtUrl(urlObj)) {
    return null
  }
  return urlObj
}


或者下载JS文件用n++打开复制:点击下载

如果还觉得比较麻烦,那么就用别人搭的三条线路:

地址①:https://misty-disk-50cc.networkfreedom.workers.dev/

地址②:https://green-credit-9e7f.networkfreedom.workers.dev/

地址③:https://lucky-mountain-6e91.networkfreedom.workers.dev/

Print this item

  有效解决BT面板"nginx: [emerg] open()"问题(更换Nginx版本)
Posted by: adahrzgj - 08-21-2022, 07:42 AM - Forum: VPS - No Replies


这个问题还是前几天网友反馈的问题,老蒋出去了比较忙都没有帮助他们处理,但是我都是提出解决办法他们去解决的,不过问题的解决过程我都记录下来。这个同学有在安装BT面板之后创建站点,发现站点无法运行,在重启Nginx有发现报错。

我让他截图看看,得到的错误提示是"nginx: [emerg] open( "/www/server/nginx/conf/enable-php.conf" failed"。

ERROR:检测到配置文件有错误请先排除后再操作
nginx: [emerg] open( "/www/server/nginx/conf/enable-php.conf" failed (2: No SuCh file or directory) in /www/server/nginx/conf/nginx.conf:.71
nginx: configuration file /www/server/nginx/conf/nginx.conf test failed

这里老蒋翻看之前的文章有记录到"解决LNMP环境nginx: [emerg] open()错误问题",这不直接给他看后直接懵圈,因为他不会脚本操作。而且我之前是LNMP脚本记录,不是BT面板。
于是我想到一个办法,让他更换不同版本的Nginx。检查当前的BT面板的Nginx版本,卸载掉之后,然后重新安装一个低版本的。安装完毕之后再重启Nginx发现没有报错,然后创建站点是没有问题的。
就这样,比较简单且不要用到脚本解决问题,解决了"nginx: [emerg] open()"问题。

Print this item