gpt4 book ai didi

apache - 将 Elastic Beanstalk URL 重定向到域名

转载 作者:行者123 更新时间:2023-12-03 19:26:27 25 4
gpt4 key购买 nike

我有一个托管在 AWS Elastic Beanstalk 上的应用程序,它被分配了一个环境 URL,如下所示:<my-appname>.<aws-region>.elasticbeanstalk.com我也注册了一个域名:my-appname.com在 AWS Route 53 中,我有一个 A ALIAS指点 my-appname.com到 EB 环境,例如:my-appname.com > A ALIAS <my-appname>.<aws-region>.elasticbeanstalk.com从我的注册商那里,我设置了 Route 53 名称服务器以通过 Amazon 管理 DNS。
一切正常
我想了解如何做的是确保对 <my-appname>.<aws-region>.elasticbeanstalk.com> 的任何请求域获取 301去了 my-appname.com领域。
我正在使用 Apache RewriteRule当前将所有非 www 请求重定向到网站的 www 版本,在 .config 中使用它文件:

<If "'%{HTTP_HOST}' !~ /^www\./">
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</If>
简单地更改 HTTP_HOST 是否是一种好习惯?至 my-appname.com ?
编辑:无论如何,这种方法似乎不起作用。不知道为什么?

最佳答案

使用 Elastic Beanstalk (Amazon Linux 2) 和 Nginx 时,您有两种解决方案:
扩展 Elastic Beanstalk 默认的 nginx.conf
创建一个名为 .platform/nginx/conf.d/redirections.conf 的文件在包含以下内容的源代码中:

server {
server_name .elasticbeanstalk.com;
return 301 https://example.com$request_uri;
}
Nginx 文档: https://www.nginx.com/blog/creating-nginx-rewrite-rules/
(example.com 是您自己的域)
创建您自己的 nginx.conf 以替换 Elastic Beanstalk 中的默认设置
  • 复制原文内容/etc/nginx/nginx.conf通过使用 SSH (*) 连接到您的 Elastic Beanstalk EC2 实例
  • 创建一个名为 .platform/nginx/nginx.conf 的文件在您的源代码中并粘贴内容
  • 根据您的需要修改它并添加:
  • server {
    server_name .elasticbeanstalk.com;
    return 301 https://example.com$request_uri;
    }
    你应该得到一个 /etc/nginx/nginx.conf (取自 Amazon Linux 2 截至 2020/09/08)看起来像这样:
    # Elastic Beanstalk Nginx Configuration File

    user nginx;
    error_log /var/log/nginx/error.log warn;
    pid /var/run/nginx.pid;
    worker_processes auto;
    worker_rlimit_nofile 32136;

    events {
    worker_connections 1024;
    }

    http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';

    include conf.d/*.conf;

    map $http_upgrade $connection_upgrade {
    default "upgrade";
    }

    server {
    listen 80 default_server;
    access_log /var/log/nginx/access.log main;

    client_header_timeout 60;
    client_body_timeout 60;
    keepalive_timeout 60;
    gzip off;
    gzip_comp_level 4;
    gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

    # Include the Elastic Beanstalk generated locations
    include conf.d/elasticbeanstalk/*.conf;
    }

    # ADDED
    server {
    server_name .elasticbeanstalk.com;
    return 301 https://example.com$request_uri;
    }
    }

    更多关于 Nginx 配置
    同时,我还建议对您的 Nginx 配置进行其他修改。
    将 www 重定向到 root
    重定向示例 www.example.com到example.com。
    # .platform/nginx/conf.d/redirections.conf

    # https://stackoverflow.com/a/43089681
    # https://tribulant.com/docs/hosting-domains/hosting/9867/redirecting-to-www-or-non-www/
    # This can be done at the load balancer level but I prefer to do it here
    # Test this with `curl --head https://www.example.com` and `curl --head http://www.example.com`
    server {
    server_name www.example.com;
    return 301 https://example.com$request_uri;
    }
    先决条件:
  • AWS Certificate Manager (ACM):为 example.com 和 www.example.com 创建一个证书
  • Route 53:为example.com和www.example.com创建A记录到负载均衡器的路由

  • HTTP 安全 header
    为了安全起见,我建议设置这些 HTTP header :
    # .platform/nginx/conf.d/security_headers.conf

    # Remove Nginx version in error page and header
    server_tokens off;

    # Security headers thanks to https://observatory.mozilla.org/ and https://webpagetest.org/
    # Inspired by https://www.mozilla.org/ HTTP headers
    # https://gist.github.com/plentz/6737338
    # https://github.com/GetPageSpeed/ngx_security_headers
    add_header Content-Security-Policy "default-src 'self';
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";
    文件压缩(.js、.css、.html...)
    您可以使用 gzip on; 启用压缩.不幸的是 you cannot extend the default nginx.conf to enable compression .您必须复制粘贴并修改原始 nginx.conf ( .platform/nginx/nginx.conf )。
    注意:您可以拥有自己的 .platform/nginx/nginx.conf并且仍然使用 .platform/nginx/conf.d/ 中的文件目录。
    将 HTTP 重定向到 HTTPS
    2 solutions : 使用负载均衡器 (Application Load Balancer) 或自定义 .platform/nginx/nginx.conf .
    # .platform/nginx/nginx.conf

    ...

    server {
    listen 80 default_server;

    ...

    # ADDED
    # [AWS documentation - Configuring HTTP to HTTPS redirection](https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https-httpredirect.html)
    # https://github.com/awsdocs/elastic-beanstalk-samples/blob/9720e38e9da155752dce132a31d8e13a27364b83/configuration-files/aws-provided/security-configuration/https-redirect/nodejs/https-redirect-nodejs.config#L61
    # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto
    if ($http_x_forwarded_proto = "http") {
    return 301 https://example.com$request_uri;
    }

    ...
    }

    ...


    (*) 在您的 EC2 实例安全组中打开端口 22(类似于 *AWSEBSecurityGroup*),然后转到:
    EC2 > Instances > Connect > EC2 Instance Connect(基于浏览器的 SSH 连接)

    关于apache - 将 Elastic Beanstalk URL 重定向到域名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57121418/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com