如题,只有一台服务器,原项目跑在tomcat下,tomcat里配置了https,没有用nginx代理,现在需要用到wss,请问能办到吗,合理的做法是怎样最好呢?
我jio得应该是可以的吧。把Tomcat的端口改成其他的,不要用443
# 反向代理业务
server {
listen 443 ssl;
server_name api.springboot.io;
ssl_certificate /usr/local/ssl/springboot/springboot.pem;
ssl_certificate_key /usr/local/ssl/springboot/springboot.key;
location / {
proxy_pass https://127.0.0.1:8081; # https服务的后端
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
# 反向代理Websocket
server {
listen 443 ssl;
server_name ws.springboot.io;
ssl_certificate /usr/local/ssl/springboot/springboot.pem;
ssl_certificate_key /usr/local/ssl/springboot/springboot.key;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
location / {
proxy_pass http://127.0.0.1:8082; # http服务的ws
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
nginx要用ssl的话,得自己配置ssl证书。 而且上面这个配置,是我的的理论。没实践过。
k哥,但是有一个问题,证书和域名只有一个,所以俩项目在同一个tomcat下。部署在服务器创建webscoket连接就报 Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR
原有的https项目没问题
俩项目都是war包,部署在同一个Tomcat,这个Tomcat开启了ssl。一个项目是http服务,一个项目是websocket服务?
对,是这个意思
那不会冲突啊。。俩项目都在一个Tomcat里面,这个Tomcat配置好ssl就是了。
不同项目,用不同的uri区分应该没问题啊。
请求api
https://springboot.io/project1/login
请求websocket
wss://springboot.io/project2/channel
其实ssl证书 如果支持泛域名的话 同一个nginx 可以多个443 不同 servername公用的,不支持的话就会提示 证书有风险
难就难在这证书是单域名证书,你的逻辑和理论我也设想过,可上了服务器才发现貌似不是这回事,我创建socket我的端口是另外的端口
哦,你的ws服务。并不是Tomcat提供的?而是自己实现的。。。那够呛了。
还以为原先的服务是直接外面弄得https 弄在tomcat里面多鸡肋 tomcat自定义加密后,后面换证书换机器都起不来了,我们接触到一个 tomcat直接和服务器文件加密绑定,显卡服务器参数都绑定了
1 Like