1、证书申请(在自己的域名商哪里申请,反正有免费的)
2、证书下载(nginx版本的)
3、docker上pull下最新的nginx镜像(这里讲的不是利用自定义镜像的方式,存本地挂载)
4、在宿主机上找一个存放软件的地方放如下配置:
我习惯的地址是 /usr/software/nginx/XXXX. (software 下存放各类挂载)
4.1、conf(作为配置文件,挂载使用)
4.2、ssl(存放ssl证书,我是放在conf里面的,在运行的时候就不用写多一个 -v了)
4.3、logs(日志啦)
可以仿照我的地址来放挂载文件,这样也方便其他镜像挂载数据的记录(有个归类的好习惯)
5、先随意运行下nginx的镜像,目的是为了生成配置文件(也可以直接跳到第7步,在conf里面生创建一个nginx.conf的文件)
docker run -d --name nginx -p 80:80 nginx
6、当执行成功之后,就可以运行下面的命令,把镜像里面的配置文件复制到宿主机上
docker cp <容器名称或ID>:<容器内文件夹路径> <宿主机目标路径>
7、复制完之后要关掉并且删掉docker上的nginx服务
docker stop <容器名称或ID>
docker rm <容器名称或ID>
8、复制成功之后,就需要修改配置文件了,打开复制到宿主机上的配置文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
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;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name XXX; (填写自己的域名,注意前面是有空格的)
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name XXX; (填写自己的域名,注意前面是有空格的)
ssl_certificate /etc/nginx/xxx; (这里xxx填写自己的证书 一般是pem、crt结尾的)
ssl_certificate_key /etc/nginx/xxx;(这里xxx填写自己的证书 是key结尾的)
location / {
proxy_pass http://127.0.0.1:81;(注意,因为nginx是用容器启动的,所以不能用127.0.0.1和localhost,自己找到服务器的内网,填上即可)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_ssl_server_name on;
proxy_ssl_verify off;
}
}
}
9、配置修改好了之后,就执行启动命令
docker run -d --name nginx -p 80:80 -p 443:443 -v /usr/software/nginx/conf:/etc/nginx -v /usr/software/nginx/log:/var/log/nginx nginx
注意里面的挂载地址,切记要跟配的一样
10、如果https不能访问,一般的问题如下:
10.1、防火墙要放开,443、80(服务器、宿主机都操作吧)
10.2、ssl证书挂载的路径有问题
10.3、跳转的地址,上面有提过,不能用localhost、127.0.0.1之类的本地地址,需要指向宿主机(即服务器的ip),用内网ip就好
之前基本上都是用阿里的SLB的,方便啊,但是造成了对这一块的生疏,虽然以前配置过,但都是直接在服务器上配置的,没有使用镜像容器,不过,这一次配完之后,长记性了 哈哈哈。
PS:如果有不对的地方,同处IT界的朋友们,麻烦您指出问题所在,避免后面后看到这篇文章的朋友误导了。