知者不惑,仁者不忧,勇者不惧。
此时此刻,心情还是溢于言表的,一年前想实现这个目标一个人鼓捣了好久,oh不是,还有王哥。此前太年轻,路子走错了,这回花了一周时间,又从0到1搞了个小的项目,准备部署到服务器上,勇者不惧,直面一年前的困难。只能说这次确实有所成长,一年前两周都没搞好的,现在一天下午就OK了。。。
正文开始分割线----------------------------------------------------------------
首先让目标清晰一点:
本站域名 zhr.wiki 部署在一台阿里云服务器上,基于纯前端的的静态框架Hexo搭建而成,现在有一个基于Ant Design Pro + Umi + Spring Boot的全栈项目用户中心也想部署在这台服务器上,而且要保证http(80端口)和https(443)端口共享,即两个项目可以同时访问的目的,下面就流水线似得走一遍
1 申请zhr.wiki的二级域名 user-center.zhr.wiki
这个非常快,参考教程 阿里云二级域名的申请、创建及解析
2 配置新的nginx.conf文件
我们有zhr.wiki
配置好的nginx.conf
文件 /etc/nginx/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 user www-data;worker_processes auto;pid /run/nginx.pid;include /etc/nginx/modules-enabled/*.conf ;events { worker_connections 768 ; } http { log_format main '$remote_addr - $remote_user [$time_local ] "$request " ' '$status $body_bytes_sent "$http_referer " ' '"$http_user_agent " "$http_x_forwarded_for "' ; server { listen 80 ; server_name zhr.wiki; rewrite ^(.*)$ https://${server_name} $1 permanent ; } server { listen 443 ssl; server_name zhr.wiki.com; ssl_certificate cert/www.zhr.wiki.pem; ssl_certificate_key cert/www.zhr.wiki.key; ssl_session_timeout 5m ; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 ; ssl_prefer_server_ciphers on ; charset utf-8 ; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error .log; client_max_body_size 10M ; location / { root /home/www/website; index index.html; try_files $uri $uri / /index.html; } } sendfile on ; tcp_nopush on ; tcp_nodelay on ; keepalive_timeout 65 ; types_hash_max_size 2048 ; include /etc/nginx/mime.types; default_type application/octet-stream; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3 ; ssl_prefer_server_ciphers on ; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error .log; gzip on ; include /etc/nginx/conf.d/*.conf ; include /etc/nginx/sites-enabled/*; include /etc/nginx/vhost/*.conf ; }
注意到上述代码中有 include /etc/nginx/conf.d/*.conf;
于是我们选择在 /etc/nginx/conf.d/
目录下新建 user-center.conf 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 server { listen 80 ; server_name user-center.zhr.wiki; rewrite ^(.*)$ https://$host $1 permanent ; } server { listen 443 ssl; server_name user-center.zhr.wiki; ssl_certificate /etc/letsencrypt/live/user-center.zhr.wiki/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/user-center.zhr.wiki/privkey.pem; ssl_session_timeout 5m ; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3 ; ssl_prefer_server_ciphers on ; location / { root /home/user-center/web/; index index.html index.htm; try_files $uri $uri / =404 ; } location /api/ { proxy_pass http://localhost:8080; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header X-Forwarded-Proto $scheme ; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } access_log /var/log/nginx/user-center.access.log; error_log /var/log/nginx/user-center.error .log; }
暂时还没学过nginx,只见到了解了其反向代理等功能,所以上述conf文件写的可能有冗余
3 申请免费SSL证书
配置好了之后就是给二级域名user-center.zhr.wiki申请免费 且自动更新 的SSL证书
这里使用certbot 来申请
安装 certbot :
1 2 sudo apt update sudo apt install certbot python3-certbot-nginx
获取 SSL 证书 :
1 sudo certbot --nginx -d user-center.zhr.wiki
自动更新证书 : Let’s Encrypt 证书有效期为 90 天,certbot
会自动处理续期。确保在 crontab 中设置了自动更新任务:
添加以下行来每天检查证书并更新:
1 0 3 * * * /usr/bin/certbot renew --quiet
重启nginx
1 sudo systemctl restart nginx
至此,就配置好了。当然这些都是手动配置,各种环境,比如mysql等都要手动下载几次,如果能使用docker那自然是更好了。。。