• Ubuntu-18.04 下使用Nginx搭建高可用,高并发的asp.net core集群


    一.实现前的准备

    • 以下是实现简单负载均衡的思路,图中的服务器均为虚拟机

    • 三台Linux服务器,一台用作Nginx负载均衡(192.168.254.139),另外两台用作Asp.Net Core应用程序承载的服务器(192.168.254.140,192.168.254.141)
    • 一台用作于Client的Windows服务器。

    二.环境搭建

    1.Asp.Net Core程序

     就是一个新建的空web应用程序,然后修改了下Startup的中间件,分别部署到2台Ubuntu上。

        public class Startup
        {
            // This method gets called by the runtime. Use this method to add services to the container.
            // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
            public void ConfigureServices(IServiceCollection services)
            {
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.Run(async (context) =>
                {
                    //await context.Response.WriteAsync("this is first web application");
                    await context.Response.WriteAsync("this is second web application");
                });
            }
        }

    2.配置Nginx服务器

    • 安装Nginx
      • 在Ubuntu终端使用 sudo apt-get install nginx 命令安装Nginx。
      • 然后通过 sudo service nginx start 命令启动服务
      • 确认浏览器显示Nginx默认登录页。可在http://192.168.254.139/index.nginx-debian.html 访问登录页面。
    • 配置Nginx
      • 若要将 Nginx 配置为反向代理以将请求转接到 ASP.NET Core 应用,请修改 /etc/nginx/sites-available/default。 sudo vi /etc/nginx/sites-available/default 
      • 设置proxy_pass后面的参数
      • 新增upstream,表示要转接的服务器集合,upstream后面的名字要与proxy_pass后面的参数相对应
      • 修改完之后:wq保存,然后 sudo nginx -t 来验证配置文件的语法有没有错误,如果配置文件测试成功,可以通过运行  sudo nginx -s reload  强制 Nginx 选取更改
    upstream cluster.com{
            server 192.168.254.140 weight=1;
            server 192.168.254.141 weight=1;
    }       
    
    server {
            listen 80 default_server;
            # listen [::]:80 default_server deferred;
            # SSL configuration
            #
            # listen 443 ssl default_server;
            # listen [::]:443 ssl default_server;
            #
            # Note: You should disable gzip for SSL traffic.
            # See: https://bugs.debian.org/773332
            #
            # Read up on ssl_ciphers to ensure a secure configuration.
            # See: https://bugs.debian.org/765782
            #
            # Self signed certs generated by the ssl-cert package
            # Don't use them in a production server!
            #
            # include snippets/snakeoil.conf;
    
            root /var/www/html;
    
            # Add index.php to the list if you are using PHP
            index index.html index.htm index.nginx-debian.html;
    
            server_name _example.com *.example.com;
    
            location / {
                    proxy_pass         http://cluster.com;
                    proxy_http_version 1.1;
                    proxy_set_header   Upgrade $http_upgrade;
                    proxy_set_header   Connection keep-alive;
                    proxy_set_header   Host $host;
                    proxy_cache_bypass $http_upgrade;
                    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header   X-Forwarded-Proto $scheme;
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    try_files $uri $uri/ =404;
            }
    
            # pass PHP scripts to FastCGI server
            #
            #location ~ .php$ {
            #       include snippets/fastcgi-php.conf;
            #
            #       # With php-fpm (or other unix sockets):
            #       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
            #       # With php-cgi (or other tcp sockets):
            #       fastcgi_pass 127.0.0.1:9000;
            #}
    
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #       deny all;
            #}
    }

    2.Client控制台应用程序

        class Program
        {
            static void Main(string[] args)
            {
                HttpClient httpClient = new HttpClient();
                for (int i = 0; i < 1000; i++)
                {
                    string result = httpClient.GetStringAsync("http://192.168.254.139").Result;
                    Console.WriteLine(result);
                }
                Console.ReadKey();
            }
        }

    结果如下:

    由结果可知,Nginx服务器会根据我们配置Nginx时的权重进行转向,到现在,一个简单的集群已经搭建。

  • 相关阅读:
    jQuery碎语(1) 基础、选择要操作的元素、处理DOM元素
    C#位运算符的基本用法
    如何使用==操作符,Equals方法,ReferenceEquals方法,IEquatable接口比较2个对象
    C#实现ATM自动取款机
    如何使用C#关键字const,readonly,static
    用最简单的例子理解适配器模式(Adapter Pattern)
    前缀方式增1和后缀方式增1的区别
    抽象类可以有构造函数吗
    为什么使用抽象类,什么时候使用抽象类
    checked和unchecked的区别
  • 原文地址:https://www.cnblogs.com/hhzblogs/p/9818099.html
Copyright © 2020-2023  润新知