前后端分离部署的时候,需要在nginx里设置转发websocket和http
server {
listen 9000;
server_name -;
location / { #前端界面
root /data/services/face_front/;
index index.html;
}
location /user { #后端HTTP请求的转发
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ ^/(endpoint|push|topic)/ { #websocket转发
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Port $Server_port;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
另外在后端项目中需要设置
server:
use-forward-headers: true
如果是开发过程中前后端联调存在跨域问题:
1.设置HTTP请求的跨域支持
@Configuration
public class GlobalCorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
//重写父类提供的跨域请求处理的接口
public void addCorsMappings(CorsRegistry registry) {
//添加映射路径
registry.addMapping("/**")
//放行哪些原始域
.allowedOrigins("*")
//是否发送Cookie信息
.allowCredentials(false)
//放行哪些原始域(请求方式)
.allowedMethods("GET","POST", "PUT", "DELETE")
//放行哪些原始域(头部信息)
.allowedHeaders("*")
//暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
.exposedHeaders("Header1", "Header2");
}
};
}
}
2.此时websocket还是存在跨域失败返回403错误的
@Configuration
// @EnableWebSocketMessageBroker注解用于开启使用STOMP协议来传输基于代理(MessageBroker)的消息,这时候控制器(controller)
// 开始支持@MessageMapping,就像是使用@requestMapping一样。
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
//注册一个Stomp的节点(endpoint),并指定使用SockJS协议。
stompEndpointRegistry.addEndpoint(Constant.ENDPOINT).setAllowedOrigins("*").withSockJS(); // /endpoint 这里设置跨域支持.setAllowedOrigins
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
//服务端发送消息给客户端的域,多个用逗号隔开
registry.enableSimpleBroker(Constant.TOPIC, Constant.P2P_PREFIX);// /topic ,/user
//定义一对一推送的时候前缀
registry.setUserDestinationPrefix(Constant.P2P_PREFIX);// /user
//定义websoket前缀
registry.setApplicationDestinationPrefixes(Constant.PUSH_PREFIX);//用于MessageMapping的注解前缀 /ws-push
}
}