宝塔Linux面板Bug修复:添加反向代理出错

起因

由于工作需要,在宝塔面板中创建一个反向代理的站点,结果每次都报错:

向宝塔论天提交了Bug,结果两天了还在审核中。

由于急用,因此不等官方修复了,自己动手修复!

故障原因

从报错信息可以看到:nginx 配置是正确的

nginx: the configuration file /www/server/nginx/conf/nginx.conf syntax is ok

但是有问题:

nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)

nginx: configuration file /www/server/nginx/conf/nginx.conf test failed

其实就是系统每启用IPv6, nginx 测试配置文件时,发现了错误。

当然,宝塔面板及时清理了垃圾,恢复到了原来的nginx培训。

在我的Linux服务器上,我把IPv6关掉的,因此,nginx不会加载IPv6相关配置。

解决方法

1、启用IPv6,不符合我的意图。

2、修改宝塔面板,彻底解决问题。

启用日式输出

启用宝塔面板的"开发者模式",这样宝塔才会输出日志。

接下来,在你的电脑上通过ssh登录到宝塔面板服务器上,执行如下命令

bash 复制代码
tail -f /www/server/panel/logs/error.log

这样可以监视最新的宝塔日志。只要不强行结束,会随着宝塔面板日志输出而滚动输出。

获取Api路径

在宝塔面板的"添加反向代理"页面,按F12,打开浏览器的"开发人员工具",切换到"网络"标签:

再次创建一个反向代理,提交,这里出现一条提交记录

mod/proxy/com/create

就是我们要找的Api路径

使用VSCode登录服务器

首先,在VS中需要添加一个扩展插件:Remote - SSH

安装完毕后,VS边框上出现这样一个图标:

通过它可以使用VS登录到Linux服务器

用SSH登录服务器,这里填入 ssh root@服务器地址

SSH配置,随便选一个

如果没有的话,创建一个,内容如下

bash 复制代码
  Host 192.168.240.165
    HostName 192.168.240.165
    User root

连接服务器

接下来会打开一个新VSCode窗口,要求输入服务器密码:

达开文件夹

输入路径

如果还需要密码,那就再输入一次。

编辑宝塔面板源码

前面我们找到的路径是:mod/proxy/com/create

接下来,一次展开目录:mod/project/proxy,打开comMod.py

Ctrl+F,在这个文件中查找"create("

聚焦到这里,并添加一句代码,验证找到的是不是正确

再次提交反向代理创建的请求,在回看日志框

确实,输出了"test"字样,也就是我们找的位置是正确的。

在前面,Web页面中输出的错误信息中:

ERROR: 检测到配置文件有错误,请先排除后再操作

继续使用Ctrl+F,查找

一共找到了4个,依此标记1、2、3、4




再次提交请求,返回错误如下:

接下来,重点关注 2 上面的 write_nginx_conf 函数

修改 write_nginx_conf函数

Ctrl+F 查询 "write_nginx_conf"

定位到函数位置

python 复制代码
        if len(get.port_list) > 1:
            ipv4_port_conf = ""
            ipv6_port_conf = ""
            for p in get.port_list:
                ipv4_port_conf += self._init_proxy_conf["ipv4_port_conf"].format(listen_port=p) + "\n    "
                ipv6_port_conf += self._init_proxy_conf["ipv6_port_conf"].format(listen_port=p) + "\n    "
        else:
            ipv4_port_conf = self._init_proxy_conf["ipv4_port_conf"].format(listen_port=get.port_list[0])
            ipv6_port_conf = self._init_proxy_conf["ipv6_port_conf"].format(listen_port=get.port_list[0])
        port_conf = ipv4_port_conf + "\n" + ipv6_port_conf

这个地方的代码,确实有些问题,不能直接把ipv6_port_conf相关代码注释掉,否则在执行"port_conf = ipv4_port_conf + "\n" + ipv6_port_conf",时报错(ipv6_port_conf 未定义)。

比较简单的方式是这样的

python 复制代码
port_conf = ipv4_port_conf + "\n" #+ ipv6_port_conf

就是在加号前面加一个#号,把后面的注释掉即可。

到这里就完成了,你的宝塔面板创建反向代理的时候,就不再报错了。

后续

在这里可以加一句代码,把内容输出来:

视频课程

宝塔Linux面板入门【人人都能上手的服务器运维面板】
https://www.bilibili.com/cheese/play/ss22181

相关推荐
___波子 Pro Max.3 分钟前
Linux 外挂 SSD 根目录下的 `.Trash-1000` 到底是什么
linux
爱学习的小囧28 分钟前
VMware vCenter Server 9.0.2.0 资源详解+完整部署教程+下载指南+常见问题
运维·服务器·esxi·vmware·虚拟化·esxi9.0.2.0
贾斯汀玛尔斯1 小时前
每天学一个算法--单调栈(Monotonic Stack)
运维·服务器·算法
hhb_6181 小时前
Linux底层运维自动化挂载与磁盘分区实战指南
linux·运维·自动化
SpikeKing1 小时前
Server - 配置 SQLBot 智能问数项目
运维·server·sqlbot
cui_ruicheng2 小时前
Linux库制作与使用(二):ELF文件与链接过程
linux·运维·服务器
ReaF_star2 小时前
【环保】CentOS 7 安装 MySQL 8 实战记录:从安装到排障一次讲清
linux·mysql·centos
怀旧,2 小时前
【Linux系统编程】18. Linux进程信号(上)
linux·运维·服务器
舰长1152 小时前
Windows服务器修改默认远程端口3389
运维·服务器
minji...2 小时前
Linux 线程同步与互斥(五) 日志,线程池
linux·运维·服务器·开发语言·c++·算法