部署前后端分离项目的一些问题

同一个域名不能部署两个不同的实例

我就是想在同一个域名下通过nginx部署两个不同的实例,后端接口都是用springboot写的,可是一个配置好,另一个就不能用啦。但是同一个域名可以部署很多相同的实例,通过nginx作为代理服务器负载均衡到后端服务,还可以通过加权来控制给指定的实例更多流量。

如下配置:相同实例负载均衡

upstream tomcatserver1 {
server 127.0.0.1:8888 weight=10;
server 127.0.0.1:8081 weight=20;
}


server {
    proxy_buffer_size 128k;
    proxy_buffers 32 128k;
    proxy_busy_buffers_size 128k;

    listen 80;

    server_name ztinfo.xyz www.ztinfo.xyz;

    client_max_body_size 1024m;

    location / {
   proxy_set_header HOST $host;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

   proxy_pass http://tomcatserver1;
    }

上面的配置本机8888端口和8081端口提供的服务相同,通过nginx负载到这两个实例提高并发量,weight加权可以指定让哪个实例承担更多的流量。值给的越大,承担的流量就越大。

我遇到的问题

上面的8081端口和8888端口我这两个是不同的实例,一个是我做的毕设,一个是我的博客,都是采用springboot开发的后台接口,我也采用如下配置想区分开这两个实例

location /index.html {
    proxy_set_header Host $http_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;

    proxy_pass http://127.0.0.1:8081;
    }

由于我springboot项目集成了vue前端静态界面了,因此这样配置是可以访问到前端界面的,具体怎么集成可以参考如下博客,其实就是把前端项目bulid把dlist包下静态资源拷贝到springboot项目下的resourse下的static包下就ok啦。

可以参考如下博客:https://mp.weixin.qq.com/s/C7PIck3SIPPTcA3NX3ELoQ

上面的配置是可以访问到index界面的但是遇到一个新问题就是css,js这些资源加载不出来,怎么办呢??百度一大堆,结果在nginx中server中加了如下配置

location ~ .*\.(js|css|ico|png|jpg|eot|svg|ttf|woff|html|txt|pdf|)$ {
            proxy_pass http://127.0.0.1:8081;
         }

上面的配置代表所有的js、css请求都代理到8081这个服务,结果css、js样式还真加载出来了,可是我的博客用不了啦,因为所有的css、js都转发到这个服务,这个服务上面没有我博客上的静态资源,因此博客用不了。

于是我就把前端静态资源复制到nginx中vhrs目录上面,nginx配置如下

location /vhrs/ {
       alias /usr/share/nginx/html/vhrs/;
       index index.html index.php index.htm;
       expires 30d;
   }

上面的配置是请求nginx代理到我们前端静态资源,可是还是找不到css、js资源。没办法,总不能让所有js,css资源都转发到这个服务吧,因此放弃。

还有就算是配置上让所有资源走这个服务,可以出现前端界面,但是点击按钮发送axios请求格式是ip+后端请求的路径,因此必须配置成如下才能请求成功

location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://127.0.0.1:8081;
    }

这样配置就配置两个根路径,因此这样配置nginx是不允许的。因此也是不行的。

总结

综上所述,想在一个nginx中配置两个不同实例,这两个实例都是用springboot提供的服务,是不可能的。要么重新买个域名,绑定相同ip。要么采用二级域名。
但是可以同时部署一个用springboot写的接口,一个用ssm写的运行在tomcat容器中的服务。

#博客的转发配置,采用springboot提供的服务
location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://127.0.0.1:8888;
    }

#tomcat服务器
location /index {
     proxy_set_header Host $http_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;

     proxy_pass http://127.0.0.1:8080/ticketms/;
    }

最终妥协啦,换端口配置在另外一个service中,监听81端口,有时候是真的不能配置多个location在同一个service中,css,js样式冲突

server {
        proxy_buffer_size 128k;
        proxy_buffers 32 128k;
        proxy_busy_buffers_size 128k;

        listen       81;
        server_name  ztinfo.xyz www.ztinfo.xyz;
        client_max_body_size 1024m;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
		
    #这个是springboot集成项目
    location / {

        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8081;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值