首页 > 系统相关 >使用docker部署nginx并配置https

使用docker部署nginx并配置https

时间:2023-05-03 10:22:20浏览次数:47  
标签:https 配置文件 ssl nginx proxy conf docker

 

# 安装
docker pull nginx

# 安装后查看docker镜像
docker images

安装就只需要一个命令,连安装包都不用自己找,这就是我用docker的原因。

建目录用于存放nginx配置文件、证书文件:

mkdir /opt/docker/nginx/conf.d -p
mkdir /opt/docker/nginx/cert -p

nginx的ssl证书长这个样子,两个都要,中间打码的是你的域名: 在这里插入图片描述

把他们俩放到服务器的/opt/docker/nginx/cert目录下。

查看内网的ip,记录下来,等下写配置文件要用:

# linux查看内网ip
ifconfig

接下来说说配置文件的一点注意事项。

了解docker的都知道,docker容器启动后,容器内部有自己的文件系统,配置文件也在里面。

因此我们需要把配置文件挂载到外部,就是我们的linux服务器上。

这样我们每次需要修改nginx的配置文件的时候,只要修改挂载到外部的文件,容器内的文件也会相应改变,能省很多功夫。

强烈建议挂载文件!!!不然的话会有很多坑,自身的血泪说出这句话。

要挂载文件,首先需要启动nginx,进去容器内部查看配置文件在哪里,并将其复制出来:

# 启动nginx
docker run --name nginx -p 80:80 -d nginx

# 进入docker的nginx容器
docker exec -it nginx bash

确定进入容器内部后,用下面两个命令查找nginx的配置文件在哪:

# 查找nginx配置文件default.conf 
# 这个在/etc/nginx/conf.d/default.conf
find / -name "default.conf"

# 查找nginx配置文件nginx.conf
# 这个在/etc/nginx/nginx.conf
find / -name "nginx.conf"
# 注:两者不在同一目录下。
SHELL 复制 全屏

接下来退出容器(进入容器内部只是确认一下配置文件的位置而已):

exit
SHELL 复制 全屏

使用docker的cp命令把这两个配置文件复制到刚刚建好的目录下:

# 把docker内的default.conf复制到外部
docker cp nginx:/etc/nginx/conf.d/default.conf /opt/docker/nginx/conf.d/default.conf

# 把docker内的nginx.conf复制到外部
docker cp nginx:/etc/nginx/nginx.conf /opt/docker/nginx/conf.d/nginx.conf

保险起见,这个时候先不修改容器外部的配置文件,先挂载文件启动docker,启动成功了,确定没问题了,再去修改配置文件。

首先停掉之前的容器并删除:

# 停止容器
docker stop nginx

# 删除容器
docker rm -f nginx

带着挂载文件的命令启动nginx:

# 挂载
docker run --name nginx -p 80:80 -p 443:443 -v /opt/docker/nginx/conf.d/nginx.conf:/etc/nginx/nginx.conf -v /opt/docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf -v /opt/docker/nginx/cert:/etc/nginx -d nginx

-p命令表示容器内部和外部监听的端口,这部分不细说。 -v表示挂载的文件,-v [该文件在容器外部的位置]:[该文件在容器内部的位置]

使用下面的命令查看是否启动成功:

# 查看正在运行的容器
docker ps

# 查看全部容器,包括没有启动的容器
# 如果上面的命令出现的列表没有nginx,使用这个命令
docker ps -a

# 如果确定启动失败了,查看日志定位失败的原因
docker logs nginx

当nginx启动成功后,我们只需要修改配置文件,就可以实现多个域名和https访问的需求啦。

nginx的配置文件有两个,nginx.confdefault.conf

点开看nginx.conf的话,会发现里面引入了default.conf的内容,也就是说这是一个文件分成两个文件来写。

我们只需要修改default.conf的内容即可达到我们的目的。

这里粘一下linux编辑文本的命令:

# 打开文件
vim 文件名

# 进入默认不可编辑,需要按下i后才可以编辑

# 编辑完成后,需要按esc退出编辑状态

# 退出并保存
:wq

# 退出不保存
:q!

修改default.conf的内容为如下,需根据你的情况做出改变

server {
   listen 80; #侦听80端口
   listen 443 ssl; #侦听443端口,用于SSL
   server_name tandk.com www.tandk.com;  # 自己的域名
   # 注意证书文件名字和位置,是从/etc/nginx/下开始算起的
   ssl_certificate 1_tandk.com_bundle.crt;
   ssl_certificate_key 2_tandk.com.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;

   client_max_body_size 1024m;

   location / {
       proxy_set_header HOST $host;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   # 这里写的是我的腾讯云内网地址,不知道为啥,不能用127.0.0.1...
       proxy_pass http://xx.xx.xx.xx:8090;
  }
}

