我的应用程序有一个使用Spring Boot构建的后端,以及一个使用Angular构建并由nginx提供服务的前端Web应用程序。 Nginx配置为将请求反向代理到/ api /后端:
location /api/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://back:8080;
}
如果nginx在默认端口(80)上运行,我可以http://myserver/访问我的应用程序而不会出现问题。 XHR致电http://myserver/api/some/REST/resource完美无缺。
如果我更改nginx以侦听其他端口(随机:9043),则所有XHR调用都会失败并显示错误"无效的CORS请求"。这是意料之外的,因为只有我的前端应用程序正在调用API,并且由于反向代理,此API在与javascript文件相同的主机上提供。
要使其正常运行,我需要将其添加到我的Spring应用程序中:
@Configuration
public class CorsConfig {
@Value("${url.base:''}")
private String urlBase;
@Value("${cors.allowed.origins:[]}")
private String[] allowedOrigins;
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping(urlBase + "/**")
.allowedOrigins(allowedOrigins)
.allowedMethods("*");
}
};
}
}
然后在我的配置中将cors.allowed.origin
设置为http://myserver:9043/
。
这样可行,但如果我要去:
则不切实际通过执行以下任何操作,是否有解决方案可以解决此问题:
编辑:更多细节和示例:
服务已泊坞化:
仅当前端在端口80上暴露于外部世界时才有效...