AspNetCore流量系列之一个都不能跑(1):Nopcommerce实战Asp.net core 2 同时配置多个端口号

摘要:网站上线运行后,遇到修改网站的情况,如何保证网站7*24小时不中断运行

一、要解决的问题:

1.Nopcommerce4.0已经上线运行,为最大限度提高网站性能,用nginx作为反向代理服务器,后台Nopcommerce4.0 用生产环境运行,缺省端口号改为6000.

2.网站上线后,搜索引擎会不断爬网站,这时候网站不能随意中断。因为经常中断网站,搜索引擎会认为该网站故障率太高,网站不稳定,从而会对该网站降权。

bing.com 来了,请都请不来,又怎么舍得让你走?

3.网站迭代更新之后,必须要重启网站,怎么办?

二、解决方案

总体思路: 配置nginx 负载均衡服务器,配置两个网站服务器,一个以生产环境方式运行,另一个用开发环境模式运行。其中一个网站中断后,会自动代理到另一个网站,从而达到网站不中断的目的。

(一)一个网站用生产环境运行

1.在Program.cs配置端口号6000

public class Program

{

public static IWebHost BuildWebHost(string[] args) =>

WebHost.CreateDefaultBuilder(args)

.UseStartup()

.UseKestrel(options =>

{

options.Listen(IPAddress.Loopback, 6000);

})

....

.Build();

}

}

2.用生产环境方式运行,写个批处理wwwiaspnetcoreNetcorepublishAndRun.bat

cd \Nopcommerce\wwwiaspnetcoreNetcore20RTM\src\Presentation\Nop.Web

dotnet publish -c release

cd Nopcommerce\wwwiaspnetcoreNetcore20RTM\src\Presentation\Nop.Web\bin\Release\netcoreapp2.0\publish

dotnet Nop.Web.dll

运行结果:

3.配置命令行设置端口的程序代码,可以自己随意设置端口

public class Program

{

public static void Main(string[] args)

{

var config = new ConfigurationBuilder()

.SetBasePath(Directory.GetCurrentDirectory())

.AddJsonFile("hosting.json", optional: true)

.AddCommandLine(args)

.Build();

var host = WebHost.CreateDefaultBuilder(args)

.UseKestrel(options =>

{

options.AddServerHeader = false;

options.Listen(IPAddress.Loopback, 6000);

})

.UseConfiguration(config)

.CaptureStartupErrors(true)

.UseSetting(WebHostDefaults.PreventHostingStartupKey, "true")

.UseStartup()

.Build();

host.Run();

}

}

4、以开发模式运行修改后的网站,端口号随便设置,建个批处理wwwiaspnetcoreNetcoreDebugRun.bat

cd \Nopcommerce\wwwiaspnetcoreNetcore20RTM\src\Presentation\Nop.Web

dotnet run --urls "http://*:7999"

运行情况:

现在两个网站都运行了,接下来要做的,就是中断其中一个网站后,让nginx自动转发到另一个正常运行的网站。

(二)配置nginx负载均衡

这个不是本文重点,不作详细介绍

upstream hostiaspnetcoreServer {

server 127.0.0.1:6000 max_fails=0 weight=3;

server 127.0.0.1:7999 max_fails=0 backup;

}

server {

#监听端口

listen 7856;

#自己指定要访问的域名

server_name *.iaspnetcore.com;

#反向代理配置,

#将所有请求全部转发到upstream中定义的目标服务器中。

location / {

proxy_pass http://iaspnetcoreServer;

#若给某一台服务器转发请求时,达到默认超时时间未响应,则再向另 一台服务器转发请求,这里设置为1s

proxy_connect_timeout 1;

....

三、其他

在实战开发过程中还是遇到各种问题,比如百度的移动端爬虫,竟然发了个错误的请求头,以至于AspNetCore的网站直接对百度移动爬虫报错,不信你试一试你的网站?百度移动蜘蛛对你的网站有收录才怪了。收录问题已经解决,粉丝还不多,有兴趣再写。

一个人可以走得很快,一群人可以走得很远。

----微信公众号AspNetcore

微信公众号:AspNetCore

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180406G16T0R00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券