likes
comments
collection
share

前端如何给自己的node.js后台服务配置免费的SSL?

作者站长头像
站长
· 阅读数 81

接前文,上个月已经部署到了服务器,因为搬家牙齿正畸还有工作压力一直摆烂了2个月,啥也没做。但我还是想要把之前花钱买的云服务器利用起来,同时也想让自己做的小程序上线。

之前已经部署好了express.js后端,域名也已经备案了。最后一步就是配置一下SSL,同样我还是不想安装宝塔面板,毕竟就是一个小服务器,不想装这些东西浪费性能了,就辛苦自己多多gpt一下了。

想使用免费的SSL,最简单的办法就是使用let's encrypt的certbot + Nginx做反向代理。所以总共就3步:1.安装nginx,2.安装certbot 3.反向代理。

安装nginx

所以接下来,先安装一下nginx:

sudo apt update # 更新软件包
sudo apt install nginx # 安装nginx
sudo systemctl status nginx # 安装后默认就会自动运行,这一行是用来查看运行状态

如果出现启动报错的情况,多半是80端口已经被占用了。

前端如何给自己的node.js后台服务配置免费的SSL?

找到是哪个程序占用了端口后,再重新启动ngnix就可以了

sudo systemctl restart nginx # 重启
sudo systemctl status nginx # 查看状态

# 一些常见的命令
vim /etc/nginx/nginx.conf # 编辑配置文件
nginx -s stop # fast shutdow
nginx -s quit # graceful shutdown
nginx -s reload # changing configuration, starting new worker processes with a new configuration, graceful shutdown of old worker processes
nginx -s reopen # re-opening log files

安装并运行certbot

直接照着certbot教程来搞就好了,我就不复制粘贴了,没有必要。这里选择运行在nginx上,然后选择一下运行在哪个操作系统。

它有一行命令sudo certbot --nginx直接能把ssl的配置写到nginx配置里面,这样避免自己复制粘贴搞错。

前端如何给自己的node.js后台服务配置免费的SSL?

然后我就能立即通过https访问我的网站了:

前端如何给自己的node.js后台服务配置免费的SSL?

运行它的教程中的最后一行命令sudo certbot renew --dry-run前,记得先把nginx停一下,因为nignx运行的时候占用了80端口,先执行上面的命令,让它自动续签的定时任务跑起来来了,再重新运行nginx。

配置反向代理

通过问new bing,发现certbot是自动将ssl配置写入到了/etc/nginx/sites-available/default下,所以我们先将该文件备份一下,以免搞砸了。

前端如何给自己的node.js后台服务配置免费的SSL?

cd /etc/nginx/sites-available/ # 前往该目录
cp default default.backup # 复制default文件并将复制的文件命名为default.backup

同样,直接问new bing,毕竟对于它来说肯定是小case。因为我的node.js 服务运行在端口4000,所以我就让bing帮我写配置。

前端如何给自己的node.js后台服务配置免费的SSL? 我让它直接改掉我发给它的文件,但第一次返回的时候,它把格式搞乱了。让他再试一次,就已经完美完成了。

前端如何给自己的node.js后台服务配置免费的SSL?

# 重点就是这几行配置
# reverse proxy for port 4000
location / {
    proxy_pass http://localhost:4000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 }

如下最终的配置文件,请将test.site改成你的域名:

server {
  listen 80 default_server;
  listen [::]:80 default_server;
  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;
  server_name _;
  # reverse proxy for port 4000
  location / {
    proxy_pass http://localhost:4000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

server {

  root /var/www/html;
  index index.html index.htm index.nginx-debian.html;
  server_name test.site; # managed by Certbot

  location / {
    proxy_pass http://localhost:4000;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  listen [::]:443 ssl ipv6only=on; # managed by Certbot
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/test.site/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/test.site/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server {
  if ($host = test.site) {
    return 301 https://$host$request_uri;
    } # managed by Certbot


  listen 80 ;
  listen [::]:80 ;
  server_name xiaobaijun.top;
  return 404; # managed by Certbot
}

这是最后的成果,终于看到了https!因为我的小破网站没有做任何权限校验,所以我就给域名打个马赛克,以防万一。

前端如何给自己的node.js后台服务配置免费的SSL?

总结

我之前几乎没有接触到nginx,也完全不会使用,但是感谢new bing让我直接就干完了。接下来,想要学习一下使用nginx,因为就通过几行配置,就能实现反向代理,重定向等等,nginx真的太厉害。然后,现在想要干个啥事情已经是0门槛了,哪里报错就找gpt帮忙直接解决了。

转载自:https://juejin.cn/post/7227444929948106813
评论
请登录