我的建站经历

网站的页面和服务器API以及写好,并且在本地环境中调试成功。所有的功能都没有异常,当我将其部署到阿里云轻量级服务器上的时候,问题出现了。

Provisional headers are shown 报错

这个报错的翻译是临时请求报文头,简单来说就是请求没有发出去

为什么回报这个错误?

通过研究控制台的报文请求发现:

Request URL:http://localhost:3000, 而发送请求的源地址是:http://47.xxx.xxx.xx (一个明确的地址)。所以,这里的问题就是http://47.xxx.xxx.xx 这个地址发送了一个对 http://localhost:3000 ,然后浏览器把 http://localhost:3000 认为了是本机的服务器,可是本机上并没有我的API服务器。会导致这个错误是因为,在开发的时候为了方便测试,直接使用了http://localhost:3000 这个本机的地址。

解决方案:

把http://localhost:3000 这个服务器地址 改为明确的 http://47.xxx.xxx.xx:3000, 然后重新构建代码,在上传到服务器,然后启动node

textStatus: timeout

连接网络时发生异常。我再一次访问http://47.xxx.xxx.xx 的服务器地址,可以成功的返回页面,可是还是无法获取到数据。重新查看控制台中的网络请求信息,又看到了Provisional headers are shown。

这时我开始怀疑,这到底是不是请求没有发出去???我使用了一个API接口调试工具去访问http://47.xxx.xxx.xx:3000/posts 这个地址,得到的结果也是连接网络时发生异常。然后我在服务器上修改了API服务的监听端口,将其改为了80端口,重新访问http://47.xxx.xxx.xx/posts。 我成功的获取到了数据。这说明了什么?这个锅就是阿里云!!!

进入阿里云的控制台,我看到了防火墙上对HTTP请求支持的端口只有80端口一个!!!

解决方案:

在阿里云服务器的防火墙新增一个3000端口,并且记得自己的服务器内部防火墙也要设置3000端口为tcp端口

具体服务器设置如下:

执行firewall-cmd --permanent --zone=public --add-port=3306/tcp,如果提示FirewallD is not running查看防火墙状态

通过systemctl status firewalld查看firewalld状态,发现当前是Active: inactive(dead--死的)状态,即防火墙未开启。

通过systemctl start firewalld开启防火墙,没有任何提示即开启成功。

再次通过systemctl status firewalld查看firewalld状态,显示Active: active(running)即已开启了。

再次执行执行firewall-cmd --permanent --zone=public --add-port=3306/tcp,提示success,表示设置成功,这样就可以了

这时我再次请求http://47.xxx.xxx.xx:3000/posts 我获取到了数据

forever

为了解决如果关闭服务器的控制台,就会导致应用停止的问题,通过安装forever来解决

Forever可以守护Node.js应用,客户端断开的情况下,应用也能正常工作。安装forever,需要加-g参数,因为forever要求安装到全局环境下:npm install forever -g

forever的使用方式:

# 启动
forever start ./bin/www  #最简单的启动方式
forever start -l forever.log ./bin/www  #指定forever日志输出文件,默认路径~/.forever
forever start -l forever.log -a ./bin/www  #需要注意,如果第一次启动带日志输出文件,以后启动都需要加上 -a 参数,forever默认不覆盖原文件
forever start -o out.log -e err.log ./bin/www  #指定node.js应用的控制台输出文件和错误信息输出文件
forever start -w ./bin/www  #监听当前目录下文件改动,如有改动,立刻重启应用,不推荐的做法!如有日志文件,日志文件是频繁更改的

# 重启
forever restart ./bin/www  #重启单个应用
forever restart [pid]  #根据pid重启单个应用
forever restartall  #重启所有应用

# 停止(和重启很类似)
forever stop ./bin/www  #停止单个应用
forever stop [pid]  #根据pid停止单个应用
forever stopall  #停止所有应用

# 查看forever守护的应用列表
forever list

猜你喜欢

转载自www.cnblogs.com/lbzli/p/12898222.html