lbn*_*dev 5 spring nginx cors docker
我的应用程序有一个使用 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;
}
Run Code Online (Sandbox Code Playgroud)
如果 nginx 在默认端口 (80) 上运行,我可以通过http://myserver/访问我的应用程序,不会出现任何问题。对http://myserver/api/some/REST/resource 的XHR 调用完美地工作。
如果我将 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("*");
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的配置中将cors.allowed.origins 设置为http://myserver:9043/。
这可行,但如果我要这样做,这是不切实际的:
是否有解决方案可以通过执行以下任一操作来解决此问题:
编辑:更多细节和示例:
这些服务是码头化的:
仅当前端在端口 80 上暴露给外界时它才有效......
小智 1
在反向请求中添加两个http header:
X-转发-原型
X 转发端口
指示原始协议和端口(与原始请求匹配)。
查看更多: https: //moi.vonos.net/java/spring-forward/
| 归档时间: |
|
| 查看次数: |
5279 次 |
| 最近记录: |