同一个域名不能部署两个不同的实例
我就是想在同一个域名下通过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;
}
}