如何在运行Docker实例的Amazon Elastic Beanstalk上更改nginx配置

18 浏览
0 Comments

如何在运行Docker实例的Amazon Elastic Beanstalk上更改nginx配置

登录后,设置了cookie后,我遇到了502错误。当我阅读日志时,我看到了以下错误:

014/05/17 01:54:43 [error] 11013#0: *8 upstream sent too big header while reading response

header from upstream, client: 83.248.134.236, server: , request: "GET /administration

HTTP/1.1", upstream:

我快速搜索后找到了以下解决方法:

http://developernote.com/2012/09/how-i-fixed-nginx-502-bad-gateway-error/

我想尝试将fastcgi_buffers和fastcgi_buffer_size设置为不同的值。但是如何在Amazon Elastic Beanstalk的nginx上设置变量呢?

nginx服务器位于我的docker实例之前。

0
0 Comments

问题出现的原因:作者在Amazon Elastic Beanstalk上运行一个Docker实例时,需要修改nginx配置文件。

解决方法:

1. 创建一个脚本,用于修改nginx配置文件(一般位于/etc/nginx/sites-enabled/elasticbeanstalk-nginx-docker.conf),并重启nginx服务(service nginx restart)。

2. 在nginx配置文件被写入后执行该脚本,而这个时间点是在正常的ebextensions执行完毕后。这是没有文档说明的,但Evan在这里分享了如何做到这一点:基本上你需要使用ebextension将脚本复制到一个在适当时间执行的挂钩目录中。

一个示例的ebextension配置文件.ebextensions/01modify_nginx.config如下:

container_commands:

copy:

command: "cp .ebextensions/01rewrite_nginx_config.py /opt/elasticbeanstalk/hooks/appdeploy/enact/"

make_exe:

command: "chmod +x /opt/elasticbeanstalk/hooks/appdeploy/enact/01rewrite_nginx_config.py"

作者在他的项目(这里)中成功地使用了这种方法。为了使脚本在合适的时间执行,作者不得不将编辑脚本从01rewrite_nginx_config.py重命名为12_rewrite_nginx_config。

0
0 Comments

问题出现的原因是作者想要在Amazon Elastic Beanstalk上的Docker实例中更改nginx配置。作者尝试了多种方法,但最终找到了一个解决方法。解决方法是编辑nginx部署文件的暂存版本,将其复制到正确的位置来覆盖原始文件。

解决方法的具体步骤如下:

1. 创建一个.ebextensions配置文件,用于替换nginx配置文件。

2. 将配置文件上传到S3存储桶中。

3. 在配置文件中使用AWS CLI命令将配置文件从S3复制到实例上的临时目录。

4. 使用命令将配置文件移动到正确的位置,覆盖原始文件。

5. 当每次部署时,配置文件将从S3复制到实例上。

作者提到,在命名配置文件时,唯一的限制是文件扩展名必须为.config。此外,作者还提到,如果不想使用S3,可以直接在配置文件中插入所有内容,但这样做可能不太灵活。

作者还问到是否可以使用/var/app/current目录中的文件,但其他用户回复说这种方法对他们来说不起作用。

总结起来,要在Amazon Elastic Beanstalk上的Docker实例中更改nginx配置,可以通过编辑暂存版本的nginx部署文件,并将自定义配置文件上传到S3,然后在部署过程中将其复制到实例上的正确位置来解决该问题。

0
0 Comments

在使用Amazon Elastic Beanstalk运行Docker实例时,有一种扩展Elastic Beanstalk nginx配置的方法是在.ebextensions目录中创建一个文件,例如nginx.config,内容如下:

files:

"/etc/nginx/conf.d/000_my_config.conf":

content: |

upstream nodejsserver {

server 127.0.0.1:8081;

keepalive 256;

}

server {

listen 8080;

location / {

proxy_pass http://nodejsserver;

proxy_set_header Connection "";

proxy_http_version 1.1;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

}

location /myconfig {

proxy_pass http://my_proxy_pass_host;

}

}

/etc/nginx/conf.d/000_my_config.conf是将在Elastic Beanstalk EC2实例上创建的文件名。默认情况下,此配置文件位于/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf。因此,如果使用000作为前缀,可以确保您的配置将首先被考虑。

内容是从默认的nginx配置文件/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf中复制的,然后根据自己的配置进行自定义。有一个重要的细节,如果不更改upstream的名称,将会收到Nginx的错误消息duplicate upstream "nodejs" in /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf:12。此外,您还需要登录到每个Beanstalk节点并手动删除000_my_config.conf文件。

为了删除文件,您可以在同一文件中添加一个命令部分:commands: 01remove_backup: command: rm -f [your file]

更多信息可以参考AWS官方文档:AWS article

0