Elastic Beanstalk - 升级后替换 .htaccess 为 nginx

Posted

技术标签:

【中文标题】Elastic Beanstalk - 升级后替换 .htaccess 为 nginx【英文标题】:Elastic Beanstalk - replace .htaccess for nginx after upgrade 【发布时间】:2021-08-07 11:26:26 【问题描述】:

我将我的 php Elastic Beanstalk 实例从 Amazon Linux 2/3.2.1 升级到 Amazon Linux/2.9.17

在以前的版本中,我的包中有一个 .htaccess 文件,以便删除 URL 中的文件扩展名,如下所示:

www.example.com/page.php?var=123 变为 www.example.com/page?var=123

升级后,www.example.com/page.php?var=123 工作正常,但www.example.com/page?var=123 不工作。结果,我的应用中的导航被破坏了。

我从other stack overflow questions 了解到,随着这次 Elastic Beanstalk 平台的升级,Apache 被 nginx 取代,这就是不再考虑 .htaccess 的原因。

我对 nginx 的了解为零,所以我尝试在网上研究如何在 nginx 上应用相同的行为。但是我所做的没有工作。看看下面我做了什么:

我在 .ebextensions\nginx\conf.d\myconf.conf 中创建了一个新的配置文件

这是文件的内容:

server 
      location / 
          try_files $uri $uri.html $uri/ @extensionless-php;
          index index.html index.htm index.php;
      

      location ~ \.php$ 
          try_files $uri =404;
      

      location @extensionless-php 
          rewrite ^(.*)$ $1.php last;
      
  

我是否只应用了文件中所需的部分配置内容?

【问题讨论】:

你试过用apache吗? PHP paltform 仍然支持 apache,但它不是默认选项。您必须启用它,如docs 所示。 @Marcin 是的,它适用于 Apache,谢谢。我认为最好遵循亚马逊的方法来获得长期支持。但现在这个选项很好。 没问题。如果您不介意,我会提供答案。 【参考方案1】:

基于 cmets。

Amazon Linux 2 EB 平台默认使用 nginx。但是,Tomcat、Node.js、PHP 和 Python 执行 also support Apache。由于此选项不是默认选项,因此您必须在 .ebextentions启用它:

option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache

【讨论】:

我没有将此答案标记为已接受,因为它没有为原始问题提供解决方案,但它是一个很好的解决方法

以上是关于Elastic Beanstalk - 升级后替换 .htaccess 为 nginx的主要内容,如果未能解决你的问题,请参考以下文章

替换 AWS Elastic BeanStalk 上的特定实例?

升级 Ruby on Python Elastic Beanstalk 实例

Elastic Beanstalk 滚动环境配置更新

通过ebextensions在aws elastic beanstalk中用nginx替换apache

自动部署 Elastic Beanstalk 更改

Spring Boot版本升级-在aws elastic beanstalk中部署时出现mysql错误