ERR_TOO_MANY_REDIRECTS而使用服务器名www.example.com在httpd



所以基本上我写了一个代码来重定向我所有的http(:80)请求到https(:443),https-redirect.conf:

<VirtualHost *:80>
ServerName example.com
#ServerAlias *example.com
Redirect permanent / https://www.example.com/
# LogLevel debug
# ErrorLog /etc/httpd/logs/error_http.log
# CustomLog /etc/httpd/logs/error_http.log combined
</VirtualHost>

一开始确实有效,例如,当有人输入example.com时,它会重定向到https://www.example.com但是当有人输入www.example.com时,它会重定向到http://www.example.com而不是https

所以为了克服这个问题,我使用了ServerAlias *example.com(甚至ServerName www.example.com)在这里它确实工作,但我最终得到ERR_TOO_MANY_REDIRECTS有谁能帮帮我吗?我到处都找不到合适的解释。我甚至试图找到潜在的循环,但没有成功。reverse-proxy.conf:

<VirtualHost *:80>
ServerName example.com
ServerAlias *example.com
ProxyPreserveHost On
ProxyRequests Off
AllowEncodedSlashes NoDecode
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
RequestHeader set X-Forwarded-Proto http
RequestHeader set X-Forwarded-Port 80
ProxyPass "/" "http://example_ip:8080/"
ProxyPassReverse "/" "http://example_ip:8080/"
LogLevel debug
ErrorLog /etc/httpd/logs/error.log
CustomLog /etc/httpd/logs/error.log combined
</VirtualHost>

上面的代码是将:8080请求重定向到:80

的代码

首先,你应该使用

ServerAlias *.example.com

不是

ServerAlias *example.com

因为你想重定向你的三级域名,而不是所有到达你的web服务器以'example.com'结尾。

当你创建重定向时,你需要确保有一个"排除";避免任何循环的条件:你重定向到的url,不应该触发重定向本身,否则它会创建一个循环,导致你现在面临的相同的错误(ERR_TOO_MANY_REDIRECTS)。此错误在重定向20次后发生。

你检查运行在端口443上的应用程序是否没有重定向回http吗?你应该使用带有'-v'选项的curl来确保不会发生这种情况。

最后,"proxyPass"one_answers";proxyPassRevers"当您希望您的服务器充当代理,以让客户端连接到托管在不能公开访问的服务器上的资源或可能被防火墙的端口上时,使用

你的配置说"当有人在example.com上请求/时,向他显示在example.com ip后面的服务器的8080端口上运行的应用程序的内容"。如果apache用公共ip解析"example.com",您的apache将尝试在端口8080上联系该ip(可能不是他自己的私有ip)。根据您的网络配置方式,这可能会起作用,或者需要一些防火墙策略。为了避免这种情况,你可以使用在8080端口上运行应用程序的私有ip或一个内部域名apache可以解析到正确的ip地址,如果你需要联系的端点保留原始主机名(即www.example.com)你应该启用'ProxyPreserveHost'。

相关内容

最新更新