网站部署踩坑日记|SSL & HTTPS
最近做完了一个个人项目,通过AWS EC2使用Docker部署数据库和NodeJS后端,前端项目通过Vercel自动部署。
因为Vercel部署后会自带SSL,所以要求我在AWS部署后端时也需要添加SSL。
之前有通过腾讯云免费申请SSL证书,再通过Nginx设置加载以实现https访问。如下这样:
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/your_certificate.crt;
ssl_certificate_key /etc/nginx/ssl/your_private_key.key;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
这次试试另一种方法,Let’s Encrypt。
首先还是在/etc/nginx/conf.d/your-website.conf
文件中添加了如下配置
server {
listen 80;
server_name your-domain-name.com;
# Serve the static page
location / {
root /root/of/your/dist/folder;
try_files $uri $uri/ /index.html;
}
# Serve the backend application
location /api/v1 {
proxy_pass http://localhost:4000; # Change it to your app's listening port
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
保存以后执行如下命令进行测试
# reload nginx settings
sudo nginx -s reload
# restart nginx
sudo systemctl restart nginx
# test nginx settings
sudo nginx -t
一切正常后,之后根据AI老师的指示,进行了一系列安装:
sudo apt-get update
sudo snap install --classic certbot # could be different based on your system's PKM
在你的域名购买商那里DNS解析到服务器地址以后,然后开始配置
sudo certbot --nginx
按照指示进行一系列设置,期间遇到一个小bug就是提示总是无法生成证书,搜索以后发现是由于域名刚买,certbot查不到DNS记录,所以等了下继续再设置就好了。
2024.4.3更新
小插曲:
全部配置完成后,nginx无权限法访问root的路径。
我的前端dist目录是/home/ubuntu/project/dist
,尝试更改dist,project等目录的权限和所有者,均无效。
后尝试得出结论,需要为ubuntu
目录增加others
的读和执行权限。
sudo chmod o+rx ubuntu