windows+nginx+iis+redis+Task.MainForm構建分布式架構 之 (nginx+iis構建服務叢集)

來源:互聯網
上載者:User

標籤:

本次要分享的是利用windows+nginx+iis+redis+Task.MainForm組建分布式架構,由標題就能看出此內容不是一篇分享文章能說完的,所以我打算分幾篇分享文章來講解,一步一步實現分布式架構;下面將先給出整個架構的核心節點簡介,希望各位多多點贊:

 

. 架構設計圖展示

. nginx+iis構建服務叢集

. redis儲存分布式共用的session及共用session運作流程

. redis主從配置及Sentinel管理多個Redis叢集

. 定時架構Task.MainForm提供資料給redis叢集儲存

 

以上是整個架構的我認為核心的部分,其中沒有包含有資料庫方面的設計(請忽略),下面先發張架構設計圖:

以上是個人的看法,下面來正式分享今天的文章吧(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:路由設定(支援Regex);其中常用到的節點有

  proxy_connect_timeout:nginx跟後端伺服器連線逾時時間(代理連線逾時)

  proxy_pass:Proxy 位址名稱

  proxy_set_header:設定讓服務端擷取真實的Ip,連接埠等;對應的值有(Host,X-Real-IP,X-Forwarded-For)

upstream節點:

設定負載平衡的伺服器列表

設定Proxy 位址名稱(和上面的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的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反向 Proxy的連接埠是server節點裡面listen監聽3031連接埠,所以應該訪問的是http://shenniu.test.com:3031/user/login地址,此時在瀏覽器是訪問不了該連接埠的,還需要咋們來啟動nginx服務:

好,現在使用nginx配置反向 Proxy並第一次訪問代理對應的網站程式,由於咋們配置的快取檔案地址在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配置:

然後,訪問反向 Proxy地址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運作流程,敬請期待也謝謝多多支援點贊。

windows+nginx+iis+redis+Task.MainForm構建分布式架構 之 (nginx+iis構建服務叢集)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.