这上面便配好了一个域名的https和http访问,假如你想多配一个域名,拿我上面的blog.tandk.commail.tandk.com来举例,每个域名要加多一个server:

server {
   listen 80; #侦听80端口
   listen 443 ssl; #侦听443端口,用于SSL
   server_name blog.tandk.com;  # 自己的域名
   # 注意证书文件位置,是从/etc/nginx/下开始算起的
   ssl_certificate 1_blog.tandk.com_bundle.crt;
   ssl_certificate_key 2_blog.tandk.com.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;

   client_max_body_size 1024m;

   location / {
       proxy_set_header HOST $host;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   # 这里写的是我的腾讯云内网地址,不知道为啥,不能用127.0.0.1...
       proxy_pass http://xx.xx.xx.xx:8080;
  }
}

server {
   listen 80; #侦听80端口
   listen 443 ssl; #侦听443端口,用于SSL
   server_name mail.tandk.com;  # 自己的域名
   # 注意证书文件位置,是从/etc/nginx/下开始算起的
   ssl_certificate 1_mail.tandk.com_bundle.crt;
   ssl_certificate_key 2_mail.tandk.com.key;
   ssl_session_timeout 5m;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;

   client_max_body_size 1024m;

   location / {
       proxy_set_header HOST $host;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   # 这里写的是我的腾讯云内网地址,不知道为啥,不能用127.0.0.1...
       proxy_pass http://xx.xx.xx.xx:8181;
  }
}

配置完毕后,保存、停止容器再重启:

# 停止nginx
docker stop nginx

# 启动容器
docker start nginx

# 查看是否启动成功
docker ps
 

标签:https,配置文件,ssl,nginx,proxy,conf,docker
From: https://www.cnblogs.com/sj5426/p/17368741.html

相关文章

  • dockerfile概念简介——镜像分层
    一、dockerfile概念dockerfile是自定义镜像的一套规则dockerfile由多条指令构成,Dockerfile中的每一条指令都会对应于Docker镜像中的每一层1.1docker镜像的分层dockerfile的原理就是镜像分层。Dockerfile中的每个指令都会创建一个新的镜像层(是一个临时的容器,执行完后......
  • docker搭建本地私有仓库详细步骤
    1、首先下载registry镜像dockerpullregistry12、在daemon.json文件中添加私有镜像仓库的地址并重启vim/etc/docker/daemon.json{ "insecure-registries":["192.168.59.111:5000"],#添加此段,“,”不可少,ip是本机IP地址 "registry-mirrors":["https://4abdkxlk.mi......
  • docker的资源控制管理——Cgroups
    前言docker使用cgrqup控制资源,K8S里面也有limit(使用上限)docker通过cgroup来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。Cgroup是Controlgroup的简写,是Linux内核提供的一种限制所使用物理资源的机制,包括CPU、内存......
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、
    通过前面三篇:.NETCore部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus)通过前面三篇文章的介绍,我们已经对.netcore多方案部署到linux下有......
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、
    通过前面三篇:.NETCore部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus)通过前面三篇文章的介绍,我们已经对.netcore多方案部署到linux下有......
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、
    通过前面三篇:.NETCore部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus)通过前面三篇文章的介绍,我们已经对.netcore多方案部署到linux下有......
  • .NET Core部署到linux(CentOS)最全解决方案,入魔篇(使用Docker+Jenkins实现持续集成、
    通过前面三篇:.NETCore部署到linux(CentOS)最全解决方案,常规篇.NETCore部署到linux(CentOS)最全解决方案,进阶篇(Supervisor+Nginx).NETCore部署到linux(CentOS)最全解决方案,高阶篇(Docker+Nginx或Jexus)通过前面三篇文章的介绍,我们已经对.netcore多方案部署到linux下有......
  • docker 修改默认存储路径
    默认情况下,docker镜像的默认存储路径是/var/lib/docker,这相当于直接挂载系统目录下,而一般在搭系统时,这个区都不会太大,所以如果长期使用docker开发应用,就需要把默认的路径更改到需要路径下或外挂存储docker镜像的默认路径dockerinfoDockerRootDir:/var/lib/docke......
  • Docker 修改容器运行参数
    修改docker容器的挂载路径原来指令-v/opt/jenkins:/var/jenkins_home期望指令-v/opt/jenkins:/var/jenkins_home-v/opt/data:/opt/data场景:原来容器中的-v参数需要增加停止所有docker容器sudodockerstop$(dockerps-a|awk'{print$1}'|tail-n+2)......
  • Docker CLI docker compose ps常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......