websocket Sockjs在远程服务器上给出SSL协议错误,但在本地工作

h7appiyu  于 2023-06-23  发布在  其他
关注(0)|答案(1)|浏览(130)

大家好,所以我正在研究sockJS网络套接字与angular作为前端和JAVA作为后端,一切工作正常,在本地,但我得到**net::ERR_SSL_PROTOCOL_ERROR*

Http前端到http后端工作Https前端到http后端不工作我如何通过nginx或任何解决方案来解决这个问题??
我的sockjs位于nginx后面
下面是我的nginx conf文件

server {
    listen 0.0.0.0:443 ssl http2 default_server;
    server_name test-xyz.pcr.com;

    client_max_body_size 20M;

    ssl_certificate     /etc/nginx/ssl/xyz_cert.crt;
    ssl_certificate_key /etc/nginx/ssl/xyz_decrypt.key;

    gzip on;
    gzip_types text/plain text/css text/javascript application/javascript application/x-javascript application/json image/svg+xml image/x-icon font/opentype text/x-component application/x-font-ttf;

    error_log /var/log/nginx/error_log warn;

    location / {
        proxy_ssl_name test-xyz.pcr.com;
        proxy_ssl_server_name on;
        root  /usr/share/nginx/html;
        index index.html;
        try_files $uri /index.html;
         client_max_body_size 20M;
    }

    location /api/ {
      proxy_pass http://test-xyz.pcr.com:8080/api/;
      proxy_connect_timeout       600;
      proxy_send_timeout          600;
      proxy_read_timeout          600;
      send_timeout                600;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Host $host;
      proxy_cache_bypass $http_upgrade;
      proxy_set_header Connection 'upgrade';
  }

location /socket/ {
    proxy_pass http://test-xyz.pcr.com:8080/socket/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
} 

}

我已经尝试过了,但仍然得到一个错误
角锉

public  connect() {
  var socket = new SockJS("https://test-xyz.pcr.com:8080/socket");
  var stompClient = Stomp.over(socket);
  stompClient.connect({},  (frame) => {
          console.log('Connected: ' + frame);   
          stompClient.subscribe('/chat', (payload) => {
         if(payload.body.indexOf('completed') > -1){
          this.uploadLoading = false
        
         this.fetchDataFromDb()
          this.snackBar.open("Data uploaded sucessfully..", "Dismiss", { duration: 4000 });
          console.log("callingDB")
         }else{
this.progressMessage = payload.body
         }
          });
      },  (error) => {  
        this.uploadLoading = false
       console.log("onError() called");
                  console.log("error: ",error);
      });
};

JAVA配置

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/socket")
                .setAllowedOriginPatterns("*")
                .withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.setApplicationDestinationPrefixes("/app")
                .enableSimpleBroker("/chat"); // Enables a simple in-memory broker
    }
}

我也尝试了下面的修复--public-host=0.0.0.0:0也没有工作
我也得到了这个错误的后端java,我明白它是由于Https流量从443来到http 8080端口我如何通过传递这个nginx

我是一个初学者,我不知道我做错了什么,任何建议将是有益的

v1l68za4

v1l68za41#

因为我是一个初学者,经过大量的尝试和错误,我发现这不是nginx的问题。问题是我的8080端口不接受https请求,因为它是一个http端口,所以我重新配置了我的后端接受8443上的https,并将https套接字连接重定向到8443 Enable https in Spring Boot

相关问题