我有一个在apache tomcat上运行的java应用程序。我有以下重写规则。
<VirtualHost *:80>
ServerName www.mydomain.com
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/httpstatus https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
</VirtualHost>
出于某种原因,应用程序被重定向到Amazon Linux AMI测试页而不是我的应用程序。我假设上下文是条带化的,但我不是Linux专家,并且确实不知道。
什么会导致此错误?
答案 0 :(得分:1)
所以我把事情搞定了,但是我不确定这是问题的绝对正确答案。我的印象是URL只会被重定向到https,但请求仍会被转发到8080以上的tomcat。当我在应用程序的端口上输出时,它看到443.无论如何我的代码在下面。
不是像大多数网站所描述的那样将重写添加到/etc/httpd/conf/httpd.conf
,而是发现我必须将其添加到/etc/httpd/conf.d/elasticbeanstalk.conf
<VirtualHost *:80>
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass / http://localhost:8080/ retry=0
ProxyPassReverse / http://localhost:8080/
ProxyPreserveHost on
LogFormat "%h (%{X-Forwarded-For}i) %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\""
ErrorLog /var/log/httpd/elasticbeanstalk-error_log
TransferLog /var/log/httpd/elasticbeanstalk-access_log
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/httpstatus https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
ErrorLog /var/log/httpd/rewrite-error_log
TransferLog /var/log/httpd/rewrite-access_log
</VirtualHost>
答案 1 :(得分:0)
我遇到了同样的问题而且我绞尽脑汁!我首先要说你的文件有效。也就是说,在弹性beanstalk控制台上传/部署之后,我不得不采取额外的步骤:
SSH进入我的ec2实例并执行“sudo /etc/init.d/httpd restart”
我是一个菜鸟,所以我会在进行重新路由过程中分享我的想法/问题。
许多stackoverflow问题都有答案/评论说明ELB在重新路由后将无法进行运行状况检查。在添加页面status.html并将其添加到我的控制器后,我的上述规则似乎没问题。所以RewriteRule!/ status https://% {SER ....有效。
作为一个菜鸟,我想知道是否必须用我的实际服务器名称或我的网站www.example.com替换{SERVER_NAME} ...我没有。所以上面的线条很好。
This tutorial 帮助了很多人。您不必SSH并使用vim来修改elasticbeanstalk.conf。如果不是很明显,你的字面意思是创建一个名为“.ebextensions”的文件夹,这样,一旦创建了战争,你的.ebextensions文件夹就位于根目录(与你的META-INF和WEB-INF相同的水平)。 p>