0

我已经使用 apache2 配置了 Web 服务器,然后使用 ajp 协议向 tomcat 代理请求,如下所示:

<host *:443>

        ProxyRequests On
        ProxyPreserveHost On
        <Proxy *>
          Order allow,deny
          Allow from all
          AllowMethods GET PUT DELETE POST OPTIONS
        </Proxy>
        ProxyPass / ajp://some_vhost:8009/
        ProxyPassReverse / ajp://some_vhost:8009/

从 apache2 服务器接收到的所有请求都转发到 GET HTTP 方法到 tomcat,因此如果您正在侦听一些休息操作 post 方法,则此行为会导致不支持的方法。

所以,我想知道如何通过AJP连接器将原始HTTP请求方法转发到tomcat容器

实际场景:client -> POST req Apache2 -> GET 方法到 apache tomcat。我想要什么客户端-> POST req Apache2-> POST 方法到 apache tomcat。

提前致谢!

更新。

我在监听端口 80 的虚拟主机上有一个重写条件,它重写为 https

RewriteEngine on
        RewriteCond %{SERVER_NAME} =www.mydomain.com [OR]
        RewriteCond %{SERVER_NAME} =mydomain.com
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

我如何也可以重写 Http 方法?我认为这是问题所在,因为当我使用 https 启动请求时:它可以工作

4

1 回答 1

0

你的分析不正确。httpd 总是通过 AJP 协议将原始的 HTTP 方法转发给 Tomcat。

问题是 HTTPS 重定向。当原始 POST 被重定向时,客户端以 GET 响应。您要发出 307 重定向,而不是 301。

注意:我的(可能过时的)经验是客户并不总是正确响应 307。

于 2020-04-27T08:27:31.667 回答