Docker中安装使用Nginx并安装SSL证书

时间:2025-05-11 07:12:04

一、安装部署Nginx
1.在DockerHub中搜索Nginx的镜像
docker search nginx        #如果不是root用户,请自行在所有命令前面加上sodu


2.拉取最新版本的官方nginx镜像
#如果不写TAG号,会自动追加:latest获取最新版本的
docker pull nginx
 
或者docker pull nginx:指定版本号


3.创建运行nginx容器
docker run --name nginx -d -p 80:80 nginx


4.关联数据卷
 为了后期配置方便,我们将容器中的文件挂载映射到宿主机上。

4.1进入容器内部

docker exec -it nginx /bin/bash


 4.2查看nginx目录结构

cd /etc/nginx/
ls


 nginx目录解析

|-                 //nginx 配置文件 包含 的默认配置文件

|-        //nginx代理的请求头文件

|-         //nginx 代理的配置文件入口,配置反向代理及负载均衡从这个文件开始

4.3查看配置文件

cat


从上面的配置文件中可以看到nginx 的日志文件在默认在/var/log/nginx的目录中;

现在我们已经搞清楚了两个目录文件/etc/nginx 和/var/log/nginx目录结构,那我们需要把这两个目录文件挂载到宿主机下面,方便我们日后的配置及日志的查看工作

4.4退出nginx容器

exit


 4.5创建宿主机的挂载目录

mkdir -p /docker/nginx          #创建nginx的配置目录
mkdir /docker/nginx/logs        #在刚刚创建的nginx目录中创建日志文件目录
mkdir /docker/nginx/cert        #创建证书目录cert
4.6把容器中的和文件拷贝到宿主机上

docker cp dce7bd9bb832:/etc/nginx/ /docker/nginx/
 
docker cp -a dce7bd9bb832:/usr/share/nginx/html /docker/nginx
 
docker cp dce7bd9bb832:/etc/nginx/ /docker/nginx/
4.7停止运行先前的nginx容器并删除

docker stop nginx
docker rm nginx


4.8创建运行容器并关联容器卷

docker run --name nginx -d -p 80:80 -p 443:443 -v /docker/nginx/html:/usr/share/nginx/html -v /docker/nginx/:/etc/nginx/ -v /docker/nginx//:/etc/nginx// -v /docker/nginx/logs/:/var/log/nginx/ -v /docker/nginx/cert/:/etc/nginx/cert/ --privileged=true nginx


访问IP:80即可显示nginx的欢迎主页,至此nginx安装成功。

二、安装SSL证书
1.在宿主机中创建证书目录
在前面已经创建。

 2.将下载解压后的本地证书文件和密钥文件上传到Nginx服务器(宿主机)的证书目录
可以使用第三方工具Xftp或FileZilla上传。

备注:免费SSL证书获取

3.修改Nginx配置文件(),修改与证书相关的配置内容
红字部分为新增内容,设置了HTTP请求自动跳转HTTPS,后期可自己重定向到项目。

user  nginx;

worker_processes  auto;

error_log  /var/log/nginx/ notice;

pid        /var/run/;


 

events {undefined

    worker_connections  1024;

}


 

http {

    include       /etc/nginx/;

    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/  main;

    sendfile        on;

    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx//*.conf;

    #以下属性中,以ssl开头的属性表示与证书配置有关。

    server {

        listen 443 ssl;

        #配置HTTPS的默认访问端口为443。

        #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。

        #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。

        server_name ; #需要将替换成证书绑定的域名。

        ssl_certificate /etc/nginx/cert/6296804_yourdomain.;  #需要将替换成已上传的证书文件的名称。

        ssl_certificate_key /etc/nginx/cert/6296804_yourdomain.; #需要将替换成已上传的证书密钥文件的名称。

        ssl_session_timeout 5m;

        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

        #表示使用的加密套件的类型。

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。

        ssl_prefer_server_ciphers on;

        location / {

            root /usr/share/nginx/html;  #站点目录。

            index ;

        }

        location /portainer/ {

            proxy_pass http://公网IP:9000/;  #代理链接的portainer web端口

        }

    }

    server {

        listen 80;

        server_name ; #需要将替换成证书绑定的域名。

        rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。

    }

}

4.重启nginx容器
docker restart nginx
5.尝试访问,成功
输入的是http://,成功跳转到https://

访问www.域名/portainer/,成功反向代理到portainer的登录界面

 如果没有portainer的可以安装下试试效果

# 安装docker的可视化面板 portainer (数据卷路径不可改变)
docker search portainer
 
docker pull portainer/portainer
 
#单机版启动
docker run --name portainer -d -p 9000:9000 --restart=always -v /var/run/:/var/run/ --privileged=true portainer/portainer

备注:可能有人注意到nginx首页的最后一句话你们是没有的,那是*备案号和ICP备案号,ICP备案和联网备案成功后会给,按照法律法规要求必须展示在首页底部,这个属于建站的内容,大家可以自己百度,给个参考:个人博客建立。
 

相关文章