如何在部署应用程序 Elastic beanstalk 上修改 NGINX 配置
Posted
技术标签:
【中文标题】如何在部署应用程序 Elastic beanstalk 上修改 NGINX 配置【英文标题】:How to modify NGINX configuration on Deploying app Elastic beanstalk 【发布时间】:2020-09-29 15:00:44 【问题描述】:我需要向 nginx.conf 添加一些位置,以便环境 URL 指向 app.php。我已经使用 vi 修改了文件。重新启动 NGINX 就可以了。但是我需要在使用 eb deploy 时自动加载此配置。
我已阅读并尝试过: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.html
Elasticbeanstalk configuring HTTPS on Single Instance of Python: null values are not allowed in templates
How to configure .ebextensions for nginx location directive?
Amazon Elastic Beanstalk ebextension
我有 /.ebextensions/01_nginx.config
files:
"/etc/nginx/nginx.conf":
mode: "0000644"
owner: root
group: root
content: |
My conf file
但该配置不起作用。我尝试通过“/etc/nginx/my_nginx.conf”更改“/etc/nginx/nginx.conf”:文件出现了!所以我尝试用我的自定义文件替换默认文件:
container_commands:
deleteConf:
command: "sudo rm /etc/nginx/nginx.conf"
changeConf:
command: "sudo cp /etc/nginx/my_nginx.conf /etc/nginx/nginx.conf"
放置在 01_nginx.config 中先前配置的下方。但是命令不起作用。 nginx.conf 没有被我的删除或替换。我做错了什么?
编辑:我读过 .ebextensions 中的文件是按字母顺序评估的。我想知道是否可能在文件存在之前执行了复制命令。所以我创建了一个新文件 /.ebextensions/02_copy.config 并移到那里
container_commands:
deleteConf:
command: "sudo rm /etc/nginx/nginx.conf"
changeConf:
command: "sudo cp /etc/nginx/my_nginx.conf /etc/nginx/nginx.conf"
不走运
【问题讨论】:
这是一个非常常见的问题,在 elasticbean 文档中的记录很差。对于@guimauve 下面的 TLDR 答案,隐藏的文档是他的amazon extended configuration for AMI 2 【参考方案1】:这个答案适用于 Linux 2。 我花了一整天的时间试图解决这个问题,主要是因为我试图使用旧方法,没有意识到 Linux 2 的情况发生了变化。然后我找到了 guimauve 的答案,但它对我不起作用。看完AWS官方文档https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html 我发现没有必要在 .platform/hooks/deploy 中创建脚本。您只需要在 .platform 中创建一个 nginx 目录并将更新的 nginx.conf 放在那里。第一次尝试这种方法,nginx.conf 被成功覆盖,但我的调用仍然超时。然后我补充说:
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
在 nginx.conf 的服务器部分,它工作了!呼叫完成,没有超时。
【讨论】:
澄清一下:这是 Amazon Linux 2?并且添加在 nginx.conf 中? 太棒了!感谢分享:)【参考方案2】:在部署了一整天尝试修改nginx.conf后,直接在/etc/nginx/中创建自定义nginx.conf > 通过 .ebextensions 中的 .config 文件对我不起作用,因为它会被默认文件系统地覆盖。
当我在 /tmp 中创建自定义文件并编写一个替换 /etc/nginx/nginx.conf 的 container_command 时,发生了同样的事情>.
您实际上需要创建一个脚本,该脚本将在 部署后、在 elastic beanstalk 写入所有文件之后执行。
如果您使用的是 Amazon Linux 1 环境:
来源:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/custom-platform-hooks.html
要在部署后执行任何脚本,请将以下代码放入 .ebextensions
根目录的 .config 文件中01_write_custom_ng_conf.config
-
创建一个目录来存储您的脚本。
commands:
create_post_dir:
command: "mkdir /opt/elasticbeanstalk/hooks/appdeploy/post"
ignoreErrors: true
-
创建修改后的 nginx.conf 文件并将其放在 /tmp 中。
files:
"/tmp/custom_nginx.conf":
mode: "000644"
owner: root
group: root
content: |
# your .conf file
-
创建一个脚本,将原始 nginx.conf 替换为您在步骤 1 创建的 /opt/elasticbeanstalk/hooks/appdeploy/post 中的自定义脚本。这应该部署后自动执行。
"/opt/elasticbeanstalk/hooks/appdeploy/post/update_ng_conf.sh":
mode: "000644"
owner: root
group: root
content:
#!/usr/bin/bash
sudo mv /tmp/custom_nginx.conf /etc/nginx/nginx.conf
如果您使用的是 Amazon Linux 2 环境:
来源:https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/platforms-linux-extend.html
脚本现在从 .platform 中的子文件夹执行,您必须将其放在项目的根目录中,如下所示:
~/your-app/
|-- someFile.py
|-- Procfile
|-- readme.md
|-- .ebextensions/
| |-- 01_write_custom_ng_conf.config
`-- .platform/
|-- hooks
`-- postdeploy
`-- 01_update_ng_conf.sh # Executed post deployment
在 .ebextensions 的根目录下创建一个 .config 文件。
01_write_custom_ng_conf.config
创建修改后的 nginx.conf 文件并将其放在 /tmp 中。
files:
"/tmp/custom_nginx.conf":
mode: "000644"
owner: root
group: root
content: |
# your .conf file
在 .platform/hooks/postdeploy 中创建一个小脚本并将权限更改为 755。
01_update_ng_conf.sh
#!/usr/bin/bash
# Replace the original nginx.conf by our custom one
sudo mv /tmp/custom_nginx.conf /etc/nginx/nginx.conf
# Restart nginx to apply modifications
sudo service nginx restart
这对我来说在 Amazon Linux 2 Python 3.7 环境上工作得很好。不确定你的,但这应该是一样的。
确保您的 .config 文件缩进完美,因为解析器并不总是检测到错误并且代码不会被执行。
【讨论】:
我放弃了这样做。我需要部署应用程序,所以我做了不同的事情。但是当我尝试这个时,我没有达到文档的那个钩子部分。它适用于@nikhilswami,所以我会接受答案。谢谢! 虽然这是公认的答案,但这不是在 Amazon Linux 2 上执行此操作的方法。有关正确方法,请参阅 AWS docs(“反向代理配置”部分),即.platform/nginx/
中的 nginx 配置文件(在您的源包中)。以上是关于如何在部署应用程序 Elastic beanstalk 上修改 NGINX 配置的主要内容,如果未能解决你的问题,请参考以下文章
如何在部署时使用 Elastic Beanstalk 指定敏感环境变量
如何在部署应用程序 Elastic beanstalk 上修改 NGINX 配置
如何使用 aws cli 在 Elastic Beanstalk 上上传和部署?
发生故障时如何查看 AWS Elastic Beanstalk 部署过程日志