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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/46002.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32入门开发操作记录(二)——LED与蜂鸣器

目录 一、工程模板二、点亮主板1. 配置寄存器2. 调用库函数 三、LED1. 闪烁2. 流水灯 四、蜂鸣器 一、工程模板 参照第一篇,新建工程目录ProjectMould,将先前打包好的Start,Library和User文件^C^V过来,并在Keil5内完成器件支持包的…

从零开始实现大语言模型(六):因果注意力机制

1. 前言 因果注意力机制(causal attention)是一种特殊的自注意力机制,其在计算context向量 z i z_i zi​

jenkins系列-01.docker安装jenkins

进入官网:https://www.jenkins.io/ 使用LONG term support版本:2.387.1 docker pull jenkins/jenkins:2.387.1-lts 拉取镜像: 编写docker-compose文件: 启动jenkins: 查看启动日志: 默认生成的密码:…

基于springboot+vue+uniapp的超市购物系统小程序

开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…

LeetCode 142.环形链表2 C写法

LeetCOde 142.环形链表2 C写法 思路1🤔: ​ 用环形链表的方法,快慢指针找到slow和fast的相遇点,此时头到入口点的位置与相遇点到入口点的距离一样。 ​ 我们假设头到入口点的长度为L,环的长度为C,相遇点到入…

Rust 测试的组织结构

测试的组织结构 本章一开始就提到,测试是一个复杂的概念,而且不同的开发者也采用不同的技术和组织。Rust 社区倾向于根据测试的两个主要分类来考虑问题:单元测试(unit tests)与 集成测试(integration test…

负荷预测 | Matlab基于Transformer-LSTM多变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于Transformer-LSTM多变量时间序列多步预测; 2.多变量时间序列数据集(负荷数据集),采用前96*2个时刻预测的特征和负荷数据预测未来96个时刻的负荷数据&#x…

记一次饱经挫折的阿里云ROS部署经历

前言 最近在参加的几个项目测评里,我发现**“一键部署”这功能真心好用,省下了不少宝贵时间和力气,再加上看到阿里云现在有个开源上云**的活动。趁着这波热潮,今天就聊聊怎么从头开始,一步步搞定阿里云的资源编排服务…

【持续集成_06课_Jenkins高级pipeline应用】

一、创建项目选择pipeline的风格 它主要是以脚本(它自己的语言)的方式进行运行,一般由运维去做的事情,作为测试而言。了解即可。 --- 体现形式全部通过脚本去实现:执行之前(拉取代码)执行&…

Linux:Linux网络总结(附下载链接)

文章目录 下载链接网络问题综合问题访问一个网页的全过程?WebSocket HTTPHTTP基本概念GET与POSTHTTP特性HTTP缓存技术HTTP的演变HTTP1.1 优化 HTTPSHTTP与HTTPS有哪些区别?HTTPS解决了HTTP的哪些问题?HTTPS如何解决的?HTTPS是如何…

# Redis 入门到精通(二)通用指令

Redis 入门到精通(二)通用指令 一、redis 通用指令-key 基本操作 1、key 特征 key是一个字符串,通过key获取redis中保存的数据。 2、key 应该设计哪些操作? 对于 key 自身状态的相关操作,例如:删除,判定存在&…

企业网络实验(vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP

文章目录 需求实验修改dhcp虚拟机配置文件测试PC获取IP查看user-bind 需求 (vmware虚拟机充当DHCP服务器)所有IP全部保留,只为已知mac分配固定IP 实验 前期配置: https://blog.csdn.net/xzzteach/article/details/140406092 后续配置均在以上配置的前…

ChatGPT对话:如何制作静态网页?

【编者按】编者在很早以前制作过静态网页,之后长期没有使用,已完全不知道最新现状了。所以,从制作工具开始询问ChatGPT,回答非常全面,完全可以解决初学者的问题。 编者虽然长期不制作网页,但一直在编程&…

keepalive和haproxy

1、keepalive 1.1概念 调度器的高可用 vip地址主备之间的切换,主在工作时,vip地址只在主上,主停止工作,vip漂移到备服务器 在主备的优先级不变的情况下,主恢复工作,vip会飘回到主服务器 1、配优先级 …

C#,开发过程中技术点GPT问答记录

6、为什么说GUI编程是事件驱动的? GUI(图形用户界面)编程是一种以图形方式构建用户界面的编程方法,它主要采用事件驱动模型进行程序逻辑的组织。在事件驱动的编程中,程序并不按照固定的顺序线性执行,而是等…

Java枚举类

深入理解Java枚举类 什么是枚举类? 枚举类(enum)是Java中一种特殊的类,用于表示一组固定的常量。例如,一年四季(春、夏、秋、冬)、一周七天(周一到周日)等。这些常量是…

【RabbitMQ】一文详解消息可靠性

目录: 1.前言 2.生产者 3.数据持久化 4.消费者 5.死信队列 1.前言 RabbitMQ 是一款高性能、高可靠性的消息中间件,广泛应用于分布式系统中。它允许系统中的各个模块进行异步通信,提供了高度的灵活性和可伸缩性。然而,这种通…

.NET MAUI开源架构_1.学习资源分享

最近需要开发Android的App,想预研下使用.NET开源架构.NET MAUI来开发App程序。因此网上搜索了下相关资料,现在把我查询的结果记录下,方便后面学习。 1.官方文档 1.1MAUI官方学习网站 .NET Multi-Platform App UI 文档 - .NET MAUI | Micro…

Leetcode100.判断两颗二叉树是否相同

题目描述 代码和 leetcode101. 判断二叉树是否对称非常类似 。 答案 public boolean isSameTree(TreeNode p, TreeNode q) {if (p null && q null) { //p,q都为空return true;} else if (p null || q null) { //p和q中只有一个为空return false;} else { //p和q都不…

块设备驱动实现--模拟一个块设备

1、前言 存储层在收到I/O请求后进行数据处理,再给上层应答,本文实现一个实际的块设备驱动。使用Linux5.4为基础,进行框架搭建和功能实现。 2、ko模块与编译 首先定义一个init和exit函数,去注册自己的驱动函数模块。 #include &l…