मैं स्प्रिंग बूट एप्लिकेशन की रिवर्स प्रॉक्सी के रूप में Nginx का उपयोग कर रहा हूं। मैं सॉकेट और स्टॉम्प संदेशों के साथ Websockets का भी उपयोग करता हूं।Nginx रिवर्स प्रॉक्सी वेबसाइट्स प्रमाणीकरण - HTTP 403
यहां संदर्भ कॉन्फ़िगरेशन है।
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
});
});
मैं आपको यह भी वसंत सुरक्षा कुछ सामग्री की रक्षा के लिए:
<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>
यहाँ ग्राहक कोड है।
@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();
}
}
सबकुछ बढ़िया काम करता है, उम्मीद है कि जब मैं इस एप्लिकेशन को Nginx रिवर्स प्रॉक्सी के पीछे चलाता हूं। यहां रिवर्स कॉन्फ़िगरेशन है:
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;
कनेक्शन हमेशा HTTP 403 कोड के साथ विफल रहता है।
मैं संस्करण 1.9.7 का उपयोग कर रहा हूं।
क्या आपके पास कोई विचार है, ग्राहक को प्रमाणीकृत क्यों नहीं मिलता है?
मुझे इसी तरह के प्रश्न हैं, जैसे this one लेकिन समाधान बिल्कुल काम नहीं करते हैं।
अद्यतन
मैं HTTP पर एप्लिकेशन चलाने में कामयाब रहा। मुझे Nginx कॉन्फ़िगरेशन में CSRF टोकन पास करने की आवश्यकता है। नई कॉन्फ़िगरेशन है:
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;
केवल अनुपलब्ध HTTPS पर रीडायरेक्ट किया गया है।
o.s.w.s.s.t.h.DefaultSockJsService - Processing transport request: GET http://testsystem:80/localization/226/3mbmu212/websocket
लगता Nginx प्रॉक्सी सही बंदरगाह के लिए फिर से लिखने की जरूरत है जैसे: स्प्रिंग लॉग में प्रवेश के बाद देखते हैं।