Apache重写重定向到Amazon Linux AMI测试页面

时间:2014-11-11 21:38:42

标签: apache tomcat mod-rewrite amazon-web-services url-rewriting

我有一个在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专家,并且确实不知道。

什么会导致此错误?

2 个答案:

答案 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 ....有效。

  • 转到EC2信息中心&gt;&gt; “负载平衡器”(左侧)&gt;&gt; [运行状况检查]标签&gt;&gt; [编辑健康检查按钮]&gt;&gt;下拉到http并在“ping path”框中输入“/ status”。 (“状态”可以是您想要的任何内容,只要它是您应用程序/网站中始终可访问的页面“..我只是在我的status.html中放入一些文本) =我认为上述内容非常重要,因为在完成此操作时并不是很明显,而且AWS文档中的图片并未反映出它今天的样子。

作为一个菜鸟,我想知道是否必须用我的实际服务器名称或我的网站www.example.com替换{SERVER_NAME} ...我没有。所以上面的线条很好。

This tutorial 帮助了很多人。您不必SSH并使用vim来修改elasticbeanstalk.conf。如果不是很明显,你的字面意思是创建一个名为“.ebextensions”的文件夹,这样,一旦创建了战争,你的.ebextensions文件夹就位于根目录(与你的META-INF和WEB-INF相同的水平)。 p>