AWS Beanstalk - nginx 强制 SSL 配置更改后,Worker env 不处理后台作业
Posted
技术标签:
【中文标题】AWS Beanstalk - nginx 强制 SSL 配置更改后,Worker env 不处理后台作业【英文标题】:AWS Beanstalk - Worker env is not processing background jobs after nginx force SSL config changes 【发布时间】:2018-10-18 09:09:34 【问题描述】:我正在开发一个 Ruby on Rails
应用程序,它部署在 AWS Beanstalk 上。我的 Beanstalk 应用程序有两个环境:
- Web Env
- config:
- Ruby 2.4.3
- Rails 5.1.4
- Puma as App server
- nginx as Web Server
- Uses active_elastic_job
- Worker Env
- config:
- Ruby 2.4.3
- Rails 5.1.4
- Puma as App server
- Nginx as Web server
- Uses Amazon - SQS
- Uses active_elastic_job
Envs
都使用相同的存储库/代码库,并且我的应用程序已完全配置。
上周,我知道我的应用程序没有强制重定向到https
。虽然,我可以使用https
访问我的网站,但是当通过http
访问或通过域名直接访问时不会将我重定向到安全网站。
我遇到了这个链接https://gist.github.com/petelacey/e35c98f9a35063a89fa9,在使用.ebextensions
在Web Env 上部署这个文件后,我现在可以重定向到https
--- 到这里没问题
但是,当我尝试将相同的 Running 版本 部署到我的 Worker Env 时,我的后台作业已停止工作
为了解决这个问题,我ssh
进入我的 Worker 环境并检查了以下文件:
/var/log/nginx/error.log
-- 未发现任何可疑情况
/var/log/puma/puma.log
-- 未发现任何可疑情况
/var/log/aws-sqsd/default.log
-- 我看到很多http-err
/var/log/amazon/ssm/errors.log
2018-05-08 11:28:19 ERROR [HandleAwsError @ awserr.go.48] [instanceID=i-YYYYYYYYYY] [MessagingDeliveryService] [Association] error when calling AWS APIs. error details - AccessDeniedException: User: arn:aws:sts::XXXXXXXXXX:assumed-role/role/i-YYYYYYYYYY is not authorized to perform: ssm:ListInstanceAssociations on resource: arn:aws:ec2:us-east-1:XXXXXXXXXX:instance/i-YYYYYYYYYY
status code: 400, request id: ''
2018-05-08 11:28:19 ERROR [HandleAwsError @ awserr.go.48] [instanceID=i-YYYYYYYYYY] [MessagingDeliveryService] [Association] error when calling AWS APIs. error details - AccessDeniedException: User: arn:aws:sts::XXXXXXXXXX:assumed-role/aws-elasticbeanstalk-ec2-role/i-YYYYYYYYYY is not authorized to perform: ssm:ListAssociations on resource: arn:aws:ssm:us-east-1:XXXXXXXXXX:*
status code: 400, request id: ''
2018-05-08 11:28:19 ERROR [ProcessAssociation @ processor.go.157] [instanceID=i-YYYYYYYYYY] [MessagingDeliveryService] [Association] Unable to load instance associations, unable to retrieve associations unable to retrieve associations AccessDeniedException: User: arn:aws:sts::XXXXXXXXXX:assumed-role/aws-elasticbeanstalk-ec2-role/i-YYYYYYYYYY is not authorized to perform: ssm:ListAssociations on resource: arn:aws:ssm:us-east-1:XXXXXXXXXX:*
status code: 400, request id: ''
在滚动这个 nginx 代理文件之前,一切正常。我不确定我做错了什么?
我正在尝试的两件事:
-
使用我拥有的旧
proxy.conf
文件手动覆盖我的工作环境上的 /etc/nginx/conf.d/proxy.conf
。
重启nginx看job/s是否恢复正常
但我想在这里指出几点:
-
两个 ENV 不应该使用相同的 Running 版本吗?
如果我的上述方法有效,这意味着我将在不同的 ENV 上拥有 2 个不同的代理文件。将来,如果我部署到我的工人 ENV,它将覆盖自定义的。可以跳过吗?
提前感谢您的帮助!
【问题讨论】:
【参考方案1】:我得到了解决方案。我的朋友告诉我按以下方式处理:
STEP:1 在config/environments/production.rb
将config.force_ssl = true
更改为config.force_ssl = 'web'.eql?(ENV.fetch('EB_ENV', 'web'))
STEP:2 为 Web ENV 定义 EB_ENV
环境变量为 web
或为 Worker ENV 定义 worker
/whatever you like >
谢谢朋友!非常感谢。
【讨论】:
以上是关于AWS Beanstalk - nginx 强制 SSL 配置更改后,Worker env 不处理后台作业的主要内容,如果未能解决你的问题,请参考以下文章
AWS弹性Beanstalk / nginx:connect()失败(111:连接被拒绝
如何在 AWS Elastic Beanstalk 上修改 Nginx 配置