Flutter Nginx配置管理插件nginx_le的使用

Flutter Nginx配置管理插件nginx_le的使用

概述

nginx_le 是一个用于创建和管理自动获取和续订HTTPS证书的Nginx服务器的Docker容器和工具。它使用Let’s Encrypt的Certbot工具来获取和续订证书。

关键特性

  • 自动证书获取和续订:无需手动干预,自动处理证书的获取和续订。
  • 无停机时间:在续订证书时,Nginx服务器保持在线。
  • 支持公共和私有Web服务器:适用于面向公众的Web服务器和内部开发环境。
  • 支持通配符证书:可以为多个子域名获取通配符证书。
  • 易于开发者使用:开发者可以轻松获取真实证书。

前提条件

要获取Let’s Encrypt证书,必须满足以下条件:

  • 公共DNS记录:对于公共Web服务器,主机必须有一个公共DNS记录。
  • 私有Web服务器:需要创建一个公共DNS A记录,并使用支持的DNS提供商进行DNS验证。

快速开始

公共Web服务器

公共Web服务器通过公共IP地址暴露端口80和443,并且具有公共DNS A记录(例如,host.mydomain.com 解析到Web服务器的IP地址)。

私有Web服务器

私有Web服务器(没有公共互联网访问)使用Certbot的DNS认证方法。Nginx-LE需要向外连接到Let’s Encrypt服务器和DNS服务器,但不需要入站连接。

部署Nginx-LE

Nginx-LE提供了多种部署方式:

方法 使用场景 备注
nginx-le config 最快启动服务器的方法 提示你输入构建Web服务器所需的核心信息,然后创建Nginx-LE容器。使用 nginx-le start 启动Web服务器。
docker-compose 通过环境变量配置容器 如果你已经在使用docker-compose进行部署,这是一个自然的选择。
docker create 手动设置所有必需的环境变量 手动创建容器。
自定义镜像 修改Nginx-LE Docker镜像 允许你自定义镜像并添加额外的工具。
构建 修改源代码或详细Nginx配置 自己动手丰衣足食。

Nginx-LE CLI工具

Nginx-LE提供了可选的CLI工具来管理Nginx-LE实例。这些工具基于Dart和DCli库。

安装CLI工具

  1. 安装DCli

    sudo apt-get update
    sudo apt-get install --no-install-recommends -y wget ca-certificates gnupg2
    wget https://github.com/bsutton/dcli/releases/download/latest-linux/dcli_install -O dcli_install
    chmod +x dcli_install
    export PATH="$PATH":"$HOME/.pub-cache/bin":"$HOME/.dcli/bin"
    ./dcli_install
    
  2. 安装Nginx-LE CLI

    pub global activate nginx_le
    

CLI命令

命令 描述 注释
build 构建Docker镜像 只有在需要自定义代码时才需要。
config 配置Nginx-LE并创建Docker容器 在运行其他命令之前必须先运行此命令(除了build)。
start 启动Nginx-LE 启动Nginx-LE Docker容器。
restart 重启Nginx-LE 重启Docker容器。
stop 停止Nginx-LE 停止Docker容器。
acquire 获取或续订Let’s Encrypt证书 获取证书的方法取决于选择的认证提供者。如果使用AUTO_ACQUIRE模式,则此操作会自动进行。
revoke 撤销当前的Let’s Encrypt证书 完整撤销证书。如果你在生产环境和测试环境之间切换证书类型,需要运行撤销和获取操作。
cli 连接到Docker容器的bash shell 在Nginx-LE Docker容器内玩耍。
logs 查看容器中的日志

示例

nginx-le config

构建Nginx-LE

大多数用户不需要运行构建命令。构建工具主要用于Nginx-LE开发团队和需要自定义Nginx-LE底层代码的用户。

构建命令

git clone https://github.com/bsutton/nginx-le.git
cd cli
pub_release multi

构建选项

选项 描述
--image 设置Docker镜像/标签名称(repo/image:version)。例如:--image=noojee/nginx-le:1.0.0
--update-dcli 强制构建从最新版本的dart/dcli拉取,而不是使用Docker缓存实例。
--debug 输出额外的构建信息。

配置Nginx-LE

使用 nginx-le config 命令配置Nginx-LE容器。运行配置命令时,Nginx-LE将销毁并创建一个带有新设置的新容器。

启动方法

方法 描述
nginx-le start 最简单的方法。nginx-le config 将创建一个容器。使用 nginx-le startnginx-le stop 启动/停止容器。
docker start nginx-le config 将创建一个容器。使用 docker startdocker stop 启动/停止容器。
docker-compose up docker-compose up 将创建并启动容器。你必须在 docker-compose.yaml 文件中指定一些环境变量和卷来配置Nginx-LE。你必须至少使用 docker-compose 启动一次容器才能运行 nginx-le config

内容提供者

Nginx-LE支持四种类型的内容提供者:

