Tôi đang sử dụng Nginx làm proxy ngược của ứng dụng khởi động Spring. Tôi cũng sử dụng Websockets với sockjs và stomp messages.Xác thực Web proxy của Nginx Reverse Proxy - HTTP 403
Đây là cấu hình ngữ cảnh.
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/localization" >
<websocket:sockjs/>
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic" />
</websocket:message-broker>
Đây là mã khách hàng:
var socket = new SockJS(entryPointUrl);
var stompClient = Stomp.over(socket);
var _this = this;
stompClient.connect({}, function() {
stompClient.subscribe('/app/some-url', function (message) {
// do some stuff
});
});
Tôi cũng bạn Xuân An để bảo vệ một số nội dung.
@Configuration
@Order(4)
public static class FrontendSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/js/**", "/css/**", "/webjars/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().permitAll();
}
}
Mọi thứ hoạt động tốt, mong đợi khi tôi chạy ứng dụng này sau proxy ngược Nginx. Đây là cấu hình ngược lại:
proxy_pass http://testsysten:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
# Max body size
client_max_body_size 10M;
Kết nối luôn không thành công với mã HTTP 403.
Tôi đang sử dụng phiên bản 1.9.7.
Bạn có ý tưởng nào không, tại sao khách hàng không được xác thực?
Tôi biết các câu hỏi tương tự, như this one nhưng các giải pháp không hoạt động chút nào.
Cập nhật
Tôi đã quản lý để chạy ứng dụng qua HTTP. Tôi cần phải chuyển mã thông báo CSRF trong cấu hình Nginx. Cấu hình mới là:
proxy_pass http://testsysten:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Pass the csrf token (see https://de.wikipedia.org/wiki/Cross-Site-Request-Forgery)
# Default in Spring Boot
proxy_pass_header X-XSRF-TOKEN;
# WebSocket support (nginx 1.4)
proxy_http_version 1.1;
Chỉ thiếu bị chuyển hướng qua HTTPS. Trong các bản ghi mùa xuân là thấy sau entry:
o.s.w.s.s.t.h.DefaultSockJsService - Processing transport request: GET http://testsystem:80/localization/226/3mbmu212/websocket
Có vẻ như Nginx Proxy cần phải viết lại để các cổng bên phải.