Forcing https in elasticbeanstalk with certificate from ACM

后端 未结 1 1693
花落未央
花落未央 2021-01-13 07:12

I have provisioned a scalable EB(Elasticbeanstalk) rails(puma) instance. I have applied for https through ACM(Amazon Certificate Manager) and applied it to my load balancer.

相关标签:
1条回答
  • 2021-01-13 07:59

    The current AWS EB Rails and Node.js setups both use nginx (if your web server is apache see this answer), so the following should work (adapted from this question):

    Create the file .ebextensions/01-force-https.config (the .config is important, not .conf) with the following content.

    If your environment is a single instance:

    files:
      "/etc/nginx/conf.d/01-force-https.conf":
        owner: root
        group: root
        mode: "000644"
        content: |
          server {
              listen 8080;
              return 301 https://$host$request_uri;
          }
    

    If your environment is load balanced, you unfortunately cannot simply add to the existing config but need to modify it with sed:

    files:
      "/tmp/45_nginx_https_rw.sh":
        owner: root
        group: root
        mode: "000644"
        content: |
          #! /bin/bash
    
          CONFIGURED=`grep -c "return 301 https" /opt/elasticbeanstalk/support/conf/webapp_healthd.conf`
    
          if [ $CONFIGURED = 0 ]
            then
              sed -i '/listen 80;/a \    if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }\n' /opt/elasticbeanstalk/support/conf/webapp_healthd.conf
              logger -t nginx_rw "https rewrite rules added"
              exit 0
            else
              logger -t nginx_rw "https rewrite rules already set"
              exit 0
          fi
    
    container_commands:
      00_appdeploy_rewrite_hook:
        command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/appdeploy/enact
      01_configdeploy_rewrite_hook:
        command: cp -v /tmp/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact
      02_rewrite_hook_perms:
        command: chmod 755 /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh
      03_rewrite_hook_ownership:
        command: chown root:users /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh
    

    Then add it to your git repo or app bundle and eb deploy. This creates /etc/nginx/conf.d/01-force-https.conf which is automatically included from /etc/nginx/nginx.conf. Note that eb deploy won't delete the file on the server if you later remove the corresponding file from .ebextensions. Also, I found the following helpful in debugging through eb ssh:

    sudo service nginx configtest
    sudo service nginx restart
    
    0 讨论(0)
提交回复
热议问题