nginx-auto-ssl是一个Docker镜像,用于通过Let's Encrypt和OpenResty自动生成SSL证书,默认包含合理的SSL配置、HTTP/2和WebSocket支持。该镜像支持通过环境变量指定允许的域名和简单代理,并可轻松覆盖nginx.conf以满足自定义需求。本镜像基于https://github.com/Valian/docker-nginx-auto-ssl%E5%88%86%E5%8F%89%EF%BC%8C%E9%92%88%E5%AF%B9Elestio%E9%9C%80%E6%B1%82%E5%AE%9A%E5%88%B6%EF%BC%8C%E5%A2%9E%E5%8A%A0%E4%BA%86%E9%80%9F%E7%8E%87%E9%99%90%E5%88%B6%E5%92%8C%E8%BE%93%E5%87%BA%E7%BC%93%E5%AD%98%E5%8A%9F%E8%83%BD%E3%80%82
镜像状态:已用于生产环境。未来可能会添加向后兼容的变更。
以下命令可快速为指定域名生成并自动续期SSL证书:
bash# 替换为实际值 export DOMAIN=yourdomain.com export APP_ADDRESS=localhost:8080 # 运行容器 docker run -d \ --name nginx-auto-ssl \ --restart on-failure \ --network host \ -e ALLOWED_DOMAINS="$DOMAIN" \ -e SITES="$DOMAIN=$APP_ADDRESS" \ -v ssl-data:/etc/resty-auto-ssl \ elestio/nginx-auto-ssl # 查看日志确认运行状态 docker logs nginx-auto-ssl
注意:确保服务器已正确配置DNS,使域名解析指向当前服务器。
创建docker-compose.yml文件:
yamlversion: '2' services: nginx: image: elestio/nginx-auto-ssl restart: on-failure ports: - 80:80 - 443:443 volumes: - ssl_data:/etc/resty-auto-ssl environment: ALLOWED_DOMAINS: 'yourdomain.com' SITES: 'yourdomain.com=myapp:80' # 你的应用服务,监听SITES中指定的端口 myapp: image: nginx volumes: ssl_data:
启动服务:
bashdocker-compose up -d
| 变量 | 示例 | 描述 |
|---|---|---|
| ALLOWED_DOMAINS | (www|api).example.com、example.com、([a-z]+.)?example.com | 允许的域名正则模式,使用https://github.com/openresty/lua-nginx-module#ngxrematch%E5%8C%B9%E9%85%8D%E3%80%82%E9%BB%98%E8%AE%A4%E5%85%81%E8%AE%B8%E6%89%80%E6%9C%89%E5%9F%9F%E5%90%8D |
| DIFFIE_HELLMAN | true | 强制重新生成dhparam.pem。未指定时使用默认密钥 |
| SITES | db.com=localhost:5432; *.app.com=localhost:8080、_=localhost:8080 | 多代理快捷配置,格式为域名1=端点1; 域名2=端点2。_表示默认服务器(同Nginx配置) |
| FORCE_HTTPS | true、false | 若为true,自动添加HTTP到HTTPS的重定向规则。默认值为true |
| LETSENCRYPT_URL | https://acme-v02.api.letsencrypt.org/directory、https://acme-staging-v02.api.letsencrypt.org/directory | Let's Encrypt服务器URL,用于指定生产或测试环境 |
| RESOLVER_ADDRESS | 8.8.8.8、127.0.0.53 ipv6=off | OCSP装订使用的DNS解析器地址。默认值为8.8.8.8。添加ipv6=off可禁用IPv6 |
| STORAGE_ADAPTER | file、redis | 证书存储位置。redis适用于负载均衡环境,避免I/O阻塞。默认值为file |
| REDIS_HOST | hostname、ip地址 | Redis存储的主机名。当STORAGE_ADAPTER=redis时必填 |
| REDIS_PORT | 6379 | Redis服务端口。默认值为6379 |
| REDIS_DB | 0 | 存储证书的Redis数据库编号。默认值为0 |
| REDIS_KEY_PREFIX | some-prefix | Redis键名前缀。默认值为空字符串 |
conf.d添加配置可通过挂载卷或自定义镜像的方式,在/etc/nginx/conf.d/目录下添加额外的Nginx配置文件(.conf后缀)。
卷挂载方式:
bashdocker run -d \ --name nginx-auto-ssl \ -p 80:80 -p 443:443 \ -v $PWD/conf.d:/etc/nginx/conf.d \ # 挂载本地conf.d目录 -v ssl-data:/etc/resty-auto-ssl \ elestio/nginx-auto-ssl
自定义镜像方式:
DockerfileFROM elestio/nginx-auto-ssl COPY ./conf.d /etc/nginx/conf.d # 复制本地conf.d目录到镜像
示例配置文件(server.conf):
nginxserver { listen 443 ssl; server_name api.example.com; include resty-server-https.conf; # 必须包含的SSL配置 location / { proxy_pass http://api-service:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
SITES模板通过覆盖/usr/local/openresty/nginx/conf/server-proxy.conf文件,自定义SITES变量生成的代理配置模板。
示例模板:
nginxserver { listen 443 ssl; server_name $SERVER_NAME; include resty-server-https.conf; location / { proxy_pass http://$SERVER_ENDPOINT; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 添加WebSocket支持 } }
通过卷挂载覆盖模板:
bashdocker run -d \ --name nginx-auto-ssl \ -v $PWD/server-proxy.conf:/usr/local/openresty/nginx/conf/server-proxy.conf \ -e SITES="ws.example.com=websocket-service:8080" \ elestio/nginx-auto-ssl
nginx.conf当其他自定义方式无法满足需求时,可提供完整的nginx.conf配置文件。
示例Dockerfile:
DockerfileFROM elestio/nginx-auto-ssl COPY nginx.conf /usr/local/openresty/nginx/conf/ # 覆盖默认nginx.conf
最小化可用配置(nginx.conf):
nginxevents { worker_connections 1024; } http { include resty-http.conf; # 必须包含的基础HTTP配置 # HTTPS服务器 server { listen 443 ssl; include resty-server-https.conf; # 必须包含的SSL配置 server_name example.com; location / { proxy_pass http://app:80; } } # HTTP服务器(用于Let's Encrypt验证和重定向) server { listen 80 default_server; include resty-server-http.conf; # 必须包含的HTTP配置 } }
构建并运行自定义镜像:
bashdocker build -t custom-nginx-auto-ssl . docker run -d --name nginx -p 80:80 -p 443:443 custom-nginx-auto-ssl
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务