请教一个 ingress 规则的问题

我们目前有三个服务使用相同的域名,想通过路径划分开:

  1. laravel 提供的 http 服务 api
  2. laravel-echo-server 提供的 ws 服务 ws-a
  3. 另一个 laravel-echo-server 服务 ws-b

由于想少用点证书,于是想部署到相同的域名。另外因为 laravel-echo-server 只能配置一个授权校验接口地址,虽然项目一样但授权的 guard 不一样,所以采用了两个仅在配置有区别的 laravel-echo-server 容器进行部署。

目前采用的是 nginx-ingress 控制器。

我想让 /a/socket.io 通过 rewrite 到 ws-a:6001/socket.io/
/b/socket.io 通过 rewrite 到 ws-b:6002/socket.io/
其他的请求到 api:80

现在遇到的问题是:

看了一下 ingress 的日志,能看到 /a/socket.io 被反向代理到某个 ip 上类似:

http://10.217.0.70:6001/socket.io/?EIO=3&transport=polling&t=NYIiUjD

我尝试着在 ingress 的 pod 里面curl访问这个 url ,返回正常。

但从 ingress 的容器日志上看到的全都是 400 状态,类似下面这样:

x.x.x.x - [x.x.x.x] - - [02/Apr/2021:21:36:30 +0800] "GET /a/socket.io/?EIO=3&transport=polling&t=NYIpAdf HTTP/1.1" 400 11 "http://a.b.c.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36" 472 0.005 [default-ws-a-6001] 10.217.0.70:6001 11 0.005 400 d6f1ba5289fd42baa8d8e0d818795af1 a.b.d.com []

是 rewrite 规则有问题吗?貌似看不出有什么问题:

rewrite "(?i)/a/socket.io" /socket.io/ break;

请问大家能否看出什么问题。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 1

我证书只用一个,包含域名的全部主机

  • @.example.com
  • *.example.com
3年前 评论
小李世界 (作者) 3年前
sanders (楼主) 3年前
sanders (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!