提供者 描述
静态 从本地文件夹提供静态Web内容。
泛型代理 将请求转发到能够响应HTTP请求的Web应用程序服务器。通常与Nginx-LE服务器在同一主机上,连接不加密。
Tomcat代理 将请求转发到本地Tomcat Web应用程序服务器的8080端口。
自定义 允许你配置自己的Nginx位置和上游设置。

认证提供者

认证提供者 使用场景 描述
HTTP01Auth 公共Web服务器使用FQDN证书 Web服务器必须在公共IP地址上可访问。这是最简单的验证方法,因为它适用于任何DNS提供商。
Cloudflare 公共和私有Web服务器。支持FQDN和通配符证书 最灵活的认证提供者,DNS必须托管在Cloudflare上。
Namecheap 公共和私有Web服务器。支持FQDN和通配符证书 不推荐使用。Namecheap API非常不稳定,目前限制为不超过10个A记录的域名。

示例代码

/* Copyright (C) S. Brett Sutton - All Rights Reserved
 * Unauthorized copying of this file, via any medium is strictly prohibited
 * Proprietary and confidential
 * Written by Brett Sutton <bsutton@onepub.dev>, Jan 2022
 */

///
/// This is an executable not a library
///
/// Run:
///
/// nginx-le config
///
/// nginx-le start
///
/// You now have an nginx web server with automatic certificate renewal.
library;

总结

nginx_le 是一个强大的工具,可以帮助你快速创建和管理自动获取和续订HTTPS证书的Nginx服务器。通过Docker和CLI工具,你可以轻松地在不同的环境中部署和管理Nginx服务器。希望本文档能帮助你更好地理解和使用 nginx_le


更多关于Flutter Nginx配置管理插件nginx_le的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter Nginx配置管理插件nginx_le的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


作为IT专家,以下是如何在Flutter应用中配置和使用Nginx以及nginx_le(一个用于自动化Let’s Encrypt证书管理的Nginx插件)的示例代码和步骤。需要注意的是,Flutter本身是一个用于构建跨平台移动应用的框架,它并不直接管理服务器配置。因此,Flutter部分将主要关注如何调用API或发起HTTP请求,而Nginx配置则需要在服务器端进行。

服务器端:Nginx与nginx_le配置

  1. 安装Nginx

    在Linux服务器上,你可以使用包管理器安装Nginx。例如,在Ubuntu上:

    sudo apt update
    sudo apt install nginx
    
  2. 安装Certbot和nginx_le

    Certbot是一个用于自动化Let’s Encrypt证书管理的工具,而nginx_le通常是Certbot的一个插件或配置方式。以下是如何安装Certbot并配置Nginx以使用Let’s Encrypt证书的示例:

    sudo apt install certbot python3-certbot-nginx
    
  3. 获取Let’s Encrypt证书

    使用Certbot的nginx插件自动获取并配置证书:

    sudo certbot --nginx
    

    这个命令将引导你完成证书获取过程,并自动配置Nginx以使用这些证书。

  4. Nginx配置文件示例

    配置完成后,Nginx的配置文件(通常位于/etc/nginx/sites-available/目录下)将包含HTTPS服务器的配置,如下所示:

    server {
        listen 443 ssl;
        server_name yourdomain.com;
    
        ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
    
        location / {
            proxy_pass http://localhost:your_flutter_app_port;
            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 $scheme;
        }
    }
    
    server {
        listen 80;
        server_name yourdomain.com;
    
        return 301 https://$host$request_uri;
    }
    

    这个配置将HTTP请求重定向到HTTPS,并将HTTPS请求代理到Flutter应用运行的本地端口。

Flutter客户端:发起HTTPS请求

在Flutter应用中,你可以使用HttpClient或更高级的库如diohttp来发起HTTPS请求。以下是一个使用dio库的示例:

  1. 添加依赖

    在你的pubspec.yaml文件中添加dio依赖:

    dependencies:
      flutter:
        sdk: flutter
      dio: ^4.0.0
    
  2. 发起HTTPS请求

    在你的Flutter代码中,使用dio发起HTTPS请求:

    import 'package:dio/dio.dart';
    import 'package:flutter/material.dart';
    
    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Flutter Nginx HTTPS Example'),
            ),
            body: Center(
              child: MyWidget(),
            ),
          ),
        );
      }
    }
    
    class MyWidget extends StatefulWidget {
      @override
      _MyWidgetState createState() => _MyWidgetState();
    }
    
    class _MyWidgetState extends State<MyWidget> {
      String responseData = '';
    
      @override
      void initState() {
        super.initState();
        fetchData();
      }
    
      void fetchData() async {
        try {
          Response response = await Dio().get('https://yourdomain.com/your-endpoint');
          setState(() {
            responseData = response.data.toString();
          });
        } catch (error) {
          print(error);
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Text(responseData);
      }
    }
    

这个Flutter应用将在启动时向你的Nginx服务器发起HTTPS请求,并显示响应数据。

请注意,这只是一个基本的示例,实际应用中你可能需要处理更多的错误、状态管理和UI交互。同时,确保你的Nginx服务器和Flutter应用都正确配置并运行。

回到顶部