windows+nginx+iis+redis+Task.MainForm构建分布式架构 之 (nginx+iis构建服务集群)

本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,由标题就能看出此内容不是一篇分享文章能说完的,因此我打算分几篇分享文章来说解,一步一步实现分布式架构;下面将先给出整个架构的核心节点简介,但愿各位多多点赞:css

 

. 架构设计图展现html

. nginx+iis构建服务集群nginx

. redis存储分布式共享的session及共享session运做流程正则表达式

. redis主从配置及Sentinel管理多个Redis集群redis

. 定时框架Task.MainForm提供数据给redis集群储存数据库

 

以上是整个架构的我认为核心的部分,其中没有包含有数据库方面的设计(请忽略),下面先发张架构设计图:windows

以上是我的的见解,下面来正式分享今天的文章吧(nginx+iis构建服务集群):后端

. nginx经常使用基础配置总结浏览器

. 用nginx搭建静态文件缓存服务缓存

. nginx+iis构建服务集群

 

下面一步一个脚印的来分享:

. nginx经常使用基础配置总结

首先,咱们须要从网上下载nginx服务文件,具体windows系统下用何版本请网上搜索,我这里用的版本是nginx-1.10.1;下载下来后目录结构是这样的:

咱们须要了解而且操做的配置文件是conf文件夹下面的nginx.conf文件,该目录下的其余文件通常采用默认的就行;打开文件不看#号注释的行;events节点:

events节点:

worker_connections:默认值1024,表明nginx服务地址的最大链接数1024;

http节点

include:mime.types其实对应的是nginx.conf同级目录下的mime.types文件,里面是能访问的mime类型

default_type:application/octet-stream默认类型

keepalive_timeout:链接超时时间,单位秒

server节点:

listen:nginx监听的端口号

server_name:服务名称

location:路由设置(支持正则表达式);其中经常使用到的节点有

  proxy_connect_timeout:nginx跟后端服务器链接超时时间(代理链接超时)

  proxy_pass:代理地址名称

  proxy_set_header:设置让服务端获取真实的Ip,端口等;对应的值有(Host,X-Real-IP,X-Forwarded-For)

upstream节点:

设定负载均衡的服务器列表

设置代理地址名称(和上面的proxy_pass对应)

设置负载均衡分配规则,经常使用规则有:

  轮询:挨个轮询访问(默认)

  ip_hash:访问一次后固定访问一个后端服务器,能够解决session的问题

  fair:后端服务器的响应时间来分配请求,响应时间短的优先分配

  weight:权重,值越大访问量越多

proxy_temp_path节点:代理临时文件夹路径

proxy_cache_path节点:代理缓存文件夹路径(缓存文件都在这里)

以上介绍的信息基本能完成一个负载均衡经常使用搭建了,其余的更详细的节点请参考官网

 

. 用nginx搭建静态文件缓存服务

一般分布式架构的一些css,js,图片文件都是被缓存起来的,这样提供高效的加载速度;由文章开头时发布的一张架构图能够看到,用户A要真实访问到服务集群须要通过nginx这道服务器转发,这样须要跳转一次才能获取到css静态文件明显比直接在nginx服务器就返回这些文件的速度慢;因此这种状况下就有了把静态资源缓存到nginx服务上的需求了;下面先来看下nginx配置文件须要的配置信息:

       #负载均衡的服务器列表
    upstream shenniu.test.com{
    
        server 127.0.0.1:4041;
    }
    
    ##cache##
    proxy_connect_timeout 5;
    proxy_read_timeout 60;
    proxy_send_timeout 5;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    proxy_temp_path D:/E/nginx-1.10.1/home/temp_dir;
    proxy_cache_path D:/E/nginx-1.10.1/home/cache levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g;
    ##end##

注意这里upstream节点后面的shenniu.test.com域名在后面会使用,节点里面的server对应ip:端口如:server 127.0.0.1:4041(这个是真实的站点项目的ip+端口),而后须要设置保存缓存文件的路径:proxy_cache_path和proxy_temp_path

