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:1config/environments/production.rb

config.force_ssl = true 更改为config.force_ssl = 'web'.eql?(ENV.fetch('EB_ENV', 'web'))

STEP:2Web ENV 定义 EB_ENV环境变量为 web 或为 Worker ENV 定义 worker/whatever you like >

谢谢朋友!非常感谢。

【讨论】:

以上是关于AWS Beanstalk - nginx 强制 SSL 配置更改后,Worker env 不处理后台作业的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Beanstalk 环境中覆盖 nginx

AWS Beanstalk IIS 实例和强制 SSL

AWS弹性Beanstalk / nginx:connect()失败(111:连接被拒绝

如何在 AWS Elastic Beanstalk 上修改 Nginx 配置

AWS Elastic Beanstalk:nginx 重新加载失败

AWS Elastic Beanstalk NGINX 配置不起作用