简单路由-HTTP 强制跳转到 HTTPS

更新时间:2018-03-15 13:28:02

许多网站虽然支持 https,但是直接在浏览器地址栏输入网址后,默认仍是以 http 协议去访问的,您可以通过 http 强制跳转 https 来保障网站的安全 。

您可以根据 简单路由-HTTP 变成 HTTPS 协议 进行操作实现通过 HTTPS 协议访问您需要的网站,然后通过在 nginx 容器中重写(rewrite)到 https 的方式,使 HTTP 协议请求强制跳转到 HTTPS 协议。

步骤1 实现 https 协议访问 helloworld 应用

  1. 您可以使用编排模板创建 hello world 应用。

    应用模板示例如下:

    compose V1/V2 示例

    1. app:
    2. ports:
    3. - 80/tcp
    4. image: 'registry.cn-hangzhou.aliyuncs.com/linhuatest/hello-world:latest'
    5. labels:
    6. # 此处只是 http/https/ws/wss 协议
    7. aliyun.routing.port_80: "http://www.example.com"
    8. restart: always

    compose V3 示例

    1. version: '3'
    2. services:
    3. web:
    4. image: 'registry.cn-hangzhou.aliyuncs.com/linhuatest/hello-world:latest'
    5. ports:
    6. - 80/tcp
    7. deploy:
    8. restart_policy:
    9. condition: on-failure
    10. labels:
    11. aliyun.routing.port_80: "http://www.example.com"
  2. 配置好负载均衡之后,参见 HTTP 协议变为HTTPS,访问 HTTPS 协议的网站如下所示。

    1

步骤2 配置 nginx 容器实现强制跳转到 HTTPS

  1. 您可以配置使 HTTP 协议请求强制跳转到 HTTPS 协议。

    本例中,创建一个 nginx 容器,监听 http 请求,将所有的http 请求通过 rewrite 重写到 https上,从而将请求重定向至 https 协议,实现基于 www.example.com 域名的强制跳转。

    下面的示例配置了 nginx 容器并将 rewrite 规则写到配置文件中,即如果收到请求 http://www.example.com,则返回 301 且自动跳转到 https://www.example.com

    • 登录集群中的 每台 机器,创建 nginx.conf 配置文件,该配置文件将以 volume 形式挂载到容器 nginx 中。

      1. cd / ## 返回根目录
      2. mkdir ngx ## 创建 ngx 目录
      3. vim nginx.conf ## 创建 nginx.conf 配置文件
    • /ngx/nginx.conf配置文件中输入如下的配置代码。

      1. user nginx;
      2. error_log /var/log/nginx/error.log warn;
      3. pid /var/run/nginx.pid;
      4. events {
      5. worker_connections 65535;
      6. }
      7. http {
      8. include /etc/nginx/mime.types;
      9. default_type application/octet-stream;
      10. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
      11. '$status $body_bytes_sent "$http_referer" '
      12. '"$http_user_agent" "$http_x_forwarded_for"';
      13. access_log /var/log/nginx/access.log main;
      14. keepalive_timeout 65;
      15. gzip on;
      16. server {
      17. listen 80;
      18. server_name localhost;
      19. return 301 https://$host$request_uri;
      20. }
      21. }
  2. 使用编排模板创建 nginx 应用。

    编排示例如下:

    compose V1/V2 示例

    1. nginx:
    2. ports:
    3. - 80:80/tcp # 映射到主机的 80 端口
    4. image: 'nginx:latest'
    5. labels:
    6. aliyun.global: true # 每台机器均部署一个 nginx 容器,达到高可用目的
    7. volumes:
    8. - /ngx/nginx.conf:/etc/nginx/nginx.conf
    9. restart: always

    compose V3 示例

    1. version: '3'
    2. services:
    3. nginx:
    4. ports:
    5. - 80:80/tcp # 映射到主机的 80 端口
    6. image: 'nginx:latest'
    7. deploy:
    8. mode: global #在每个节点下运行一个容器
    9. restart_policy:
    10. condition: on-failure
    11. volumes:
    12. - /ngx/nginx.conf:/etc/nginx/nginx.conf
  3. 配置集群负载均衡的监听规则。

    如下图所示(其中,前端 80 端口 > 后端 80 端口,即负载均衡的前端端口 > 后端 ECS 实例的端口 80)。

    1

  4. 验证 HTTP 强制跳转到 HTTPS

    当您访问 http://www.example.com 时,会自动跳转到 https://www.example.com 。返回的 HTTP 协议内容如下图所示,即完成了正确跳转到 https://www.example.com

    3

本文导读目录