之前在java系列的时候,我们已经研究过在linux服务器中部署springboot项目了。
具体请移步《Java(一百五十二)SpringBoot项目快速打包成jar项目与部署》
我这里的内容需要结合上边的文章来看。
上文中的部署的项目中就一个接口,没有前端页面,测试的只是是否能部署成功,但是我这里部署的项目是一个完整的前后端分离的博客。有VUE前端,有Springboot后端,还有基于Springboot项目的webscoket即时聊天功能。
之前都是使用Springboot项目做接口使用,前后端项目一起部署我也是第一次,最开始我是想Springboot部署一个项目,配置一个域名。Vue项目部署一个域名。再配置一个跨域,完美解决部署。
理想很美好,现实有点小残酷,我像上边那样部署完成,大部分功能都是好用的,除了webscoket,webscoket是不支持非同源链接的。如下图所示:
Host与origin两个字段必须是一样的,否则链接失败。
这可怎么办,想要webscoket好用,就得用一个域名,但是一个域名又得配置vue项目,还得配置Springboot项目。
这……考验我nginx功底来了这是?小问题,把Springboot项目和vue项目部署在一起就可以了。但是这里需要在路由上做一下区分。否则会有问题。
我这里VUE项目使用的history模式,就是路由中没有#,因此这里需要和Springboot做一下区分。
不废话了,我下边直接放出我的nginx配置文件,具体配置文件中有注释:
# webscoket配置
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443;
server_name guanchao.site;#填写你的域名
index index.html index.htm index.php;#默认打开页面
root /usr/xxx/xxxx;#你的index.php路径
# error_page 404 /index.html;
autoindex off;
#https配置
ssl on;
ssl_certificate cert/blog/guanchao.site.pem;
ssl_certificate_key cert/blog/guanchao.site.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;
#开启gzip功能,加快网站打开速度
gzip on;
#最小压缩文件大小
gzip_min_length 1k;
#开启gzip静态压缩功能
gzip_static on;
#gzip缓存大小
gzip_buffers 4 16k;
#gzip http版本
gzip_http_version 1.1;
#gzip 压缩级别 1-10
gzip_comp_level 2;
#gzip 压缩类型
gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;# 是否在http header中添加Vary: Accept-Encoding,建议开启gzip_vary on;
proxy_read_timeout 60s;
# VUE前端
location / {
index index.html;
# vue 动态路由原始配置
try_files $uri $uri/ /index.html;
# laravels 结合vue动态路由配置
# try_files $uri $uri @laravels/ /index.html;
}
# java请求
location /java {
# 允许 所有头部 所有域 所有方法
# add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Headers' '*';
add_header 'Access-Control-Allow-Methods' '*';
proxy_pass http://127.0.0.1:7001; # 表示代理到指定的ip地址,就是你之前服务器访问的地址带上端口号
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
# 处理 WebSocket 通信
location /api {
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header Scheme $scheme;
proxy_set_header Server-Protocol $server_protocol;
proxy_set_header Server-Name $server_name;
proxy_set_header Server-Addr $server_addr;
proxy_set_header Server-Port $server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_pass http://127.0.0.1:7001; #此处的端口号要与springboot启动的端口号相同
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name guanchao.site;
rewrite ^(.*)$ https://$host$1 permanent; #将该域名的http访问重写至https
}
上边还有webscoket的配置,参考即可。
那么,一个完整的Springboot项目(vue + Springboot + webscoket)就部署完成了。
部署开始的部分还是要参照《Java(一百五十二)SpringBoot项目快速打包成jar项目与部署》
有好的建议,请在下方输入你的评论。