• NetCore在Centos7上部署和Nginx集群部署访问


    NetCore在Linux上部署

    工具:WMWare虚拟机,Wmware12,CentOS7ISO镜像,VS2017

    1、安装虚拟机,过程略,网上一搜一大把

    2、用VS2017建一个NetCore的Web项目,用命令行生成也可以,然后发布

    3、搭建Linux下的NetCore运行环境

      Linux下访问这个网站:https://www.microsoft.com/net/download/windows

      

      点击红色的部分,然后跳转到另一个页面,同时下载文件

      

      按照上面的步骤配置好NetCore SDK。(个人认为使用Binaries方式简单些,如果你想换另一种方式,我没有异议)

    4、windows下的发布包直接复制到主文件夹里面(home目录),然后进入复制过来的发布目录下,直接dotnet 项目名称.dll就可以访问5000端口了。

    5、如果出现错误,请自己排查,大部分都是NetCore版本问题,也就是你VS生成的项目的NetCore版本和Linux上NetCore的版本不匹配

    Nginx集群部署

    1、这就需要在Home/Index文件上动手脚了,下面是我的代码

     1 using Cluster.Models;
     2 using Microsoft.AspNetCore.Mvc;
     3 using System.Diagnostics;
     4 
     5 namespace Cluster.Controllers
     6 {
     7     public class HomeController : Controller
     8     {
     9         public IActionResult Index()
    10         {
    11             ViewBag.RemoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;
    12             ViewBag.Header = Request.Headers["X-Forwarded-For"];
    13             ViewBag.LocalIpAddress = HttpContext.GetClientUserIp();
    14             ViewBag.RequestHeaders = Request.Headers;
    15             return View();
    16         }
    17 
    18         public IActionResult About()
    19         {
    20             ViewData["Message"] = "Your application description page.";
    21 
    22             return View();
    23         }
    24 
    25         public IActionResult Contact()
    26         {
    27             ViewData["Message"] = "Your contact page.";
    28 
    29             return View();
    30         }
    31 
    32         public IActionResult Error()
    33         {
    34             return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
    35         }
    36     }
    37 }
     1 using Microsoft.AspNetCore.Http;
     2 using System.Linq;
     3 
     4 namespace Cluster.Models
     5 {
     6     public static class IPExtension
     7     {
     8         public static string GetClientUserIp(this HttpContext context)
     9         {
    10             var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
    11             if (string.IsNullOrEmpty(ip))
    12             {
    13                 ip = context.Connection.LocalIpAddress.ToString();
    14             }
    15 
    16             return ip;
    17         }
    18     }
    19 }
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Threading.Tasks;
     5 using Microsoft.AspNetCore.Builder;
     6 using Microsoft.AspNetCore.Hosting;
     7 using Microsoft.Extensions.Configuration;
     8 using Microsoft.Extensions.DependencyInjection;
     9 
    10 namespace Cluster
    11 {
    12     public class Startup
    13     {
    14         public Startup(IConfiguration configuration)
    15         {
    16             Configuration = configuration;
    17         }
    18 
    19         public IConfiguration Configuration { get; }
    20 
    21         // This method gets called by the runtime. Use this method to add services to the container.
    22         public void ConfigureServices(IServiceCollection services)
    23         {
    24             services.AddMvc();
    25         }
    26 
    27         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    28         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    29         {
    30             if (env.IsDevelopment())
    31             {
    32                 app.UseBrowserLink();
    33                 app.UseDeveloperExceptionPage();
    34             }
    35             else
    36             {
    37                 app.UseExceptionHandler("/Home/Error");
    38             }
    39             //添加转发设置
    40             app.UseForwardedHeaders(new ForwardedHeadersOptions {
    41                 ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto
    42             });
    43             app.UseStaticFiles();
    44 
    45             app.UseMvc(routes =>
    46             {
    47                 routes.MapRoute(
    48                     name: "default",
    49                     template: "{controller=Home}/{action=Index}/{id?}");
    50             });
    51         }
    52     }
    53 }
     1 @{
     2     ViewData["Title"] = "Home Page";
     3 }
     4 
     5 客户端:<br />
     6 Request.HttpContext获取访问ip: @ViewBag.RemoteIpAddress
     7 <br />
     8 Request.Headers获取访问ip:@ViewBag.Header
     9 <br />
    10 服务端:<br />
    11 Request.HttpContext获取响应服务所在服务器的ip:@ViewBag.LocalIpAddress
    12 <table class="table">
    13     <thead>
    14         <tr>
    15             <th>key</th>
    16             <th>value</th>
    17         </tr>
    18     </thead>
    19     <tbody>
    20         @foreach (var item in ViewBag.RequestHeaders)
    21         {
    22             <tr>
    23                 <td>@item.Key</td>
    24                 <td>@item.Value</td>
    25             </tr>
    26         }
    27     </tbody>
    28 </table>

    我的是:Windows下把发布包挂到了IIS上,然后有个访问地址,Linux下直接dotnet命令启动,还是本地访问,所以上面的代码,对我来说没啥用

    2、Linux安装Nginx,Nginx作为反向代理服务器会把接受的请求转发给对应的Server,不过是随机的,Nginx安装过程略

    3、修改Nginx配置文件

     1 #集群站点配置
     2 upstream xxx.services{
     3     server IP地址1:端口1 fail_timeout=60s;
     4     server IP地址2:端口2 fail_timeout=60s;
     5 }
     6 
     7 server {
     8     #代理监听端口
     9     listen 80 default_server;
    10     listen [::]:80 default_server;
    11 
    12     root /var/www/html;
    13 
    14     server_name _;   #_默认ip+端口访问,_可以替换成访问域名如:shenniu.core.com
    15     #缓存文件路由
    16     location ~ .*(.(js|css|jpg|svg)).* {
    17 
    18         proxy_pass http://shenniu.services;
    19         proxy_cache_valid 200;
    20         proxy_cache my_cache;
    21         expires 3d;
    22     }
    23     #集群站点路由
    24     location / {
    25 
    26         proxy_pass http://xxx.services;  
    27         #对应upstream后面的名称
    28         proxy_http_version 1.1;
    29         proxy_set_header Upgrade $http_upgrade; 
    30         proxy_set_header Connection keep-alive;
    31         proxy_set_header Host $host;
    32         proxy_set_header X-Real-IP $remote_addr;
    33         proxy_cache_bypass $http_upgrade;
    34 
    35         proxy_set_header X-Forwarded-For 
    36         $proxy_add_x_forwarded_for;
    37     }
    38 }

    注意用Root用户修改,有的Nginx.Conf文件是只读的,修改完之后 Nginx -r reload一下

    然后访问Nginx吧,不出意外的话你就可以看到效果了

    备注:部署集群是为了提高性能的,Nginx作为一个反向代理服务器在集群部署方面还是很不错的

  • 相关阅读:
    centos7 升级 python3
    宿主机休眠后,虚拟机网络ping不通网关
    给微信群和朋友圈里发长视频的方法
    在word2019中使用latex
    anki2.1中使用latex,使用 MathJax 渲染latex格式的数学公式,化学公式
    如何用GoldWave批量删除mp3文件开头65秒?
    一款 CentOS-7 个性化配置脚本
    算法及算法分析
    博客园markdown使用LaTeX数学公式
    数据结构与算法
  • 原文地址:https://www.cnblogs.com/wangyulong/p/8664949.html
Copyright © 2020-2023  润新知