Centos上利用Docker安装nginx 并且配置https

准备材料

1.一个域名(已经解析到下方服务器)

2.一个服务器

3.域名相关的ssl证书

下面就开始主要步骤

以下指令为 指定nginx的挂载目录

docker run --detach \
--name wx-nginx \
-p 443:443\
-p 80:80 \
-v /home/evan/workspace/wxserver/nginx/data:/usr/share/nginx/html:rw\
-v /home/evan/workspace/wxserver/nginx/config/nginx.conf:/etc/nginx/nginx.conf/:rw\
-v /home/evan/workspace/wxserver/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf:rw\
-v /home/evan/workspace/wxserver/nginx/logs:/var/log/nginx/:rw\
-v /home/evan/workspace/wxserver/nginx/ssl:/ssl/:rw\
-d nginx

安装nginx 然后为nginx配置挂载目录启动

肯定有人问 为什么需要挂载目录,肯定是以后每次修改之后不需要通过指令进入nginx容器内部进行修改,极其方便。

- 1.下载镜像

docker pull nginx

- 2.创建上面指令的相关文件夹

如果你不想创建上面指定的挂载目录,那么就创建自己想要创建的,然后把目录修改一下

以下是我创建的目录 conf.d里面还有一个default.conf配置

docker desktop配置Proxy_docker

docker desktop配置Proxy_ssl证书_02

- 3.创建完文件以后,就需要两个配置文件自行创建 下面是我的模板

nginx.config

#运行nginx的用户
user  root;
#启动进程设置成和CPU数量相等
worker_processes  1;

#全局错误日志及PID文件的位置
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

#工作模式及连接数上限
events {
        #单个后台work进程最大并发数设置为1024
    worker_connections  1024;
}


http {
        #设定mime类型
    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;
    client_max_body_size 10m;
    sendfile        on;
    #tcp_nopush     on;

        #设置连接超时的事件
    keepalive_timeout  65;

        #开启GZIP压缩
    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

default.config

server {      #监听443端口
    listen    443 ssl;
    server_name  yuwenyou.cn;             #域名

    # 增加ssl
    ssl on;        #如果强制HTTPs访问,这行要打开
    ssl_certificate /ssl/1_yuwenyou.cn_bundle.crt;   #域名申请的ssl证书的nginx的crt文件存储路径
    ssl_certificate_key /ssl/2_yuwenyou.cn.key;      #域名申请的ssl证书的nginx的key文件存储路径

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

     # 指定密码为openssl支持的格式
     ssl_protocols  SSLv2 SSLv3 TLSv1.2;

     ssl_ciphers  HIGH:!aNULL:!MD5;  # 密码加密方式
     ssl_prefer_server_ciphers  on;   # 依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码

     # 定义首页索引目录和名称        
     #location / {
       # root   /usr/share/nginx/html;
       # index  index.html index.htm;
     #}
     location / {
            proxy_pass http://xxxxxxx;  #这里是需要代理的地址
            index  index.html index.htm index.jsp;
        }

    #重定向错误页面到 /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
server{   #监听80端口
	listen 80;
    	server_name yuwenyou.cn; 
    	rewrite ^(.*) https://$host$1 permanent;      #所有到达此处的连接转为https
}

- 4.创建完成以后就可以运行指令

docker run --detach \
--name mynginx \
-p 443:443\
-p 80:80 \
-v /home/evan/workspace/wxserver/nginx/data:/usr/share/nginx/html:rw\
-v /home/evan/workspace/wxserver/nginx/config/nginx.conf:/etc/nginx/nginx.conf/:rw\
-v /home/evan/workspace/wxserver/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf:rw\
-v /home/evan/workspace/wxserver/nginx/logs:/var/log/nginx/:rw\
-v /home/evan/workspace/wxserver/nginx/ssl:/ssl/:rw\
-d nginx

以上就是全部配置挂载目录,以及配置文件的全部步骤

接下来说一下配置https的注意点

我是申请了腾讯云的域名,以及腾讯云的免费ssl证书,

在上面的default.config 文件中需要存储的ssl证书文件就在这里存储

# 增加ssl
    ssl on;        #如果强制HTTPs访问,这行要打开
    ssl_certificate /ssl/1_yuwenyou.cn_bundle.crt;   #域名申请的ssl证书的nginx的crt文件存储路径
    ssl_certificate_key /ssl/2_yuwenyou.cn.key;      #域名申请的ssl证书的nginx的key文件存储路径

下面就是我的存储路径

docker desktop配置Proxy_docker_03

而下方这个则代表用域名进行访问nginx

server_name  yuwenyou.cn;             #域名

监听80端口的主要目的就是,将所有http的请求都转为https然后进入443端口

也就是下面这个

server{   #监听80端口
	listen 80;
    	server_name yuwenyou.cn; 
    	rewrite ^(.*) https://$host$1 permanent;      #所有到达此处的连接转为https
}