DotNet跨平台 - docker+nginx+ssl 负载均衡
环境:CentOS7
服务器需要安装:docker、nginx、OpenSSL
一、部署方案
在linux服务器上,我们的Web站点程序采用docker容器部署,为了演示负载均衡,我们在同一台linux服务器上部署两个web站点容器,然后配置nginx做反向代理和负载均衡,再给站点配置SSL证书。
二、安装openssl
//yum安装openssl:
yum install openssl
yum install openssl-devel
三、安装nginx
//安装nginx: curl -o nginx.rpm http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm rpm -ivh nginx.rpm
yum install nginx
四、安装docker
参考:DotNet跨平台 - docker部署.net core2.0项目
五、配置nginx
1.用nginx来做负载均衡
有多种配置方法,这里我们用的是ip_hash,这种模式会根据来源IP和后端配置来做hash分配,确保固定IP只访问一个后端。
其他配置方法可以参考:https://www.cnblogs.com/xusion/articles/2853352.html
我们将两个web站点容器的IP指定为172.18.0.2和172.18.0.3,如何指定IP我们下面会讲
#我们部署了两个web站点容器,端口号分别为8056和8057
upstream blance {
ip_hash;
server 172.18.0.2:8056 weight=5 max_fails=3 fail_timeout=30s;
server 172.18.0.3:8057 weight=5 max_fails=3;
}
2.配置ssl证书
首先需要申请ssl证书,大家可以在阿里云申请免费的证书,这个大家可以参考:https://www.cnblogs.com/osfipin/p/freessl.html
证书申请下来后,将下载下来的两个文件上传至服务器,我们上传至/etc/ssl/cert/ 这个目录,https的默认端口是443,完整的server配置如下:
# Settings for a TLS enabled server.
server {
listen 443 ssl;
server_name yourwebsite.cn; #填写绑定证书的域名
#ssl on;
#root /usr/share/nginx/html;
#index index.html index.htm;
ssl_certificate /etc/ssl/cert/_.yourwebsite.cn_bundle.crt;
ssl_certificate_key /etc/ssl/cert/yourwebsite.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 html;
#主页文件
index index.html index.htm;
proxy_pass http://blance;
}
}
3.配置上传文件大小限制
如果站点需要上传文件,你会发现大一点的文件无法上传成功,那是因为nginx默认是限制文件大小的,我们可以做一下配置,一共有三种方法,可以根据实际需要来配置:
可以选择在http{ }中设置:client_max_body_size 20m;
也可以选择在server{ }中设置:client_max_body_size 20m;
还可以选择在location{ }中设置:client_max_body_size 20m;
三者到区别是:http{} 中控制着所有nginx收到的请求。而报文大小限制设置在server{}中,则控制该server收到的请求报文大小,同理,如果配置在location中,则报文大小限制,只对匹配了location 路由规则的请求生效。
nginx.conf 文件修改后记着要执行 nginx –s reload 命令来生效
六、启动容器
所有的准备工作都做好后,我们执命令来启动站点容器 --name 指定容器名字,--ip指定容器ip:
docker run --restart=always --name yourname --ip 172.18.0.2 -d -p 8056:8056 website:1.0
docker run --restart=always --name yourname --ip 172.18.0.3 -d -p 8057:8056 website:1.0
我们通过docker ps命令来查看我们的两个站点容器的运行状态,如果都正常启动了,那么恭喜你!
七、一些知识点
#每次重启站点容器,站点的IP就可能发生变化,这样我们在nginx.conf里配置的IP就会失效,所以我们上面启动容器的时候指定了IP。
#获取容器内部IP使用命令
docker inspect 容器ID
#然后过滤出 IPAddress 即可查看容器的 IP
docker inspect 容器ID | grep IPAddress
#docker network命令用来管理docker的网络,首先创建一个网络,命名为mynetwork,然后运行容器,指定该网络
docker network create --subnet=172.18.0.0/16 mynetwork
docker run --restart=always --name yourname --net mynetwork --ip 172.18.0.3 -d -p 8057:8056 website:1.0
有时候我们需要进入容器内部查看一下文件,因为容器内没有安装vim,所以需要我们手动安装一下
mv /etc/apt/sources.list /etc/apt/sources.list.bak
echo "deb http://mirrors.163.com/debian/ jessie main non-free contrib" >> /etc/apt/sources.list
echo "deb http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie main non-free contrib" >>/etc/apt/sources.list
echo "deb-src http://mirrors.163.com/debian/ jessie-proposed-updates main non-free contrib" >>/etc/apt/sources.list
#更新安装源
apt-get update
apt-get install -y vim
完整的nginx.conf如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid; # Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf; events {
worker_connections 1024;
} http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$upstream_addr "'; access_log /var/log/nginx/access.log main; sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 10m; include /etc/nginx/mime.types;
default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf; upstream blance {
ip_hash;
server 172.18.0.2:8056 weight=5 max_fails=3 fail_timeout=30s;
server 172.18.0.3:8057 weight=5 max_fails=3;
} server {
listen 80;
server_name yourwebsite.cn;
#root /usr/share/nginx/html;
rewrite ^(.*)$ https://$server_name$1 permanent; # 把http的域名请求转成https # Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf; location / {
root html;
index index.html index.htm;
proxy_pass http://yourwebsite.cn;
} error_page 404 /404.html;
location = /40x.html {
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
} # Settings for a TLS enabled server.
server {
listen 443 ssl;
server_name yourwebsite.cn; #填写绑定证书的域名
#ssl on;
#root /usr/share/nginx/html;
#index index.html index.htm;
ssl_certificate /etc/ssl/cert/_.yourwebsite.cn_bundle.crt;
ssl_certificate_key /etc/ssl/cert/yourwebsite.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 html;
#主页文件
index index.html index.htm;
proxy_pass http://blance;
}
}
}
DotNet跨平台 - docker+nginx+ssl 负载均衡的更多相关文章
- 同主机下Docker+nginx+tomcat负载均衡集群搭建
想用Docker模拟一下nginx+tomcat集群部署,今天折腾了一天,遇坑无数,终于在午夜即将到来之际将整个流程走通,借本文希望给同样遇到类似问题的小伙伴们留点线索. 主机环境是CentOS 7, ...
- docker+nginx实现负载均衡
配置nginx配置文件(配置文件运行时是会加载到docker进程中)先建立nginx相关文件和目录,对应下面启动命令中的挂载位置,把主配置文件nginx.conf放到对应位置“/etc/docker/ ...
- dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目
参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...
- 解决docker中使用nginx做负载均衡时并发过高时的一些问题
# 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...
- Docker安装nginx以及负载均衡
首先在linux系统中新建一个data文件夹进行nginx容器的创建--即为:mkdir data. 一:第一次 1 第一步: 使用 docker pull nginx将nginx的镜像从仓库下载下来 ...
- nginx+tomcat负载均衡
最近练习nginx+tomcat负载均衡.根据一些资料整理了大体思路,最终实现了1个nginx+2个tomcat负载均衡. 安装JDK 1>进入安装目录,给所有用户添加可执行的权限 #chmod ...
- 【Nginx】配置Nginx的负载均衡
参考的优秀文章 tomcat配置文件server.xml详解 AJP协议总结与分析 Using nginx as HTTP load balancer 在本机运行2个Tomcat 现需要运行两个Tom ...
- nginx+tomcat负载均衡策略
測试环境均为本地,測试软件为: nginx-1.6.0,apache-tomcat-7.0.42-1.apache-tomcat-7.0.42-2.apache-tomcat-7.0.42-3 利用n ...
- Nginx+Keepalived负载均衡高可用
Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务 http 80 b.负载均衡(方向代理proxy) ...
- Nginx实现负载均衡功能
一.什么是Nginx? Nginx是一款轻量级的Web 服务器.反向代理服务器.电子邮件(IMAP/POP3)代理服务器. 二.Nginx的优点: 高并发连接:官方测试Nginx能够支撑5万并发连接, ...
随机推荐
- python之日志记录loguru
安装: pip install loguru 基础使用: from loguru import logger logger.debug("This is a debug...") ...
- Refact.ai Match 1 (Codeforces Round 985, Div. 1 + Div. 2)
Contest Link A Easy math problem. Submission B 大胆贪心猜结论,容易想到一个套路化的 stack 做法. Submission C 容易想到是个二分题,二 ...
- HTML img标签
1.基本用法 <img src="kof5.jpg" alt="特瑞"> src属性为图片的链接地址,如果图片加载失败,代替图片的就是alt属性设置 ...
- .NET Core 基于 IHostedService 实现后台定时任务
.NET Core 基于 IHostedService 实现后台定时任务 迷恋自留地 NET Core 2.0 引入了 IHostedService ,基于它可以很方便地执行后台任务,.NET Cor ...
- regsvr32.exe使用
regsvr32.exe使用详解: regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是: regsvr32 [/u] [/s] [/n] [ ...
- ksmbd 条件竞争漏洞挖掘:思路与案例
ksmbd 条件竞争漏洞挖掘:思路与案例 ksmbd 条件竞争漏洞挖掘:思路与案例.drawio 本文介绍从代码审计的角度分析.挖掘条件竞争.UAF 漏洞思路,并以 ksmbd 为实例介绍审计的过程和 ...
- Redis应用—2.在列表数据里的应用
大纲 1.基于数据库 + 缓存双写的分享贴功能 2.查询分享贴列表缓存时的延迟构建 3.分页列表惰性缓存方案如何节约内存 4.用户分享贴列表数据按页缓存实现精准过期控制 5.用户分享贴列表的分页缓存的 ...
- 07C++选择结构(1)
一.基础知识 1.关系运算符 因为我们要对条件进行判断,必然会用到关系运算符: 名称 大于 大于等于 小于 小于等于 等于 不等于 符号 > >= < <= == != 关系表 ...
- [WPF UI] 为 AvalonDock 制作一套 Fluent UI 主题
AvalonDock 是我这些天在为自己项目做技术选型时发现的一个很好的开源项目,它是一个用于 WPF 的布局控件库,可以帮助我们实现类似 Visual Studio 的布局效果.因为它自带的一些样式 ...
- 明察秋毫--用ss工具统计网络栈内存使用
前言 本文介绍了用ss工具来统计一下当前网络栈的内存使用情况 环境准备 组件 版本 操作系统 Ubuntu 22.04.4 LTS 查看socket内存相关参数,-m 参数 ss -tm State ...