而后server节点里面listen监听3031端口,server_name:shenniu.test.com,增长静态资源路由配置

location ~ .*\.(gif|jpg|png|css|js|flv|ico|swf)(.*) {
             #proxy_pass http://shenniu.file.com;
             proxy_pass http://shenniu.test.com;   
             proxy_redirect off;
             proxy_set_header Host $host;
             proxy_cache cache_one;
             proxy_cache_valid 200 302 1h;
             proxy_cache_valid 301 1d;
             proxy_cache_valid any 1m;
             expires 30d;    #缓存时长,这里是30天
       }

注意里面反向代理的proxy_pass 对应的值http://+上面upstream节点的shenniu.test.com,因此就是proxy_pass http://shenniu.test.com这个地址就是访问代理的地址;直接shenniu.test.com域名,咱们须要在本机的这个目录结构C:\Windows\System32\drivers\etc中找到host文件,而后里面增长如:127.0.0.1 shenniu.test.com同样代码,这样咱们的域名就能够在本机的浏览器中访问了;增长页面的路由配置:

location ~ .*(\/|\.(html|htm))(.*) {
            proxy_connect_timeout 90;  #nginx跟后端服务器链接超时时间(代理链接超时)
            proxy_pass http://shenniu.test.com;
            proxy_redirect default;
            
            #服务端获取真实的Ip,端口等
            proxy_set_header   Host             $host; 
            proxy_set_header   X-Real-IP        $remote_addr; 
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; 
        }

而后,咱们还须要用iis发布一个项目,名称为ShenNiu.Stage01,对应的ip和端口是上面upstream节点里面的数据:

而后,在浏览器访问分别用ip和域名访问效果:

好这个是本地host配置域名访问,可是这尚未用到nginx,由于咋们配置的nginx反向代理的端口是server节点里面listen监听3031端口,因此应该访问的是http://shenniu.test.com:3031/user/login地址,此时在浏览器是访问不了该端口的,还须要咋们来启动nginx服务:

好,如今使用nginx配置反向代理并第一次访问代理对应的站点程序,因为咋们配置的缓存文件地址在D:/E/nginx-1.10.1/home/cache目录,因此查看文件夹:

这里面的就是缓存文件所在的位置,此处问生成的缓存文件夹;再来咋们第二次在浏览器中访问网站,并F12查看对应的js,css等文件:

此时文件的来源Server对应的是nginx服务,没错如今访问的就是nginx缓存的文件了

 

. nginx+iis构建服务集群

上面的搭建静态缓存服务其实大体都涉及到了nginx用来作分发的功能,下面咱们来快速在刚才的基础增长一些节点信息,搭建站点服务集群;首先,咱们修改upstream节点,内容信息增长如:

#负载均衡的服务器列表
    upstream shenniu.test.com{
    
        server 127.0.0.1:4041;
        server 127.0.0.1:4040;
    }

只须要增长这段代码,由于上面静态文件服务的时候已经增长了页面的路由设置(能够往上看);为了演示分布式架构,咱们还须要在iis中在配置个和ShenNiu.Stage01(对应的ip+端口:127.0.0.1:4041)站点同样程序的站点ShenNiu.Stage02(对应的ip+端口:127.0.0.1:4040),可是把登录页的title分别标注为"系统01","系统02"这样来区分访问到的是那个站点,配置好后下面咱们来再从新加载nginx配置:

而后,访问反向代理地址http://shenniu.test.com:3031/user/login访问下页面看到的效果如:

此时访问一样的域名,得出的第一个页面title是"系统01",第二个是"系统02",能够看出访问的站点分别对应的是127.0.0.1:4041和127.0.0.1:4040,也就是咋们配置的iis中的ShenNiu.Stage01和ShenNiu.Stage02,这样nginx作分发站点就成功了,站点服务集群就这样建立成功了。

本篇分享的内容只是nginx+iis作一个简单的集群,后面一篇的分享文章将讲解redis存储分布式共享的session及共享session运做流程,敬请期待也谢谢多多支持点赞。

相关文章
相关标签/搜索