腾讯云 & NodeJS Web 问题持续记录

关闭防火墙

出现了公网IP和网址都能ping通,但是网站无法访问的情况。显然这是端口无法被访问,需要关闭防火墙并设置开机自动关闭防火墙: systemctl stop firewalld & systemctl disable firewalld.service

端口映射

在服务器中,http的80端口和https的443端口无法直接监听,根据这篇文章描述,将他们分别转到3000端口和3001端口。使用iptables完成设置:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3000
iptables -I INPUT -p tcp --dport 3000 -j ACCEPT 
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3001
iptables -I INPUT -p tcp --dport 3001 -j ACCEPT 

可以通过这条命令来检查是否添加成功。

iptables --line-numbers --list PREROUTING -t nat

尝试使用service来保存iptables失败后,改用iptables-persistent来固化端口映射。

MongoDB开启

MongoDB需要设置为开机自动开启才能使用。参考这篇文章:

  • 编辑/etc/systemd/system/mongodb.service文件,加入:
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target

[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf

[Install]
WantedBy=multi-user.target
  • systemctl start mongodb 启动MongoDB & systemctl enable mongodb 永久启动;

MongDB自动备份

  • 建立备份地址和备份脚本:
#!/bin/bash  
#backup MongoDB  

#mongodump命令路径  
DUMP=mongodump  
#临时备份目录  
OUT_DIR=~/data/mongodb/mongodb_now  
#备份存放路径  
TAR_DIR=~/data/mongodb/mongodb_list  
#获取当前系统时间  
DATE=`date +%Y_%m_%d` 
#DAYS=15代表删除15天前的备份,即只保留近15天的备份  
DAYS=15  
#最终保存的数据库备份文件  
TAR_BAK="mongodb_bak_$DATE.tar.gz"  

cd $OUT_DIR  
rm -rf $OUT_DIR/*  
mkdir -p $OUT_DIR/$DATE  
#备份全部数据库  
$DUMP -h 127.0.0.1:27017 -d Car -o $OUT_DIR/$DATE  
#压缩为.tar.gz格式  
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE  
#删除15天前的备份文件  
find $TAR_DIR/ -mtime +$DAYS -delete  

exit

  • 在/etc/crontab中加入定时启动命令(也可以通过crontab -e 来完成,但是这个命令是自己建立了一个临时的指令文件,而且用nano编辑,有点不爽)
00 6 * * *   root  sh  _DIRNAME/backup.sh
  • 可能有时区问题

pm2监听进程

使用网上的教程用pm2 保持网站持续开启后,发现无法访问网站。参考这篇文章所述,是pm2 的使用方法不对。文章中提到package.json可以查到启动方式,但是我没找到,不过用作者说的命令(pm2 start bin/www)最后成功了。

SSL设置

  • 按照腾讯云的引导申请证书并下载,具体查看这个帖子。下载的证书中有多个版本的,这里使用Nginx的。
  • 参考这个帖子所述,建立https服务:
    var https = require('https');
    var options = {
      key: fs.readFileSync(path.join(__dirname, '../SSL/Nginx/jhcj.key')),
      cert: fs.readFileSync(path.join(__dirname, '../SSL/Nginx/jhcj.pem'))
    }
    var server = https.createServer(options, app); 
    ...
    
  • 在腾讯云中下载到的是key和crt两个文件,需要用openssl将crt转为pem文件
  • 在改为https服务之后,还需要让用户在输入http://_webPath时能够自动跳转到https://_webPath。参考这篇文章的内容,建立一个httpServer 将3000端口(也就是80端口) 重定向到https,如下。也曾尝试用iptables 将80和443端口都重定向到3001,发现失败了。
const httpServer = http.createServer((req,res)=>{
  res.writeHead(301, {'Location': 'https://_webPath/'});
    res.end();
})
httpServer.listen(3000);

Chrome localhost 自动跳转的问题 (未解决)

在本地调试时用Chrome访问localhost会自动跳转到服务器上运行的网址,很奇怪的问题。使用127.0.0.1可以正常访问;使用其他浏览器可以正常访问localhost。

JQuery无法绑定事件(未解决)

你可能感兴趣的:(网站,node.js)