一、安装部署Nginx
1.在DockerHub中搜索Nginx的镜像
docker search nginx #如果不是root用户,请自行在所有命令前面加上sodu
2.拉取最新版本的官方nginx镜像
#如果不写TAG号,会自动追加:latest获取最新版本的
docker pull nginx
或者docker pull nginx:指定版本号
3.创建运行nginx容器
docker run --name nginx -d -p 80:80 nginx
4.关联数据卷
为了后期配置方便,我们将容器中的文件挂载映射到宿主机上。
4.1进入容器内部
docker exec -it nginx /bin/bash
4.2查看nginx目录结构
cd /etc/nginx/
ls
nginx目录解析
|- //nginx 配置文件 包含 的默认配置文件
|- //nginx代理的请求头文件
|- //nginx 代理的配置文件入口,配置反向代理及负载均衡从这个文件开始
4.3查看配置文件
cat
从上面的配置文件中可以看到nginx 的日志文件在默认在/var/log/nginx的目录中;
现在我们已经搞清楚了两个目录文件/etc/nginx 和/var/log/nginx目录结构,那我们需要把这两个目录文件挂载到宿主机下面,方便我们日后的配置及日志的查看工作
4.4退出nginx容器
exit
4.5创建宿主机的挂载目录
mkdir -p /docker/nginx #创建nginx的配置目录
mkdir /docker/nginx/logs #在刚刚创建的nginx目录中创建日志文件目录
mkdir /docker/nginx/cert #创建证书目录cert
4.6把容器中的和文件拷贝到宿主机上
docker cp dce7bd9bb832:/etc/nginx/ /docker/nginx/
docker cp -a dce7bd9bb832:/usr/share/nginx/html /docker/nginx
docker cp dce7bd9bb832:/etc/nginx/ /docker/nginx/
4.7停止运行先前的nginx容器并删除
docker stop nginx
docker rm nginx
4.8创建运行容器并关联容器卷
docker run --name nginx -d -p 80:80 -p 443:443 -v /docker/nginx/html:/usr/share/nginx/html -v /docker/nginx/:/etc/nginx/ -v /docker/nginx//:/etc/nginx// -v /docker/nginx/logs/:/var/log/nginx/ -v /docker/nginx/cert/:/etc/nginx/cert/ --privileged=true nginx
访问IP:80即可显示nginx的欢迎主页,至此nginx安装成功。
二、安装SSL证书
1.在宿主机中创建证书目录
在前面已经创建。
2.将下载解压后的本地证书文件和密钥文件上传到Nginx服务器(宿主机)的证书目录
可以使用第三方工具Xftp或FileZilla上传。
备注:免费SSL证书获取
3.修改Nginx配置文件(),修改与证书相关的配置内容
红字部分为新增内容,设置了HTTP请求自动跳转HTTPS,后期可自己重定向到项目。
user nginx;
worker_processes auto;
error_log /var/log/nginx/ notice;
pid /var/run/;
events {undefined
worker_connections 1024;
}
http {
include /etc/nginx/;
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/ main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx//*.conf;
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
listen 443 ssl;
#配置HTTPS的默认访问端口为443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
#如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
server_name ; #需要将替换成证书绑定的域名。
ssl_certificate /etc/nginx/cert/6296804_yourdomain.; #需要将替换成已上传的证书文件的名称。
ssl_certificate_key /etc/nginx/cert/6296804_yourdomain.; #需要将替换成已上传的证书密钥文件的名称。
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #表示使用的TLS协议的类型。
ssl_prefer_server_ciphers on;
location / {
root /usr/share/nginx/html; #站点目录。
index ;
}
location /portainer/ {
proxy_pass http://公网IP:9000/; #代理链接的portainer web端口
}
}
server {
listen 80;
server_name ; #需要将替换成证书绑定的域名。
rewrite ^(.*)$ https://$host$1; #将所有HTTP请求通过rewrite指令重定向到HTTPS。
}
}
4.重启nginx容器
docker restart nginx
5.尝试访问,成功
输入的是http://,成功跳转到https://
访问www.域名/portainer/,成功反向代理到portainer的登录界面
如果没有portainer的可以安装下试试效果
# 安装docker的可视化面板 portainer (数据卷路径不可改变)
docker search portainer
docker pull portainer/portainer
#单机版启动
docker run --name portainer -d -p 9000:9000 --restart=always -v /var/run/:/var/run/ --privileged=true portainer/portainer
备注:可能有人注意到nginx首页的最后一句话你们是没有的,那是*备案号和ICP备案号,ICP备案和联网备案成功后会给,按照法律法规要求必须展示在首页底部,这个属于建站的内容,大家可以自己百度,给个参考:个人博客建立。