我知道我之前问过这个问题,但是我没有得到任何答案。基本上我有一个在端口 5000 上运行的 node js 应用程序。我已使用以下 haproxy 配置成功将其重定向到端口 8080-
frontend http-in
mode http
bind *:8080
acl path-employeeList path_beg -i /
use_backend employeeList-backend if path-employeeList
backend employeeList-backend
mode http
option httplog
option forwardfor
server appserver1 206.189.22.155:5000
我现在可以通过以下方式访问我的应用程序http://206.189.22.155:8080。但现在在这个 URL 中,我不想使用端口号 (8080),而是想使用一个虚构的路径名(如 /ProcessDesigner.ie)来访问我的应用程序,应用程序应该可以通过以下地址访问:http://206.189.22.155/ProcessDesigner。
我到目前为止尝试过
frontend http-in
mode http
bind *:8080
acl path-page-designer path_beg -i /ProcessDesigner
use_backend page-designer-backend if path-page-designer
backend page-designer-backend
mode http
option httplog
option forwardfor
http-request set-path /ProcessDesigner
server appserver1 206.189.22.155:5000
当我打http://206.189.22.155/ProcessDesigner它说无法访问该网站。我这样做是为了让用户不必记住端口号,只需使用路径名即可访问。那么我应该如何更改我的配置呢?请通过使用我的配置提供示例来提供帮助!!
使用 http 到 https 重定向(80->443) 和后端的 reqrep 进行更新。
frontend http-in
mode http
bind *:80
bind *:443 ssl crt /etc/ssl/private/mydomain.pem
http-request redirect scheme https code 301 if !{ ssl_fc }
acl path-employeeList path_beg -i /ProcessDesigner
use_backend employeeList-backend if path-employeeList
backend employeeList-backend
mode http
option httplog
option forwardfor
reqrep ^([^\ :]+)\ /ProcessDesigner/?(.*)$ \1\ /\2
server appserver1 206.189.22.155:5000
现在有了这个更新的配置,当我点击https://206.189.22.155/它说 503 服务不可用(没有可用的服务器来处理此请求。)当我点击https://206.189.22.155/ProcessDesigner 我不再看到任何错误,只是一片空白的页面。虽然我可以看到选项卡名称“sample”,这表明或者至少看起来好像它已经到达应用程序,但没有输出,只是一个空白的白色屏幕。
答案1
从您的“我已尝试过”示例中我可以看到:您仍然绑定到端口 8080,而不仅仅是 80,因此无法访问该站点。
此外下面这一行可能不是您想要的。
http-request set-path /ProcessDesigner
它会导致对后端的请求始终是 /ProcessDesigner,可能还附加了查询字符串。
我可以想象您需要像下面这样的一行来从发送到后端的 URI 中剥离 /ProcessDesigner:
reqrep ^([^\ :]+)\ /ProcessDesigner/?(.*)$ \1\ /\2
但请记住,应用程序应正确设计为仅在响应主体中提供应用程序本地资源的相对路径(或至少需要可配置,以便您可以设置此类路径的基本路径)。
并且可能还需要重写响应标头,例如重定向的位置和 cookie 的 set-cookie(进一步众所周知但不太常见的标头是 uri 和 content-location),因为理想情况下应用程序不需要知道客户端用于访问的 URL 前缀,但 cookie 必须标有浏览器访问站点的路径(rsprep
在响应标头上存在执行此类操作的功能)。