环境: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 负载均衡的更多相关文章

  1. 同主机下Docker+nginx+tomcat负载均衡集群搭建

    想用Docker模拟一下nginx+tomcat集群部署,今天折腾了一天,遇坑无数,终于在午夜即将到来之际将整个流程走通,借本文希望给同样遇到类似问题的小伙伴们留点线索. 主机环境是CentOS 7, ...

  2. docker+nginx实现负载均衡

    配置nginx配置文件(配置文件运行时是会加载到docker进程中)先建立nginx相关文件和目录,对应下面启动命令中的挂载位置,把主配置文件nginx.conf放到对应位置“/etc/docker/ ...

  3. dotnet跨平台 - 使用Nginx+Docker Compose运行.NETCore项目

    参考文档: https://docs.docker.com/install/linux/docker-ce/centos/ http://www.dockerinfo.net/document htt ...

  4. 解决docker中使用nginx做负载均衡时并发过高时的一些问题

    # 解决docker中使用nginx做负载均衡时并发过高时的一些问题 1.问题产生原因: 由于通过nginx作为负载均衡服务,在访问并发数量达到一定量级时jmeter报错. nginx日志关键信息:a ...

  5. Docker安装nginx以及负载均衡

    首先在linux系统中新建一个data文件夹进行nginx容器的创建--即为:mkdir data. 一:第一次 1 第一步: 使用 docker pull nginx将nginx的镜像从仓库下载下来 ...

  6. nginx+tomcat负载均衡

    最近练习nginx+tomcat负载均衡.根据一些资料整理了大体思路,最终实现了1个nginx+2个tomcat负载均衡. 安装JDK 1>进入安装目录,给所有用户添加可执行的权限 #chmod ...

  7. 【Nginx】配置Nginx的负载均衡

    参考的优秀文章 tomcat配置文件server.xml详解 AJP协议总结与分析 Using nginx as HTTP load balancer 在本机运行2个Tomcat 现需要运行两个Tom ...

  8. 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 ...

  9. Nginx+Keepalived负载均衡高可用

    Nginx+Keepalived负载均衡高可用方案: Nginx 使用平台:unix.linux.windows. 功能: A.www web服务  http 80 b.负载均衡(方向代理proxy) ...

  10. Nginx实现负载均衡功能

    一.什么是Nginx? Nginx是一款轻量级的Web 服务器.反向代理服务器.电子邮件(IMAP/POP3)代理服务器. 二.Nginx的优点: 高并发连接:官方测试Nginx能够支撑5万并发连接, ...

随机推荐

  1. F650A光猫的一些命令(一)

    查看有 / # uname -a Linux F650A 4.1.25 #12 SMP Tue Aug 15 21:57:30 CST 2017 armv7l GNU/Linux / # cat /p ...

  2. 智能存储 | 超质感 HDR 生产,激活你的视神经

    视频平台尊贵的会员可以享受 4K HDR 超清视界,各类新型旗舰机都具备拍摄 HDR 视频的能力,3C 产品发布会必提 HDR 超清显示.想必各位看官感受到视觉逐渐被 HDR 浪潮侵袭了,那 HDR ...

  3. 在Asp.netCore中使用Attribute来描述限流

    前言 同事问我Asp.netCore的RateLimiting是怎么使用的,我回答说很简单的,你只要按照如下步骤来: 在RateLimiterOptions上注册policy,记住policy对应的p ...

  4. Redis 的DB多个数据库使用

    Redis 自己安装默认提供了16个数据库. 每个数据库都有一个id, 从 0 开始,(0,15). 不同的数据库中数据隔离保存.我们可以通过修改redis的配置文件进行修改数据库的数量. /etc/ ...

  5. Qt/C++音视频开发76-获取本地有哪些摄像头名称/ffmpeg内置函数方式

    一.前言 上一篇文章是写的用Qt的内置函数方式获取本地摄像头名称集合,但是有几个缺点,比如要求Qt5,或者至少要求安装了多媒体组件multimedia,如果没有安装呢,或者安装的是个空的呢,比如很多嵌 ...

  6. Qt编写安防视频监控系统57-子模块1设备列表

    一.前言 近期在经历过这次UI大重构以后,很多拆分的功能都以单独的模块的形式出现,以悬停窗体的形式嵌入或者悬浮在主窗体中,这种方式极大的增强了系统的拓展性,客户想要什么模块就开启什么模块,放置到合适的 ...

  7. Qt开源作品1-视频流播放ffmpeg内核

    一.前言 好久以前就写过这个工具,后来因为Qt版本的不断升级以及ffmpeg也经历过好多次的迭代,可能从官网下载的ffmpeg搭配原来的代码不能正确编译,因为很多api已经变了,所以这次特意抽空全部整 ...

  8. React 应用的 Nginx 缓存控制

    典型 React 应用面临的缓存问题,可通过 Nginx 配置进行解决 通用部署 构建应用后,只需使用 Nginx 指向静态文件即可 server { listen 80; root /PATH/TO ...

  9. SQL Server 递归+向上统计

    前几天有个需求需要基于分类数据向上统计总数,一开始第一个想法是通过程序来计算,后再思考能不能通过SQL脚本直接来计算 基础数据 Id ParentId Category Num 1 0 分类1 0 2 ...

  10. .NET Core 委托原理解析

    .NET Core 委托原理解析 在 .NET Core 中,委托(Delegate)是一种类型安全的函数指针,它允许你将方法作为参数传递给其他方法,或者将方法存储在变量中以便稍后调用.委托在事件处理 ...