如何在一台服务器上同时部署wss和https吗? 都用443端口

如题,只有一台服务器,原项目跑在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证书。 :joy: 而且上面这个配置,是我的的理论。没实践过。

k哥,但是有一个问题,证书和域名只有一个,所以俩项目在同一个tomcat下。部署在服务器创建webscoket连接就报 Error in connection establishment: net::ERR_SSL_PROTOCOL_ERROR

原有的https项目没问题

俩项目都是war包,部署在同一个Tomcat,这个Tomcat开启了ssl。一个项目是http服务,一个项目是websocket服务?

对,是这个意思 :joy:

那不会冲突啊。。俩项目都在一个Tomcat里面,这个Tomcat配置好ssl就是了。
不同项目,用不同的uri区分应该没问题啊。

请求api

https://springboot.io/project1/login

请求websocket

wss://springboot.io/project2/channel

其实ssl证书 如果支持泛域名的话 同一个nginx 可以多个443 不同 servername公用的,不支持的话就会提示 证书有风险

难就难在这证书是单域名证书,你的逻辑和理论我也设想过,可上了服务器才发现貌似不是这回事,我创建socket我的端口是另外的端口

哦,你的ws服务。并不是Tomcat提供的?而是自己实现的。。。那够呛了。

还以为原先的服务是直接外面弄得https :see_no_evil: 弄在tomcat里面多鸡肋 :hear_no_evil: tomcat自定义加密后,后面换证书换机器都起不来了,我们接触到一个 tomcat直接和服务器文件加密绑定,显卡服务器参数都绑定了

1 Like