AWS EC2 EB 上的 .htaccess 在哪里

Posted

技术标签:

【中文标题】AWS EC2 EB 上的 .htaccess 在哪里【英文标题】:Where is .htaccess on AWS EC2 EB 【发布时间】:2017-11-14 00:50:45 【问题描述】:

我有一个运行 Elastic Beanstalk 的 EC2 实例。我想启用 GZIP 压缩,我知道我需要修改我的 .htaccess 文件。

我读到.htaccess 文件位于我的应用安装根文件夹中。但是,我似乎找不到它。 (我很新手,不知道根文件夹在哪里)。

我能够通过一个 Java 8 应用 ssh 到运行 Apache Tomcat 8 的服务器上。

问题

.htaccess 在哪里?

这就是我的根目录:

$ ls
bin   cgroup  etc   lib    local       media  opt   root  sbin     srv  tmp  var
boot  dev     home  lib64  lost+found  mnt    proc  run   selinux  sys  usr

更新

我有一个 .ebextensions/tomcat-settings.config 现在可以了。它启用 GZip 压缩。

option_settings:
  aws:elasticbeanstalk:environment:proxy:
    GzipCompression: 'true'
    ProxyServer: nginx
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /pub: public

这似乎并没有压缩.svg 文件。所以如果可能的话,我想有以下,但不知道在哪里添加它:

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType image/svg "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

【问题讨论】:

我不熟悉 beanstalk 但尝试将 -a 开关添加到 ls 因为 .htaccess 是一个隐藏文件。 ls -a 允许您查看所有文件,包括隐藏文件。 【参考方案1】:

您需要上传 .htaccess 文件或将其放在您上传应用程序的根文件夹中的 ec2 实例中,如果您使用的是 elastick beanstalk,则需要将 .htaccess 文件添加到根目录下的 .zip 文件中文件夹

【讨论】:

您好 Brayan,感谢您的建议。我将.htaccess 添加到src/main/webapp 的根目录中。这意味着当我执行mvn install 时,它会构建到我的war 文件的根目录。然后部署到 Tomcat 服务器。但是当我测试页面时,它没有被压缩。当我ssh 进入服务器时,我在./tmp/deployment/application/ROOT/.htaccess 找到它。 (我将以下内容添加到我的.htaccess 文件中:clayharmon.com/words/posts/enabling-gzip-compression-on-ec2)。你知道为什么它不压缩页面吗? 我遵循了以下建议,它对我有用。 (将tomcat-settings.config 文件添加到webapp 根目录)docs.aws.amazon.com/elasticbeanstalk/latest/dg/…【参考方案2】:

您如何通过 ssh 或 .ebextensions 文件配置 ec2 实例? 如果您通过 ssh 配置实例并且您使用的是弹性环境,那么当实例降级或更改时配置将被删除,如果您仅通过 ec2 使用一个实例,则配置继续工作。

如果你需要通过 .ebextensions 配置它,你需要在你的 .zip 文件中创建一个名为 .ebextensions 的文件夹,在这个文件夹中你需要创建两个名为 enable_mod_deflate.conf 和 myapp.config 的文件。

enable_mod_deflate.conf 的内容:

  # mod_deflate configuration
  <IfModule mod_deflate.c>
  # Restrict compression to these MIME types
  AddOutputFilterByType DEFLATE text/plain
  AddOutputFilterByType DEFLATE text/html
  AddOutputFilterByType DEFLATE application/xhtml+xml
  AddOutputFilterByType DEFLATE text/xml
  AddOutputFilterByType DEFLATE application/xml
  AddOutputFilterByType DEFLATE application/xml+rss
  AddOutputFilterByType DEFLATE application/x-javascript
  AddOutputFilterByType DEFLATE text/javascript
  AddOutputFilterByType DEFLATE text/css
  AddOutputFilterByType DEFLATE image/png
  AddOutputFilterByType DEFLATE image/gif
  AddOutputFilterByType DEFLATE image/jpeg

  # Level of compression (Highest 9 - Lowest 1)
  DeflateCompressionLevel 9

  # Netscape 4.x has some problems.
  BrowserMatch ^Mozilla/4 gzip-only-text/html

  # Netscape 4.06-4.08 have some more problems
  BrowserMatch ^Mozilla/4\.0[678] no-gzip

  # MSIE masquerades as Netscape, but it is fine
  BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

  <IfModule mod_headers.c>
  # Make sure proxies don't deliver the wrong content
  Header append Vary User-Agent env=!dont-vary
  </IfModule>

  </IfModule>

myapp.config 的内容:

  container_commands:
      01_setup_apache:
          command: "cp .ebextensions/enable_mod_deflate.conf /etc/httpd/conf.d/enable_mod_deflate.conf"

那你需要重启服务器。

【讨论】:

您好 Brayan,感谢您的全面回答。我已经有一个.ebextensions/tomcat-settings.config 文件,它可以成功地进行 GZip 压缩(参见上面的更新)。因此,我按照您上面的建议添加了enable_mod_deflate.confmyapp.config。但是,当我在我的网站 (www.thewhozoo.com) 上运行 Google PageSpeed Insights 时,我没有得到任何改进。

以上是关于AWS EC2 EB 上的 .htaccess 在哪里的主要内容,如果未能解决你的问题,请参考以下文章

针对 AWS Elastic Search HTTP 请求在 EB 上对 EC2 进行身份验证

AWS:使用 Elastic Beanstalk 命令行界面 (EB CLI) 3.x SSH 到 EC2

AWS EB CLI Django

你能从 EC2 或 EB 应用程序中提取数据吗?

如何使用 EB cli 查看我的 EB ec2 的 python 日志

AWS Elasticbeanstalk 部署错误