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文件上动手脚了,下面是我的代码

 using Cluster.Models;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics; namespace Cluster.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
ViewBag.RemoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;
ViewBag.Header = Request.Headers["X-Forwarded-For"];
ViewBag.LocalIpAddress = HttpContext.GetClientUserIp();
ViewBag.RequestHeaders = Request.Headers;
return View();
} public IActionResult About()
{
ViewData["Message"] = "Your application description page."; return View();
} public IActionResult Contact()
{
ViewData["Message"] = "Your contact page."; return View();
} public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
 using Microsoft.AspNetCore.Http;
using System.Linq; namespace Cluster.Models
{
public static class IPExtension
{
public static string GetClientUserIp(this HttpContext context)
{
var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
if (string.IsNullOrEmpty(ip))
{
ip = context.Connection.LocalIpAddress.ToString();
} return ip;
}
}
}
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; namespace Cluster
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
} public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
} // 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.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
//添加转发设置
app.UseForwardedHeaders(new ForwardedHeadersOptions {
ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto
});
app.UseStaticFiles(); app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
}
 @{
ViewData["Title"] = "Home Page";
} 客户端:<br />
Request.HttpContext获取访问ip: @ViewBag.RemoteIpAddress
<br />
Request.Headers获取访问ip:@ViewBag.Header
<br />
服务端:<br />
Request.HttpContext获取响应服务所在服务器的ip:@ViewBag.LocalIpAddress
<table class="table">
<thead>
<tr>
<th>key</th>
<th>value</th>
</tr>
</thead>
<tbody>
@foreach (var item in ViewBag.RequestHeaders)
{
<tr>
<td>@item.Key</td>
<td>@item.Value</td>
</tr>
}
</tbody>
</table>

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

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

3、修改Nginx配置文件

 #集群站点配置
upstream xxx.services{
server IP地址1:端口1 fail_timeout=60s;
server IP地址2:端口2 fail_timeout=60s;
} server {
#代理监听端口
listen default_server;
listen [::]: default_server; root /var/www/html; server_name _; #_默认ip+端口访问,_可以替换成访问域名如:shenniu.core.com
#缓存文件路由
location ~ .*(\.(js|css|jpg|svg)).* { proxy_pass http://shenniu.services;
proxy_cache_valid ;
proxy_cache my_cache;
expires 3d;
}
#集群站点路由
location / { proxy_pass http://xxx.services;
#对应upstream后面的名称
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For
$proxy_add_x_forwarded_for;
}
}

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

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

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

NetCore在Centos7上部署和Nginx集群部署访问的更多相关文章

  1. Nginx 集群部署(Keepalived)

    # Nginx集群部署 # 当我们的用户同时访问量达到一定量的时候,一台服务器是不够用的 # 这个时候我们需要解决这个问题肯定是要添加新的服务器去处理用户访问 # 多台服务器处理用户访问就需要我们集群 ...

  2. Linux Centos7.5中的RocketMQ集群部署

    系统环境 Docker > centos7.5 此镜像已经安装了jdk1.8和maven3.6.0 如果你想知道这个基础镜像的具体情况, 参考此文: https://www.cnblogs.co ...

  3. .netcore consul实现服务注册与发现-集群部署

    一.Consul的集群介绍 Consul Agent有两种运行模式:Server和Client.这里的Server和Client只是Consul集群层面的区分,与搭建在Cluster之上的应用服务无关 ...

  4. Windows上搭个Nginx集群环境玩玩

    一.在windows上安装nginx 1.从这里下载nginx的windows版本 2.把压缩文件解压至c盘根目录,并将文件夹重命名成nginx 3.在conf目录下的nginx.conf文件中,指定 ...

  5. Kubernetes集群部署之三ETCD集群部署

    kuberntes 系统使用 etcd 存储所有数据,本文档介绍部署一个三节点高可用 etcd 集群的步骤,这三个节点复用 kubernetes 集群机器k8s-master.k8s-node-1.k ...

  6. docker 部署 HFish(集群部署)

    主节点部署: docker run -d --name hfish-master -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : -p : ...

  7. Linux之FineBI集群部署

    在企业应用中,通常单个计算机的配置是有限的,而企业应用又是高并发的需求,这个时候会通过计算机集群的方式来提高并发数,从而提高整体应用服务的性能.集群是将多台计算机作为一个整体来提供相关应用的服务.Fi ...

  8. kubernetes kubeadm部署高可用集群

    k8s kubeadm部署高可用集群 kubeadm是官方推出的部署工具,旨在降低kubernetes使用门槛与提高集群部署的便捷性. 同时越来越多的官方文档,围绕kubernetes容器化部署为环境 ...

  9. 分布式监控工具Ganglia 介绍 与 集群部署.

    如果你目的很明确就是冲着标题来的,不爱看我唠叨,请直接进入第二个分割线之后的内容. 其实之前就是有做Swift监控平台的打算的,但是因为没什么硬性需求么,也不要紧的,就一直搁置了.最近实验室来了个大二 ...

随机推荐

  1. 使用 WebSockets 技术的 9 个应用场景

    没有其他技术能够像WebSocket一样提供真正的双向通信,许多web开发者仍然是依赖于ajax的长轮询来实现.对Websocket缺少热情,也许是因为多年前他的安全性的脆弱,抑或者是缺少浏览器的支持 ...

  2. [转]C语言指针详解(经典,非常详细)

    博文地址:https://blog.csdn.net/constantin_/article/details/79575638 写得很好啊! 这里写一下笔记好了 int p; //这是一个普通的整型变 ...

  3. Shader -> Photoshop图层混合模式计算公式大全

    Photoshop图层混合模式计算公式大全 混合模式可以将两个图层的色彩值紧密结合在一起,从而创造出大量的效果,在这些效果的背后实际是一些简单的数学公式在起作用. 下面是photoshop cs2中所 ...

  4. python3-可变和不可变数据类型

    可变:[ ]    { } 不可变:int    str   ( )     应用实例: 把列表l,追加到列表s中,现在网列表l中追加一个5,打印列表s可以看到,列表s中的列表l中也有5. d={&q ...

  5. shell编程===执行shell脚本的四种方法

    使用vim创建一个shell文件,命名 hello.sh #!/bin/bash echo "hello shell !" 在linux中进行加载 chmod +x ./hello ...

  6. Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法

    在linux环境编译应用程式或lib的source code时常常会出现如下的错误讯息: 代码如下: /usr/bin/ld: cannot find -lxxx 这些讯息会随着编译不同类型的sour ...

  7. 64_t1

    TOPCOM-0.17.8-2.fc26.x86_64.rpm 13-Feb-2017 22:09 269054 TOPCOM-devel-0.17.8-2.fc26.i686.rpm 13-Feb- ...

  8. 头像截图上传三种方式之一(一个简单易用的flash插件)(asp.net版本)

    flash中有版权声明,不适合商业开发.这是官网地址:http://www.hdfu.net/ 本文参考了http://blog.csdn.net/yafei450225664/article/det ...

  9. 关于函数strtok和strtok_r的使用要点和实现原理

    strtok函数的使用是一个老生常谈的问题了.该函数的作用很大,争议也很大.以下的表述可能与一些资料有区别或者说与你原来的认识有差异,因此,我尽量以实验为证.交代一下实验环境是必要的,winxp+vc ...

  10. spring源码分析---事务篇

    上一篇我介绍了spring事务的传播特性和隔离级别,以及事务定义的先关接口和类的关系.我们知晓了用TransactionTemplate(或者直接用底层P的latformTransactionMana ...