AWS Elastic Beanstalk通过单实例配置https

在 AWS Elastic Beanstalk 上提供了多种方式来实现 https,比如通过单实例配置,负载均衡配置等。今天就以 nodejs + express 为例说一下怎么通过单实例配置实现https

创建demo应用

创建一个简单的 nodejs + express 应用 myapp,其中包含两个文件 package.json 和 app.js。

package.json

shell 复制代码
{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.2",
    "nodemon": "^3.0.3"
  }
}

app.js

shell 复制代码
const express = require('express');

const app = express();

const port = process.env.PORT || 3000;

app.get("/", (req, res, next) => {
  res.send("Express Server");
});

app.listen(port, () => {
  console.log(`[server]: Server is running at http://localhost:${port}`);
});

配置https

.ebextensions/https-instance.config

在应用目录下创建 ".ebextensions/https-instance.config" 文件,内容如下

shell 复制代码
files:
  # Public certificate
  /etc/pki/tls/certs/server.crt:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN CERTIFICATE-----
      ...
      -----END CERTIFICATE-----

  # Private key
  /etc/pki/tls/certs/server.key:
    mode: "000400"
    owner: root
    group: root
    content: |
      -----BEGIN PRIVATE KEY-----
      ...
      -----END PRIVATE KEY-----

Resources:
  sslSecurityGroupIngress: 
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: {"Fn::GetAtt" : ["AWSEBSecurityGroup", "GroupId"]}
      IpProtocol: tcp
      ToPort: 443
      FromPort: 443
      CidrIp: 0.0.0.0/0

其中证书和私钥的内容可以从证书和私钥文件获取。

.platform/nginx/conf.d/https.conf

在应用目录下创建 ".platform/nginx/conf.d/https.conf" 文件,内容如下

shell 复制代码
server {
    listen       443 ssl;
    server_name  localhost;
    
    ssl_certificate      /etc/pki/tls/certs/server.crt;
    ssl_certificate_key  /etc/pki/tls/certs/server.key;
    
    ssl_session_timeout  5m;
    
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers   on;
    
    location / {
        proxy_pass              http://localhost;
        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;
        proxy_set_header        X-Forwarded-Proto https;
    }
}

部署

在应用目录下将所有元文件打包,然后按照正常应用部署的方式部署就可以了,只是其中 "Capacity -> Auto scaling group -> Environment type" 要选成 "Single instance"。

然后就可以通过 https://xxx.elasticbeanstalk.com/ 访问了。

相关推荐
ZHW_AI课题组11 小时前
调用阿里云实现文本翻译功能
阿里云·云计算
阿乔外贸日记15 小时前
埃塞俄比亚出口全流程注意事项
大数据·人工智能·智能手机·云计算·汽车
代码中介商17 小时前
HTTPS加密原理:图解安全传输全流程
网络协议·http·https
hz5678917 小时前
公安局远程办案用什么音视频系统?安全取证与多方协同方案
安全·架构·云计算·音视频·实时音视频·信息与通信
翼龙云_cloud19 小时前
腾讯云代理商:为OpenClaw配置云开发CloudBase Skill 全自动开发上线
云计算·腾讯云·ai智能体
xhtdj19 小时前
从“小而美”到“一体化”腾讯云TDSQL如何拯救选型纠结?
云计算·腾讯云
程序猿小野21 小时前
在阿里云服务器上安装Docker部署后台项目
阿里云·docker·云计算
сокол21 小时前
【网安-研判-WireShark流量分析】HTTPS流量解密
测试工具·https·wireshark
HelloWorld工程师21 小时前
网站开启HTTPS:2步解决Chrome“不安全”提示
chrome·网络协议·https·ssl
sbjdhjd1 天前
04 (下) | K8S微服务实战:从 Service 到金丝雀发布
运维·微服务·云原生·kubernetes·开源·云计算·excel