gpt4 book ai didi

nginx - 如何为 nginx 位置指令配置 .ebextensions?

转载 作者:行者123 更新时间:2023-12-04 13:16:33 33 4
gpt4 key购买 nike

我想在 Elastic Beanstalk 中配置我的暂存环境以始终禁止所有蜘蛛。 nginx 指令如下所示:

location /robots.txt {
return 200 "User-agent: *\nDisallow: /";
}

我知道我想在 .ebextensions/文件夹下创建一个文件,例如 01_nginx.config,但我不确定如何在其中构建 YAML 以使其正常工作。我的目标是将此位置指令添加到现有配置中,而不必完全替换任何现有的配置文件。

最佳答案

我想做同样的事情。经过大量挖掘,我找到了两种方法:

选项 1. 使用 ebextension 将 nginx 配置文件替换为您的自定义配置

我使用这个选项是因为它是最简单的一个。

遵循亚马逊在 Using the AWS Elastic Beanstalk Node.js Platform - Configuring the Proxy Server - Example .ebextensions/proxy.config 中给出的示例,我们可以看到他们创建了一个 ebextension,它创建了一个名为 的文件。/etc/nginx/conf.d/proxy.conf .该文件包含与原始 nginx 配置文件相同的内容。然后,他们使用 删除原始的 nginx 配置文件。容器命令 .

您需要将 Amazon 示例替换为当前 nginx 配置文件的内容。注意container命令中要删除的nginx配置文件也必须更新。我用过的有:

  • nginx 配置文件 1 :/opt/elasticbeanstalk/support/conf/webapp_healthd.conf
  • nginx 配置文件 2 :/etc/nginx/conf.d/webapp_healthd.conf

  • 因此,对我有用的最终 ebextension 如下:

    /.ebextensions/nginx_custom.config

    # Remove the default nginx configuration generated by elastic beanstalk and
    # add a custom configuration to include the custom location in the server block.
    # Note that the entire nginx configuration was taken from the generated /etc/nginx/conf.d/webapp_healthd.conf file
    # and then, we just added the extra location we needed.

    files:
    /etc/nginx/conf.d/proxy_custom.conf:
    mode: "000644"
    owner: root
    group: root
    content: |
    upstream my_app {
    server unix:///var/run/puma/my_app.sock;
    }

    log_format healthd '$msec"$uri"'
    '$status"$request_time"$upstream_response_time"'
    '$http_x_forwarded_for';

    server {
    listen 80;
    server_name _ localhost; # need to listen to localhost for worker tier

    if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
    set $year $1;
    set $month $2;
    set $day $3;
    set $hour $4;
    }

    access_log /var/log/nginx/access.log main;
    access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;

    location / {
    proxy_pass http://my_app; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /assets {
    alias /var/app/current/public/assets;
    gzip_static on;
    gzip on;
    expires max;
    add_header Cache-Control public;
    }

    location /public {
    alias /var/app/current/public;
    gzip_static on;
    gzip on;
    expires max;
    add_header Cache-Control public;
    }

    location /robots.txt {
    return 200 "User-agent: *\nDisallow: /";
    }
    }

    container_commands:
    # Remove the default nginx configuration generated by elastic beanstalk
    removeconfig:
    command: "rm -f /opt/elasticbeanstalk/support/conf/webapp_healthd.conf /etc/nginx/conf.d/webapp_healthd.conf"

    部署此更改后,您必须重新加载 nginx 服务器。您可以使用 连接到您的服务器eb ssh 你的环境名称 然后运行 ​​ sudo 服务 nginx 重新加载

    选项 2. 使用 ebextension 修改 nginx 配置文件生成器,使其在最终的 nginx 配置文件中包含您的自定义位置

    第二个选项基于这篇文章: jabbermarky's answer in Amazon forums

    他在他的回答中很好地解释了这个方法,所以如果你想实现它,我鼓励你阅读它。如果要实现此答案,则需要更新 nginx 文件配置生成器的位置。

    请注意,我尚未测试此选项。

    综上所述,他添加了一个shell脚本,在nginx配置文件生成之前执行。在这个 shell 脚本中,他修改了 nginx 配置文件生成器,以在生成的 nginx 配置文件中包含他想要的服务器块位置。最后,他在最终 nginx 配置文件的 server 块中添加了一个包含他想要的位置的文件。

    关于nginx - 如何为 nginx 位置指令配置 .ebextensions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21335575/

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