gpt4 book ai didi

apache - 从 Apache 转发到 Tomcat 会中断 Grails rest api 调用

转载 作者:行者123 更新时间:2023-11-28 22:28:50 24 4
gpt4 key购买 nike

这是我的设置:Apache 虚拟主机监听端口 80,重定向到位于 localhost:8080/webapp 的 Tomcat。这是我的虚拟主机设置:

<VirtualHost xxx>
ServerAdmin xxx
DocumentRoot "xxx"
ServerName xxx
ProxyRequests Off
ProxyPass /webapp http://localhost:8080/webapp
ProxyPassReverse /webapp http://localhost:8080/webapp
RedirectMatch (.*) xxx/webapp
<Location "/">
# Configurations specific to this location. Add what you need.
# For instance, you can add mod_proxy_html directives to fix
# links in the HTML code. See link at end of this page about using
# mod_proxy_html.


# Allow access to this proxied URL location for everyone.
Order allow,deny
Allow from all
</Location>

我将 Grails 域类设置为资源,如下所示:

@Resource(uri='/agegroup',formats=['json'],readOnly=true)
class AgeGroup { ...}

这按预期工作,我可以浏览到 http://www.example.com/webapp/agegroup一切正常。这就是问题所在……我有一个 Restful Controller ,我想在/api 上调用它。这可以在 Tomcat 中运行 localhost:8080/webapp 并调用/api,但不适用于 Apache 转发。这是 Controller :

import static org.springframework.http.HttpStatus.*
import static org.springframework.http.HttpMethod.*
import groovy.json.*

class ApiController extends RestfulController{
static responseFormats = [index: ['json']]
... }

所以我的问题是,我如何对这个 Controller 进行休息调用,当 Apache 转发到/webapp 时,该 Controller 将起作用?我想我可能需要的是一种告诉 Grails 将 ApiController 映射到某处的方法。我也试过 UrlMappings.groovy,但没有成功。

更新:

我已经将 serverURL 和应用程序上下文添加到 Config.grooy,但没有成功:

grails.serverURL = "http://example.com"
grails.app.context="/webapp"

此外,我使用 AJP 协议(protocol)通过 Apache 而不是 http 进行转发,更新了虚拟主机配置:

ProxyRequests Off
ProxyPass /webapp ajp://localhost:8009/webapp
ProxyPassReverse /webapp ajp://localhost:8009/webapp
RedirectMatch (.*) ajp:/xxx/webapp

最佳答案

如果 Web 应用程序在 /webapp/api 这两个上下文中运行,那么您还需要在 VirtualHost 中包含:

ProxyPass /api http://localhost:8080/api
ProxyPassReverse /api http://localhost:8080/api

如果您的 Rest API 在 /webapp/api 下运行,那么我建议在 Chrome 或 Firefox 中点击它,并查看“网络”选项卡在开发者工具中为请求显示的内容。

关于apache - 从 Apache 转发到 Tomcat 会中断 Grails rest api 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30677617/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com