当前位置: 首页 > 知识库问答 >
问题:

如何让弹性豆茎nginx支持的代理服务器自动重定向从HTTP到HTTPS?

云和硕
2023-03-14

我有一个Node.js驱动的网站,我正在亚马逊弹性豆茎上运行。

我的Node.js应用程序在端口8080上侦听,我正在使用nginx弹性负载均衡器配置我的EB应用程序,在端口80和443上侦听HTTP和HTTPS。

然而,我只想在我的应用程序中接受通过HTTPS传输的流量。

我可以在应用程序中安装一些东西来处理这个问题,但我感兴趣的是一种让负载均衡器通过HTTPS将所有HTTP请求重定向到我的网站的方法。

共有3个答案

司易安
2023-03-14

您可以通过节点处理重定向。js应用。

当客户端连接不安全时,Amazon发送的X-Forwarded-Proto头等于http

在初始化Express之后和定义路由以自动将客户端重定向到相应的HTTPSendpoint之前,应立即插入以下中间件:

// Redirect to HTTPS
app.use(function (req, res, next) {
    // Insecure request?
    if (req.get('x-forwarded-proto') == 'http') {
        // Redirect to https://
        return res.redirect('https://' + req.get('host') + req.url);
    }

    next();
});
金子平
2023-03-14

被接受的答案不再适用于我。默认端口是另一个。配置文件的位置也发生了变化。我正在用Puma建立一个Ruby On Rails应用程序。

我和付费支持人员谈过,我们通过在运行的实例上手动运行命令就解决了这个问题。然后我想出了下面的解决方案。只需登录并重新启动nginx,一切都正常了。

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

请注意我是如何更改端口号和配置文件的位置的。

昌琪
2023-03-14

在亚马逊付费支持的几次错误启动后,他们最终还是成功了。实现这一目标的方法是配置环境以响应端口80和443。然后在您的主Node.js应用文件夹中创建一个名为的文件夹。eb扩展,然后在其中放置一个名为00_nginx_https_rw.config的文件,内容如下:

files:
  "/tmp/45_nginx_https_rw.sh":
    owner: root
    group: root
    mode: "000644"
    content: |
      #! /bin/bash

      CONFIGURED=`grep -c "return 301 https" /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf`

      if [ $CONFIGURED = 0 ]
        then
          sed -i '/listen 8080;/a \    if ($http_x_forwarded_proto = "http") { return 301 https://$host$request_uri; }\n' /etc/nginx/conf.d/00_elastic_beanstalk_proxy.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

亚马逊的支持团队解释说:这个配置创建了一个部署挂钩,它将把重写规则添加到/etc/nginx/conf.d/00_elastic_beanstalk_proxy中。形态。

(之前他们给我提供了将不同文件复制到/etc/nginx/conf.d的.config,但这些文件要么没有效果,要么更糟,出于某种原因,它们似乎覆盖了默认的nginx配置,或者优先于默认的nginx配置。)

如果要撤消此操作,即删除挂钩,则需要删除此ebextension并发出命令删除它创建的文件。您可以手动执行此操作,也可以通过临时放置的ebextensions命令执行此操作:

/opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh
/opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh

我还没有尝试过这种方法,但大概类似的方法可以删除它们并撤销此更改:

container_commands:
  00_undochange:
    command: rm /opt/elasticbeanstalk/hooks/appdeploy/enact/45_nginx_https_rw.sh
  01_undochange:
    command: rm /opt/elasticbeanstalk/hooks/configdeploy/enact/45_nginx_https_rw.sh

希望这能在将来帮助别人。

 类似资料:
  • 我发现javamail只支持袜子。有什么解决方案可以支持http代理吗?

  • 环境Centos与apache 正在尝试设置从http到https的自动重定向 我试图添加以下内容到我的httpd.conf但它不工作 有什么想法吗?

  • 问题内容: 我已经在托管jenkins和其他一些应用程序的ubuntu实例上将nginx设置为反向代理。我正在使用nginx根据相对路径路由到各种应用程序。从客户端到nginx的所有流量都通过https。在防火墙后面,nginx将所有内容通过http路由到配置的路径和端口号。看起来像这样: Nginx配置文件的相关部分是这样的: 问题是jenkins使用简单的身份验证,并且在成功登录后会发送302

  • 有人知道在弹性豆茎中传递一个秘密值作为环境变量是可能的吗?另一个选择显然是在我们的代码库中使用sdk,但我想先探讨环境变量方法 干杯Damien

  • 我将在AWS上构建微服务的体系结构,我想请你们澄清我的疑问。 我目前的一般概念 我想使用API网关,它公开在Elastic Beanstalk中运行的MicroDevices API。我想将Elastic Beanstalk放置在VPC中,而不直接从Internet访问其实例。 问题 弹性豆茎在应用程序创建时获得子域。这个子域应该由集成类型为AWS服务的API网关在操作配置中使用-我说得对吗? 什

  • 我试图找出管理EB docker应用程序的HTTPS的最佳方式。 目前我正在使用下面的方法。 < li>ELB接受443上的HTTPS连接,并转发到实例上的HTTP端口80。 < li>ELB接受80上的HTTP连接,并转发到实例上的HTTP端口8080。 < li >实例接受端口80上的HTTP连接,并转发到docker app。 < li >实例接受端口8080上的HTTP连接,并将它们重定向