前端如何给自己的node.js后台服务配置免费的SSL?
接前文,上个月已经部署到了服务器,因为搬家牙齿正畸还有工作压力一直摆烂了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端口已经被占用了。
找到是哪个程序占用了端口后,再重新启动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配置里面,这样避免自己复制粘贴搞错。
然后我就能立即通过https访问我的网站了:
运行它的教程中的最后一行命令sudo certbot renew --dry-run
前,记得先把nginx
停一下,因为nignx运行的时候占用了80端口,先执行上面的命令,让它自动续签的定时任务跑起来来了,再重新运行nginx。
配置反向代理
通过问new bing,发现certbot是自动将ssl配置写入到了/etc/nginx/sites-available/default
下,所以我们先将该文件备份一下,以免搞砸了。
cd /etc/nginx/sites-available/ # 前往该目录
cp default default.backup # 复制default文件并将复制的文件命名为default.backup
同样,直接问new bing,毕竟对于它来说肯定是小case。因为我的node.js 服务运行在端口4000,所以我就让bing帮我写配置。
我让它直接改掉我发给它的文件,但第一次返回的时候,它把格式搞乱了。让他再试一次,就已经完美完成了。
# 重点就是这几行配置
# 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!因为我的小破网站没有做任何权限校验,所以我就给域名打个马赛克,以防万一。
总结
我之前几乎没有接触到nginx,也完全不会使用,但是感谢new bing让我直接就干完了。接下来,想要学习一下使用nginx
,因为就通过几行配置,就能实现反向代理,重定向等等,nginx真的太厉害。然后,现在想要干个啥事情已经是0门槛了,哪里报错就找gpt帮忙直接解决了。
转载自:https://juejin.cn/post/7227444929948106813