docker配置nginx并安装ssl证书

版权声明:本文章由BlackCarDriver原创,欢迎评论和转载 https://blog.csdn.net/BlackCarDriver/article/details/88904350

docker配置nginx并安装ssl证书

今日终于为我的个人网站 blackcardriver.cn 配置了ssl证书,虽然只是很简单的事情,但是由于对nginx的配置不够了解,
浪费了很多不该花的时间,经过这趟旅程,更加学会了解原理的重要性。。。

1. docker 中配置 nginx

想要配置nginx,首先要了解 nginx 的目录结构以及配置文件的位置,各个语句代表的含义。
nginx中有几个比较重要的配置文件:nginx.conf, default.conf …和一些比较重要的目录,例如日志的
输出目录。详情可以到这里看:nginx配置文件目录笔记

nginx.conf是最主要的配置文件,里面其中一些语句便指定了其他目录的一些配置文件,其中边包括了 default.conf.
刚安装好的nginx目录里的default.conf 去掉注释后是这样的 (注释占文件的大部分) :


server {
	listen 80 default_server;
	listen [::]:80 default_server;
	root /var/www/html;
	index index.html index.htm index.nginx-debian.html;
	server_name _;
	location / {
		try_files $uri $uri/ =404;
	}
}

我们在这里可以修改nginx 工作时监听的端口,还有你做好的网站放置的目录,还有指定找不到资源时返回的网页等。
一下是我的配置,仅供参考:

server {	
    listen  80;										 #监听端口
    server_name l blackcardriver.cn;	 #站点名称
    location / {
        root /www;								#首页所在的文件夹
        index index.html index.htm;		#首页位置
    }
    #指定若发生错误返回什么页面 
    error_page 500 502 503 503 404 /50x.html; 
    location = /50.html {
        root /www;
    }
}

如果你是直接在服务器中部署,可以直接修改default.conf。
下面谈谈在docker中配置nginx的方法。
docker中有几个特别重要的概率,其中有:
端口映射
目录挂载
因为docker容器是与主机隔绝的,若容器里的程序监听80端口,那么这个端口跟容器所在的主机端口没有
联系,除非你特别指明它。挂载也是同样的道理。nginx 容器里有很多跟宿主机目录相同的路径,需要区分
对待,除非你特别指明它,否则他们是相互隔离的。
一下是我的运行nginx的脚本:run-nginx.sh

sudo docker run --name nginx --rm  -p 80:80 \
-v /home/ubuntu/DockerWorkPlace/Nginx/config:/etc/nginx/conf.d \
-v /home/ubuntu/DockerWorkPlace/Nginx/logs:/var/log/nginx \
-v /home/ubuntu/DockerWorkPlace/Nginx/www:/www \
nginx:latest

稍作解释:
-p 80:81 是指将本机的80端口分配给容器的81端口,想象一下,如果你是在主机中直接安装nginx,
那么想同时运行几个nginx服务是十分困难的,因为一个端口只能让一个程序占用。docker给这种情况
极大的遍历,你不需要修改代码甚至是配置,只需要将启动命令中前面的80改成其他就可以了,爽。
还有-v是挂载目录,我将配置文件的目录,还有放置网站的目录,以及查看日志的目录挂载出来了,
通过这样的方式来与容器进行交互。

2. 安装ssl证书

如果你的网站还是用http连接,那么在某些浏览器(例如火狐)中看网页是可能会被提示或警告连接不安全,
特别是在登录等页面,给用户带来十分不佳的体验。这时最好给服务器安装一个ssl证书。然后稍作配置,
这样下次就可以用https来进行连接。
获取证书的方法有很多,我申请不到半天就收到了申请成功的回复以下是证书的样子,blackcardriver.cn便是
申请证书的网站,注意申请时不要乱填。
certicicate
然后在default.conf中稍作配置,加上在443端口监听的serve,注意http连接默认是80端口,https默认是443。

server{
  listen 443 ssl;
  #ssl on;
  ssl_certificate /certificate/1_www.blackcardriver.cn_bundle.crt;
  ssl_certificate_key /certificate/2_www.blackcardriver.cn.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;
   location / {
        root /www;
        index index.html;
    }
    error_page 500 502 503 503 404 /404x.html;
    location = /404x.html {
        root /emptypage;
    }
}

注意,ssl_certificate后面跟的是证书的目录,自行设置。因为我的证书将放在容器外面,所以在启动的命令中还要将这个目录
挂载出去。不要忘记还要映射443端口。最后我的启动脚本是长这个样的:
在这里插入图片描述
最后,如果你想通过配置nginx来重定向http的请求到https,可以在监听80端口的那个serve中
加上:rewrite ^(.*) https://$host$1 permanent;


到此为止,本人菜鸟一只,若发现错漏之处望指出。

猜你喜欢

转载自blog.csdn.net/BlackCarDriver/article/details/88904350