您当前的位置: 首页 >  编程语言

linux下开机启动443程序无法访问解决方法

前言:最近,有一个项目需要用到开机自动启动程序,所以就研究了一下,环境为redhat8,程序是node,使用forever来进行node程序的持久化,程序使用的是443端口,开启的是https 1.把node和forever的快捷方式放在放在/usr/bin/(环境变量)下面,所有的命令默认是从这里面进行调用的

查询下node的地址在哪里

ln -s /home/tool/node/node-v8.11.3-linux-x64/bin/node /usr/bin/node       //这里的路径就是安装node的路径

ln -s /home/tool/node/node-v8.11.3-linux-x64/bin/node /usr/bin/node

2.添加开机自启动
vi /etc/rc.d/rc.local

添加一下代码

forever start -s /home/demo/app.js    //这里的程序所在的路径

3.设置一下权限即可
 chmod +x /etc/rc.d/rc.local
4.重启查看forever list看程序有没运行

我们可以看到已经启动了程序,我们访问下程序

我们发现程序并不能访问

网站报错内容为:

此网站无法提供安全连接

协议不受支持

客户单端和服务器不支持一般SSL协议版本或加密套件

5.排查过程: 1.防火墙

1首先关闭防火墙进行排查是否是原因所在,结果发现并不是原因:

2.更换端口:

我们把程序的启动端口修改了,改为了8081然后重启服务器进行测试,结果发现重启服务器可以重新启动

3.ssl证书问题

在网上找了一圈就没有相关的解决方案,基本都是ssl证书的问题,我之前也觉得也是ssl证书过期的问题,但是如果是ssl证书过期我用上面的http也可以实现访问,所以问题不是出在了这里,随后我又找了开机启动程序相关的问题,结果发现都不是问题所在,问题就此耽搁住了

4.使用443端口,用命令启动程序

我们可以看到,点击下面的地址是可以直接进入程序的,这一点我已经验证过了

5.转机

突然,我想到既然用命令行的方式可以启动程序,那我直接把命令行的过程复现一下不就可以了吗,首先,我复现下用命令行启动的过程

1.cd /程序的目录
2.启动程序

我们再来看看开机启动程序的脚本

forever start -s /home/demo/app.js    //这里的程序所在的路径

两者对比,我们发现,命令行启动是cd到具体的目录下然后在执行启动命令,而开机脚本写的是后面带上程序的绝对路径,我想应该就是这个绝对路径的区别,然后我修改了开机脚本,具体如下:

我们重启服务器

我们可以看到已经顺利进来了,就此问题解决

尾巴:虽然这个问题解决起来非常简单,但是排查问题的过程确实非常漫长而且头疼,找打不到相关对应的资料,只能自己摸索尝试