nginx docker容器配置https(ssl)

证书生成

首先须要有https的证书文件,若是你已经向证书受权中心购买了证书,能够跳过这步,这里介绍如何生成自签名证书,自签名证书是指不是证书受权中心(Certificate Authority)颁发的证书,而是在我的计算机上经过相关工具本身生成的证书,通常用于测试,不可用于生产环境。html

为了方便管理证书(证书生成过程当中会产生不少文件),咱们能够单首创建一个目录用于存放证书文件,下面是经过openssl工具生成证书的过程。nginx

1. 建立目录

$ cd ~
$ mkdir ssl
$ cd ssl

2. 建立秘钥文件

建立秘钥文件definesys.key,名称能够自定义,须要指定密码(随意密码便可)git

$ openssl genrsa -des3 -out definesys.key 1024
Generating RSA private key, 1024 bit long modulus
.......++++++
..................++++++
e is 65537 (0x10001)
Enter pass phrase for definesys.key:
Verifying - Enter pass phrase for definesys.key:

3. 建立csr证书

须要输入相关信息,比较重要的是Common Name,这个是访问nginx的地址docker

$ openssl req -new -key definesys.key -out definesys.csr

Enter pass phrase for definesys.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Definesys
Organizational Unit Name (eg, section) []:Definesys
Common Name (e.g. server FQDN or YOUR name) []:www.definesys.com
Email Address []:jianfeng.zheng@definesys.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:能够不用输
An optional company name []:能够不用输

#此时文件
$  ssl ll
total 16
-rw-r--r--   1 asan  staff  733  1  3 23:57 definesys.csr
-rw-r--r--   1 asan  staff  963  1  3 23:55 definesys.key

4. 去除秘钥密码

nginx使用私钥时须要去除密码,执行如下命令时须要输入秘钥的密码shell

$ cp definesys.key definesys.key.bak
$ openssl rsa -in definesys.key.bak -out definesys.key

Enter pass phrase for definesys.key.bak:
writing RSA key

5. 生成crt证书

$ openssl x509 -req -days 3650 -in definesys.csr -signkey definesys.key -out definesys.crt

Signature ok
subject=/C=CN/ST=Shanghai/L=Shanghai/O=Definesys/OU=Definesys/CN=www.definesys.com/emailAddress=jianfeng.zheng@definesys.com
Getting Private key

#此时文件列表

$  ssl ll
total 32
-rw-r--r--   1 asan  staff  1017  1  4 00:03 definesys.crt
-rw-r--r--   1 asan  staff   733  1  3 23:57 definesys.csr
-rw-r--r--   1 asan  staff   887  1  4 00:02 definesys.key
-rw-r--r--   1 asan  staff   963  1  4 00:01 definesys.key.bak

nginx容器配置

1. 证书文件上传

definesys.crt文件和definesys.key文件拷贝到服务器上,假设你服务器上nginx的配置文件在/etc/nginx/目录下,能够在该目录下建立一个文件夹,这里命名certs,将文件拷贝至该文件夹下。安全

2. 配置文件修改

修改配置文件nginx.conf服务器

server {
    listen       443 ssl;
    server_name  www.definesys.com;

    ssl_certificate      /etc/nginx/certs/definesys.crt;
    ssl_certificate_key  /etc/nginx/certs/definesys.key;
    
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
    root /usr/share/nginx/html;
    index  index.html index.htm;
    }
}

若是server配置不在nginx.conf文件上,能够在conf.d文件夹下找.conf后缀的文件,通常有个default.conf文件。session

3. 启动容器

docker run -d --restart=unless-stopped -p 443:443 -v /etc/nginx/:/etc/nginx -v /var/run/docker.sock:/tmp/docker.sock:ro -v /u01/application:/usr/share/nginx/html nginx

访问https://localhost验证配置是否正确,若是可以正常访问说明配置成功,因为是自签名证书,打开时会提示证书不安全,忽略便可。app

相关文章
相关标签/搜索