docker安装nginx并配置ssl证书

一、准备SSL证书

腾讯云申请
在这里插入图片描述

阿里云申请
在这里插入图片描述
还有一步DNS验证,因为我这边已经申请了证书,不好演示了。也挺简单的,按照教程来就行了,在域名解析里面加一条DNS解析记录,然后点击验证,通过了,就申请成功了,然后下载nginx版本的证书压缩包,解压上传到服务器就可以了

*稍微需要注意下,腾讯云和阿里云的证书文件后缀有点不一样,腾讯云是xx.crt和xx.key,阿里云是xx.pem和xx.key,都可以正常使用

二、下载最新nginx镜像

docker pull nginx

三、新建几个目录,把nginx容器内的配置文件挂载到主机上

mkdir -p /usr/local/nginx/{
    
    conf,html,logs,ssl}

这一步的目的是:1方便后期修改配置文件 2容器删除后配置文件也会删除,相当于多了个备份

四、启动一个nginx临时容器,把配置文件复制过来,然后删除

#启动一个nginx容器
docker run --name nginx -p 80:80 -d nginx
#复制配置文件
docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/
docker cp nginx:/etc/nginx/conf.d /usr/local/nginx
#复制完了,可以把这个容器删了,先停止再删除
docker stop nginx
docker rm nginx

这一步是为了获得正确的nginx配置文件格式

五、把SSL证书上传到服务器

#上传到这个目录下面,ssl是我们刚才创建的目录
/usr/local/nginx/ssl

六、修改nginx.conf配置文件,配置SSL证书

server {
    
    
	listen 80;
	#填写绑定证书的域名
	server_name _;
	#把http的域名请求转成https,相当于用户访问http也可以自动跳转到https,避免出现网页提示不安全
	return 301 https://$host$request_uri; 
}

server {
    
    
    listen  443 ssl;
	server_name  _; 
	#证书文件名称
    ssl_certificate_key /etc/nginx/ssl/xx.key;
    #私钥文件名称 .crt和.pem都可以用
    ssl_certificate /etc/nginx/ssl/xx.pem; 
    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;

    root         /usr/local/nginx/html;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    #首页
    location / {
    
    
       index index.php index.html index.htm;
       client_max_body_size  50m;
       #limit_rate 100k; 限制下载速度

       include fastcgi_params; 
       #rewrite ^.*$ /index.php$request_uri break;
       #ThinkPhp访问异常可以用下面的代码
       if (!-e $request_filename) {
    
    
           rewrite  ^(.*)$  /index.php?s=/$1  last;
           break;
       }
     
       fastcgi_pass 127.0.0.1:9000;
       fastcgi_index index.php;
       fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
   }
}

*注意:虽然证书存放位置是/usr/local/nginx/ssl,但是配置里面要写/etc/nginx/ssl而不是/usr/local/nginx/ssl,不然启动会报错,因为配置里面的绝对路径,都是在nginx容器里面的地址,和主机里面的目录地址是两个东西,后面启动目录挂载的时候,是可以读到证书的,不用担心。

七、正式启动nginx

docker run --name nginx -p 80:80 -p 443:443 \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf/ \
-v /usr/local/nginx/conf.d:/etc/nginx/conf.d/ \
-v /usr/local/nginx/logs:/var/log/nginx \
-v /usr/local/nginx/ssl:/etc/nginx/ssl \
--privileged=true -d --restart=always nginx
--name nginx //容器名称
-p 80:80 -p 443:443 //将容器的80端口映射到服务器的80端口,将容器的443端口映射到服务器的443端口
-v aa:bb //将主机的aa目录挂载到容器的bb
--privileged=true //使用该参数,container内的root拥有真正的root权限,避免后面操作时提示无权限
--restart=always //能够使我们在重启docker时,自动启动相关容器

八、检查nginx是否成功启动

在这里插入图片描述
up运行中

在这里插入图片描述
访问服务器,提示这个,就是成功启动了

九、访问失败?

#看下nginx日志,有没有报错
docker logs nginx

检查下服务器的80/443端口都打开吗?看下服务器安全组里面开了吗?还有问题可以评论留言

猜你喜欢

转载自blog.csdn.net/LuoHuaX/article/details/127320361