Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

322
Views
Apache websocket funciona con ProxyPass pero no con RewriteRule

Estoy intentando habilitar websockets en una aplicación web AWS ElasticBeanstalk Tomcat 8.5. Tengo una configuración de apache personalizada (abreviada):

 RewriteEngine On RewriteOptions Inherit ProxyRequests Off ProxyPreserveHost on # send websocket requests to tomcat with the websocket protocol RewriteCond ${HTTP:Connection} "Upgrade" [NC] RewriteCond ${HTTP:Upgrade} "websocket" [NC] RewriteRule /(.*) "ws://localhost:8080/$1" [P,L] # send all other requests to tomcat ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/

En la aplicación web, cuando intento conectar el websocket del cliente al extremo del servidor, aparece este error:

websocket.js:372 Falló la conexión de WebSocket a 'wss://example.com/ws/sales': Error durante el protocolo de enlace de WebSocket: Código de respuesta inesperado: 404

Verifiqué en las herramientas para desarrolladores de Chrome que los encabezados de conexión y actualización enviados en la solicitud al punto final anterior son correctos. (Obviamente, realmente me estoy conectando a mi sitio web, no a example.com)

Cuando cambio la configuración de apache para usar ProxyPass en lugar de RewriteRule, ¡funciona perfectamente! No quiero hacerlo de esta manera porque no quiero hacer un proxy a ws simplemente basado en el URI. ¡Quiero revisar los encabezados como se supone que debes hacerlo!

 ProxyRequests Off ProxyPreserveHost on # send websocket requests to tomcat with the websocket protocol ProxyPass /ws/ ws://localhost:8080/ws/ retry=0 ProxyPassReverse /ws/ ws://localhost:8080/ws/ # send all other requests to tomcat ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Me topé con la solución a esto simplemente por prueba y error, que es eliminar el indicador L (último) de RewriteRule . Lo que no entiendo todavía es por qué eso lo soluciona. Pensé que sería bueno publicar esta respuesta de todos modos.

 RewriteEngine On RewriteOptions Inherit ProxyRequests Off ProxyPreserveHost on # send websocket requests to tomcat with the websocket protocol RewriteCond %{HTTP:Upgrade} "websocket" [NC] RewriteCond %{HTTP:Connection} "Upgrade" [NC] RewriteRule .* "ws://localhost:8080%{REQUEST_URI}" [P] # send all other requests to tomcat ProxyPass / http://localhost:8080/ retry=0 ProxyPassReverse / http://localhost:8080/
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!