笔记|docker + nginx、http转https、https转http,nginx代理tcp端口(redis)
【笔记|docker + nginx、http转https、https转http,nginx代理tcp端口(redis)】
目录
-
- 一、基础环境准备
-
- 1、安装docker
- 2、下载nginx镜像
- 二、http转https、https转http的应用
-
- 1、nginx反向代理单个web项目
-
- ①准备配置文件
- ②创建容器
- 2、nginx安装ssl证书(外部https转内部http,http重定向到https)
-
- ①准备配置文件
- ②创建容器
- 3、一个nginx代理多个web项目
-
- ①准备配置文件
- ②创建容器
- 三、使用nginx代理tcp端口(以redis为例)
-
- 1、安装redis
- 2、修改nginx.conf 配置文件
- 3、启动nginx
注:本次运行环境,考虑到docker可移植性比较强,所以本次环境全部以docker为基础做的,如果你的nginx直接装在主机中,路径与容器内部是不同的,仅可参考配置文件内容
- 测试环境:
操作系统:centos 7.9(GUI 桌面版本、最小化安装均可)
docker版本:19.03.5
nginx:1.21.3 - 以下为nginx简介,后边步骤中,将根据需要使用以下内容,注意以下的目录可以根据自己喜好修改名称及位置,但是要确保和配置文件以及容器挂载的路径相匹配
-p 表示映射端口(冒号左侧为主机端口)
-v 表示挂载目录(冒号左侧为主机目录)
-d 表示后台运行
docker run --name nginx -p 16379:6379 -p 443:443 -p 80:80 \
-v /data/nginx/data:/usr/share/nginx/html \
-v /data/nginx/config/nginx.conf:/etc/nginx/nginx.conf\
-v /data/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /data/nginx/logs:/var/log/nginx \
-v /data/nginx/ssl:/ssl \
-d nginx:1.21.3
一、基础环境准备 1、安装docker
- 查看内核版本,需要高于3.10,并且系统是64位
[root@k8s-master ~]# uname -r
- 直接使用yum install docker 默认拉取最早版本的docker,我个人在使用中出现了问题,也没做过多的资料查找,选择安装19版本的
- 如果之前安装过老版本docker,需要先进行卸载
[root@k8s-master ~]# yum remove docker*
2、下载nginx镜像
- 拉取nginx镜像
[root@localhost ~]# docker pull nginx
- 查看镜像版本
[root@localhost ~]# docker image inspect nginx:latest | grep -i version
- 可更换镜像标签,保存镜像,方便后期使用
[root@localhost ~]# docker tag nginx:latest nginx:1.21.3
[root@localhost ~]# docker save -o nginx.tar nginx:1.21.3
二、http转https、https转http的应用 1、nginx反向代理单个web项目
①准备配置文件
- 创建文件default.conf,写入以下内容:
server {listen80;
#表示监听nginx容器得80端口
server_namelocalhost;
#填写主机名或域名
location / {proxy_pass http://192.168.1.1:8080;
#需要代理的内网主机IP以及8080端口号
}
}
②创建容器
- 将default.conf 放入主机存储的目录,主机目录:/data/nginx/config/conf.d/
- 与之对应的容器目录:/etc/nginx/conf.d/
- 必须先准备好文件,再去创建容器
[root@localhost ~]# docker run --name nginx -p 80:80 \
-v /data/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-d nginx:1.21.3
- 容器启动完成后,在浏览器中输入装有nginx的主机IP地址,即可跳转到所代理的web项目
①准备配置文件
- 首先在阿里云或其它地方申请好证书,这里不做赘述了
- 创建文件default.conf,写入以下内容:
server {#listen80;
#此处仅演示了证书功能,未引入80端口
listen443 ssl;
server_namelocalhost;
#这里也可以用你的域名
#rewrite ^(.*)$ https://$host$1;
#如果需要把http重定向到https,尝试以下方法
#return 301 https://$host$request_uri;
#如果需要把http重定向到https,尝试以下方法
ssl_certificate /ssl/xxx.com.pem;
# xxx.com.pem这名称根据实际做修改
ssl_certificate_key /ssl/xxx.com.key;
# xxx.com.key这名称根据实际做修改
ssl_session_timeout 5m;
# 指定密码为openssl支持的格式
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
#依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码location / {proxy_pass http://192.168.1.1:8080;
#需要代理的内网主机IP以及8080端口号,根据实际需要做调整
}
error_page500 502 503 504/50x.html;
location = /50x.html {root/usr/share/nginx/html;
}
}
②创建容器
- 将default.conf 放入主机存储的目录,主机目录:/data/nginx/config/conf.d/
- 将证书放入主机存储的目录,主机目录:/data/nginx/ssl/
docker run --name nginx -p 443:443 -p 80:80 \
-v /data/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /data/nginx/ssl:/ssl \
-d nginx:1.21.3
容器启动完成后,在浏览器中输入“https://域名",即可跳转到所代理的web项目
3、一个nginx代理多个web项目
①准备配置文件
- 首先在阿里云或其它地方申请好证书,这里不做赘述了
- 创建文件default.conf,写入以下内容:
server {#listen80;
#此处仅演示了证书功能,未引入80端口
listen443 ssl;
server_name1.xxx.com;
#这里用你的第1个域名
#rewrite ^(.*)$ https://$host$1;
#如果需要把http重定向到https,尝试以下方法
#return 301 https://$host$request_uri;
#如果需要把http重定向到https,尝试以下方法
ssl_certificate /ssl/xxx.com.pem;
# xxx.com.pem这名称根据实际做修改
ssl_certificate_key /ssl/xxx.com.key;
# xxx.com.key这名称根据实际做修改
ssl_session_timeout 5m;
# 指定密码为openssl支持的格式
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
#依赖SSLv3和TLSv1协议的服务器密码将优先于客户端密码location / {proxy_pass http://192.168.1.1:8080;
#需要代理的内网主机IP以及8080端口号,根据实际需要做调整
}
error_page500 502 503 504/50x.html;
location = /50x.html {root/usr/share/nginx/html;
}
}# 以下就是复制上边的内容,然后把域名和需要代理的内网主机做修改就可以了
server {listen443 ssl;
server_name2.xxx.com;
#这里用你的第2个域名
ssl_certificate /ssl/xxx.com.pem;
ssl_certificate_key /ssl/xxx.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {proxy_pass http://192.168.1.2:8080;
}
error_page500 502 503 504/50x.html;
location = /50x.html {root/usr/share/nginx/html;
}
}
②创建容器
- 将default.conf 放入主机存储的目录,主机目录:/data/nginx/config/conf.d/
- 将证书放入主机存储的目录,主机目录:/data/nginx/ssl/
docker run --name nginx -p 443:443 -p 80:80 \
-v /data/nginx/config/conf.d/default.conf:/etc/nginx/conf.d/default.conf \
-v /data/nginx/ssl:/ssl \
-d nginx:1.21.3
容器启动完成后,在浏览器中输入“https://域名",即可跳转到所代理的web项目
三、使用nginx代理tcp端口(以redis为例) 1、安装redis
- 拉取nginx镜像
[root@localhost ~]# docker pull redis
- 启动 redis(此处仅做测试,不做过多操作,生产环境中,建议把数据库和配置文件挂载出来的)
[root@localhost ~]# docker run -p 6379:6379 -d redis
2、修改nginx.conf 配置文件
- 修改 nginx.conf,将以下一行代码注释掉(次处仅演示对tcp端口的转发功能,所以舍弃了 default.conf 这个配置文件中的内容,如果你有 http 转发的需求,就根据实际情况做调整)
[root@localhost ~]# vi /data/nginx/config/nginx.conf
# include /etc/nginx/conf.d/*.conf;
- 在nginx.conf末尾处增加代码段
stream {upstream redis {server *主机IP地址或容器地址*:6379;
}
server {listen6379;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass redis;
}
}
或通过以下格式增加
stream {server {listen6379;
# 如果需要加证书,就在这个部分添加就可以了,参考上边ssl证书部分的内容添加即可
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass *主机IP地址或容器地址*:6379;
}
}
3、启动nginx
- 将nginx的6379端口映射到主机的16379端口,后期可通过次端口方位redis
[root@localhost ~]# docker run --name nginx -p 16379:6379 \
-v /data/nginx/config/nginx.conf:/etc/nginx/nginx.conf \
-d nginx:1.21.3
现在就可以通过 redis 的工具软件进行连接尝试了
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- Android中的AES加密-下
- 【读书笔记】贝叶斯原理
- 【韩语学习】(韩语随堂笔记整理)
- 人性的弱点-笔记
- 读书笔记:博登海默法理学|读书笔记:博登海默法理学 —— 正义的探索(1)
- D034+3组苏曼+《写作这回事》读书笔记
- 《自我的追寻》读书笔记3
- 最有效的时间管理工具(赢效率手册和总结笔记)