检测www。使用sed

问题描述 投票:-1回答:1

我是sed的新手,几乎感到困惑。这是我在项目的nginx文件夹中的内容:

files:
 "/tmp/45_nginx_https_rw.sh":
owner: root
group: root
mode: "000644"
content: |
  #! /bin/bash

  CONFIGURED=`grep -c "return 301 https" /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf`

  if [ $CONFIGURED = 0 ]
    then
      sed -i '/listen 8080;/a \    if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }\n' /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
      logger -t nginx_rw "https rewrite rules added"
      exit 0
    else
      logger -t nginx_rw "https rewrite rules already set"
      exit 0
  fi

上面的代码就像一个魅力,如果它们是http请求,基本上将所有请求重定向到https。但是,我需要添加一个片段来检查网址是否有www并重定向到非www。例如,www.test.com将被重定向到test.com。

我怎样才能做到这一点?

amazon-web-services sed amazon-elastic-beanstalk
1个回答
1
投票

AWS建议的解决方案是完全重写“/etc/nginx/sites-available/elasticbeanstalk-nginx-docker-proxy.conf”

您可以通过在.ebextensions:https://github.com/awsdocs/elastic-beanstalk-samples/blob/master/configuration-files/aws-provided/security-configuration/https-redirect/docker-sc/https-redirect-docker-sc.config中添加此文件来完成此操作

我为www重定向做了一个额外的调整:

           location / {
               set $redirect 0;
               if ($http_x_forwarded_proto != "https") {
                 set $redirect 1;
               }
               if ($host ~ ^www\.(?<domain>.+)$) {
                 set $redirect 1;
               }
               if ($http_user_agent ~* "ELB-HealthChecker") {
                 set $redirect 0;
               }
               if ($redirect = 1) {
                 return 301 https://ADDYOURDOMAINREDIRECTHERE$request_uri;
               }

*还有一点需要注意,你的ec2实例可能已经有一堆你在寻找解决方案时尝试过的配置文件。我建议在.ebextensions中使用NO配置部署您的应用程序,然后从ELB控制台部署Rebuild Environment。这应该给你一个空白的石板。然后只需将上面的文件添加到.ebextensions并重新部署。

*另一个注意事项,您可以ssh到您的ec2实例并验证该文件是否正确

© www.soinside.com 2019 - 2024. All rights reserved.