当前位置: 首页 > news >正文

Docker 部署 Nginx 并在容器内配置申请免费 SSL 证书

文章目录

  • docker
  • docker-compose.yml
  • 申请免费 SSL 证书
  • 请求头参数带下划线

docker

  • https://hub.docker.com/_/nginx
docker pull nginx:1.27

注: 国内网络原因无法下载镜像,nginx 镜像文件下载链接 https://pan.baidu.com/s/1O35cPbx6AHWUJL1v5-REzA?pwd=yjsv 提取码: yjsv

  • 导入 nginx 镜像
docker load -i nginx-1.27.tar
  • 创建缩主机目录
cd /home
mkdir nginx && cd nginx
mkdir ssl logs
  • 拷贝容器内目录与文件
docker run --name nginx -d nginx:1.27
# 拷贝容器内目录与文件
docker cp nginx:/etc/nginx/nginx.conf /home/nginx
docker cp nginx:/etc/nginx/conf.d /home/nginx
docker cp nginx:/usr/share/nginx/html /home/nginx

docker-compose.yml

services:nginx:image: nginx:1.27container_name: nginxrestart: always# network_mode: "host"ports:- 8080:80- 443:443volumes:- /etc/localtime:/etc/localtime- /home/nginx/nginx.conf:/etc/nginx/nginx.conf- /home/nginx/conf.d:/etc/nginx/conf.d- /home/nginx/ssl:/etc/nginx/ssl- /home/nginx/logs:/var/log/nginx- /home/nginx/html:/usr/share/nginx/html
docker-compose up -d nginx
  • 查看 80 端口被占用情况
# Linux 环境
netstat -tulpn | grep :80
# Mac 环境
sudo lsof -iTCP -sTCP:LISTEN -n -P | grep LISTEN | grep ":80"

申请免费 SSL 证书

  • 配置 Nginx 以验证域名所有权
cd /home/nginx/conf.d
vim default.conf
server {listen       80;listen  [::]:80;server_name  localhost;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}# 配置 Nginx 验证域名所有权location ^~ /.well-known/acme-challenge/ {default_type "text/plain";root /usr/share/nginx/html; }
}
  • 重新加载 nginx 配置
# 进入容器
docker exec -it nginx /bin/bash
# 测试配置
nginx -t
# 重新加载配置
nginx -s reload
# 或直接执行命令
docker exec nginx nginx -v
docker exec nginx nginx -t
docker exec nginx nginx -s reload

注意: 以下所有操作均在容器内执行。

  • 安装 acme.sh 依赖
apt-get update
apt-get install -y git socat cron vim
  • 安装 acme.sh
# 下载源码
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
# 查看帮助
./acme.sh -h
# 安装 acme.sh
./acme.sh --install -m xxxxxxxx@qq.com
# 查看 acme.sh 更新证书任务
crontab -l

注: 目前证书在 60 天以后会自动更新, 你无需任何操作. 今后有可能会缩短这个时间, 不过都是自动的, 你不用关心。

  • 域名所有权完成验证后将自动生成证书
./acme.sh --issue -d mydomain.com -w /usr/share/nginx/html
  • 生成 SSL 证书
./acme.sh --install-cert -d mydomain.com \
--key-file       /etc/nginx/sslmydomain.com.key  \
--fullchain-file /etc/nginx/sslmydomain.com.pem
  • 修改配置文件,添加 SSL 证书配置
cd /home/nginx/conf.d
vim default.conf
server {listen        80;server_name   mydomain.com;rewrite ^(.*) https://mydomain.com$1 permanent;
}server {listen       443 ssl;server_name  mydomain.com;# 配置 SSL 证书ssl_certificate /etc/nginx/ssl/sslmydomain.com.pem;ssl_certificate_key /etc/nginx/ssl/sslmydomain.com.key;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;ssl_session_timeout 1d;client_max_body_size 20M;client_body_buffer_size 128k;location / {root   /usr/share/nginx/html;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
}
  • 重新加载 nginx 配置
nginx -s reload
  • 查看已安装证书
./acme.sh --info -d mydomain.com

请求头参数带下划线

cd /home/nginx
vim nginx.conf
user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;# 请求头参数带下划线underscores_in_headers on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何隐藏 Ubuntu 顶部状态栏
  • 时间轮算法理解、Kafka实现
  • 数列分块<1>
  • vs2017/2019串口Qt Serial Port/modbus使用报错
  • 将vue项目整合到springboot项目中并在阿里云上运行
  • Linux yum-config-manager命令教程:轻松管理YUM软件源(附实例详解和注意事项)
  • js逆向第24例:FastMoss数据分析网站Fm-Sign加密字段破解
  • MATLAB激光通信和-积消息传递算法(Python图形模型算法)模拟调制
  • MAVSDK动态库与静态库及mavsdk_server程序macOS平台编译与安装
  • SQL Server端口配置指南
  • threadx 线程以及优先级调整案例
  • npm和yarn清理缓存命令
  • 【Delphi】webView2 开发中注意事项:Content-MD5
  • 社交网络图数据集
  • WGCLOUD的ping设备监测可以导入excel数据吗
  • 【译】JS基础算法脚本:字符串结尾
  • [译]Python中的类属性与实例属性的区别
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Fabric架构演变之路
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • Ruby 2.x 源代码分析:扩展 概述
  • SpiderData 2019年2月13日 DApp数据排行榜
  • 关于字符编码你应该知道的事情
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 力扣(LeetCode)22
  • 让你的分享飞起来——极光推出社会化分享组件
  • 微信小程序--------语音识别(前端自己也能玩)
  • 应用生命周期终极 DevOps 工具包
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​iOS安全加固方法及实现
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • $GOPATH/go.mod exists but should not goland
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (二) 初入MySQL 【数据库管理】
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .bat批处理(六):替换字符串中匹配的子串
  • .net core控制台应用程序初识
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net framework profiles /.net framework 配置
  • .Net mvc总结
  • .NET NPOI导出Excel详解
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net2005怎么读string形的xml,不是xml文件。