如何为通过 mod_proxy 连接器 (ajp) 重定向到 tomcat 的 apache 配置 https
How to configure https for an apache redirecting to tomcat via mod_proxy connector (ajp)
我在 linux 系统(在 amazon aws 上)上有一个 apache 服务器,运行 https。我也有一个 tomcat 。我想使用 apache 作为 tomcat 的前门。我为 apache 启用了 mod_proxy 模块,并且重定向到 tomcat 工作正常,看起来像这样:
<VirtualHost *:80>
ServerName my.domain.com
#Log
ErrorLog /var/log/ajp.error.log
CustomLog /var/log/ajp.log combined
#AJP configuration
<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>
ProxyRequests Off
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
我在 /etc/httpd/conf.d 文件夹中的文件 httpd.conf 的底部添加了这一行。
但是,如果我在 httpd.conf 文件中添加另一个 VirtualHost 以重定向到 https,则重定向到 https 有效,但将显示 apache 测试页面,而不是 tomcat 页面。如果我删除此重定向 VirtualHost,将显示 apache tomcat 页面。我还启用了 mod_rewrite 模块。我在 ssl.conf (/etc/httpd/conf.d/ssl.conf) 中配置的 https 东西,它工作正常。我在那里设置了 ssl 证书,如果客户端使用已知的 https 证书发出请求,服务器将响应该请求。否则不行。
我添加到 httpd.conf 的 https 重定向的 VirtualHost 如下所示:
<VirtualHost *:80>
ServerName my.domain.com
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/ [NC,R,L]
</VirtualHost>
你能帮帮我吗?我在这里做错了什么?我应该在 /etc/httpd/conf.d/ssl.conf 文件中进行更改吗?我很
以下区块
<VirtualHost *:80>
ServerName my.domain.com
# [...]
</VirtualHost>
就像在说 "this block will handle everything for http://my.domain.com"。您不能添加具有相同 port/ServerName 的另一个:它们不会合并,一个会覆盖另一个。
如果 https 部分已经工作并且您想将所有 http 流量重定向到 https,您完全可以 comment/remove 第一个 <VirtualHost *:80>
块(使用代理)。 <VirtualHost *:443>
中的代理规则将处理一切(假设 https 部分有效)。
如果您只想将部分内容重定向到 https(不是您的问题,但这应该有助于您理解它),您应该将 RewriteEngine
/ ReWriteCond
/ RewriteRule
指令 在现有的虚拟主机中。
好的,现在我得到了那个问题的解决方案。我在 /etc/httpd/conf.d/ssl.conf 的底部写了这行,在 VirtualHost 结束之前:
#Log
ErrorLog /var/log/ajp.error.log
CustomLog /var/log/ajp.log combined
#AJP configuration
<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>
ProxyRequests Off
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
我在 linux 系统(在 amazon aws 上)上有一个 apache 服务器,运行 https。我也有一个 tomcat 。我想使用 apache 作为 tomcat 的前门。我为 apache 启用了 mod_proxy 模块,并且重定向到 tomcat 工作正常,看起来像这样:
<VirtualHost *:80>
ServerName my.domain.com
#Log
ErrorLog /var/log/ajp.error.log
CustomLog /var/log/ajp.log combined
#AJP configuration
<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>
ProxyRequests Off
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/
</VirtualHost>
我在 /etc/httpd/conf.d 文件夹中的文件 httpd.conf 的底部添加了这一行。
但是,如果我在 httpd.conf 文件中添加另一个 VirtualHost 以重定向到 https,则重定向到 https 有效,但将显示 apache 测试页面,而不是 tomcat 页面。如果我删除此重定向 VirtualHost,将显示 apache tomcat 页面。我还启用了 mod_rewrite 模块。我在 ssl.conf (/etc/httpd/conf.d/ssl.conf) 中配置的 https 东西,它工作正常。我在那里设置了 ssl 证书,如果客户端使用已知的 https 证书发出请求,服务器将响应该请求。否则不行。
我添加到 httpd.conf 的 https 重定向的 VirtualHost 如下所示:
<VirtualHost *:80>
ServerName my.domain.com
RewriteEngine on
ReWriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*) https://%{HTTP_HOST}/ [NC,R,L]
</VirtualHost>
你能帮帮我吗?我在这里做错了什么?我应该在 /etc/httpd/conf.d/ssl.conf 文件中进行更改吗?我很
以下区块
<VirtualHost *:80>
ServerName my.domain.com
# [...]
</VirtualHost>
就像在说 "this block will handle everything for http://my.domain.com"。您不能添加具有相同 port/ServerName 的另一个:它们不会合并,一个会覆盖另一个。
如果 https 部分已经工作并且您想将所有 http 流量重定向到 https,您完全可以 comment/remove 第一个 <VirtualHost *:80>
块(使用代理)。 <VirtualHost *:443>
中的代理规则将处理一切(假设 https 部分有效)。
如果您只想将部分内容重定向到 https(不是您的问题,但这应该有助于您理解它),您应该将 RewriteEngine
/ ReWriteCond
/ RewriteRule
指令 在现有的虚拟主机中。
好的,现在我得到了那个问题的解决方案。我在 /etc/httpd/conf.d/ssl.conf 的底部写了这行,在 VirtualHost 结束之前:
#Log
ErrorLog /var/log/ajp.error.log
CustomLog /var/log/ajp.log combined
#AJP configuration
<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>
ProxyRequests Off
ProxyPass / ajp://localhost:8009/
ProxyPassReverse / ajp://localhost:8009/