如何在 AWS Elastic Beanstalk 上修改 Nginx 配置
Posted
技术标签:
【中文标题】如何在 AWS Elastic Beanstalk 上修改 Nginx 配置【英文标题】:How to amend Nginx config on AWS Elastic Beanstalk 【发布时间】:2015-11-27 18:12:55 【问题描述】:我正在尝试为我的 Elastic Beanstalk 部署修改 Nginx 配置。默认配置是:-
upstream nodejs
server 127.0.0.1:8081;
keepalive 256;
server
listen 8080;
if ($time_iso8601 ~ "^(\d4)-(\d2)-(\d2)T(\d2)")
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
access_log /var/log/nginx/access.log main;
location /
proxy_pass http://nodejs;
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;
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
我尝试将其他命令添加到位置节点:-
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
我最初尝试将以下内容添加到我的.ebextensions
:-
files:
"/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf" :
mode: "000644"
owner: root
group: root
content: |
upstream nodejs
server 127.0.0.1:8081;
keepalive 256;
server
listen 8080;
if ($time_iso8601 ~ "^(\d4)-(\d2)-(\d2)T(\d2)")
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
access_log /var/log/nginx/access.log main;
location /
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
但是,在通过 SSH 连接到 EC2 实例时,我可以看到该文件与原始文件没有任何变化。然后我做了一些更多的研究,建议在/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
被部署 .ebextensions
文件运行之后。
-
http://finik.net/2014/10/29/Beanstalk/
Nginx config file overwritten during Elastic Beanstalk deployment?
所以我尝试了以下方法:-
files:
"/tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf" :
mode: "000755"
owner: root
group: root
content: |
upstream nodejs
server 127.0.0.1:8081;
keepalive 256;
server
listen 8080;
if ($time_iso8601 ~ "^(\d4)-(\d2)-(\d2)T(\d2)")
set $year $1;
set $month $2;
set $day $3;
set $hour $4;
access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
access_log /var/log/nginx/access.log main;
location /
proxy_pass http://nodejs;
proxy_set_header Connection "";
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
gzip on;
gzip_comp_level 4;
gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
再次,在通过 SSH 连接到实例时,我可以看到 /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
或 /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf
都没有被修改。
所以现在我很困。我有哪些选择?
【问题讨论】:
.ebextensions
格式为 YAML 或 JSON。而且,您的配置格式是 YAML。 YAML 需要正确的缩进。在上面的配置中,缩进看起来是错误的(files:
和 "/etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf" :
不应该在同一个缩进中)。
【参考方案1】:
有效的是编写一个 sed 脚本来更新 00_elastic_beanstalk_proxy.conf
文件(通过搜索和替换)并在 container_command
挂钩处运行所述脚本。
您可以拥有这样的.ebextensions
文件:
files:
/tmp/deployment/custom_mod_nginx.sh:
mode: "000755"
content: |
sed -i 's/proxy_http_version 1.1;/ proxy_http_version 1.1;\n chunked_transfer_encoding off;\n proxy_buffering off;\n proxy_cache off;\n/' /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf
container_commands:
nginx_real_ip:
command: "/tmp/deployment/custom_mod_nginx.sh"
这将创建一个名为custom_mod_nginx.sh
的脚本(你可以使用你想要的名称)。该脚本在 beanstalk 部署配置后执行。
【讨论】:
这是目前唯一可以修改/tmp/deployment/config/#etc#nginx#nginx.conf
文件的解决方案。以上是关于如何在 AWS Elastic Beanstalk 上修改 Nginx 配置的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AWS Elastic Beanstalk 上修改 Nginx 配置
如何在 AWS Elastic Beanstalk 上设置 HTTPS
如何在 AWS Elastic Beanstalk 上设置 HTTPS
如何在 AWS Elastic Beanstalk 中更改数据库配置