.net core 启动域名及端口配置

前两天转载一篇.net core 启动分析,由于发布时候一直纠结在默认5000端口上,所以好好研究了一下。

1.IIS集成

如果通过IIS当宿主的话,那这些都不是事情,强大的IIS可以帮助我们对站点的域名、端口等等等等的配置。至于如何在IIS上部署asp.net core的web应用,就不是这里的重点。大致简单的描述一下:

需要下载Net Core SDK 与 Server Hosting,下载地址https://www.microsoft.com/net/download

安装完查看.net core sdk是否安装成功命令行dotnet info

server host 是否安装成功iis模块与处理程序映射中查看如下

然后建立站点,指定到发布站点的文件

最后就是应该程序池配置,选择无托管,这样有server host转发请求。

2.Linux环境

具体安装就不说了,也是一大堆。根据官网指示,也就是安装.net core运行环境就可以运行了。

这里推荐一篇博文,大家自行参考 将ASP.NET Core应用程序部署至生产环境中(CentOS7)

回到重点,如何配置url及端口参数

1.在Program的Main方法里面指定

public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseUrls("http://localhost:5001")
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }

这种方法不灵活,即使通过增加配置文件去读,也不是那么优雅。这个时候,本人就觉得微软肯定不会推荐这么用的,于是继续找。

2.通过环境变量

网上看到有一篇How to configure Kestrel URLs in ASP.NET Core RC2

虽然还是通过配置文件配置,但是它不向其他文章,不需要读出配置信息,直接绑定就能用,还是贴代码看:

hosting.json

{
  "server.urls": "http://localhost:60000;http://localhost:60001"
}

Program.cs

public static void Main(string[] args)
{
    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("hosting.json", optional: true)
        .Build();

    var host = new WebHostBuilder()
        .UseKestrel()
        .UseConfiguration(config)
        .UseContentRoot(Directory.GetCurrentDirectory())
        .UseIISIntegration()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

这样它也能监听

Now listening on: http://localhost:60000

Now listening on: http://localhost:60001

是不是很神奇!实战受不了了,扣源码!目前为止.net core最好的地方就是有源码!

通过溯源,我们可以知道主要是 WebHostBuilder 这个类,在Microsoft.AspNetCore.Hosting命名空间下。

主要的方法还是Build

        /// <summary>
        /// Builds the required services and an <see cref="IWebHost"/> which hosts a web application.
        /// </summary>
        public IWebHost Build()
        {
            // Warn about deprecated environment variables
            if (Environment.GetEnvironmentVariable("Hosting:Environment") != null)
            {
                Console.WriteLine("The environment variable ‘Hosting:Environment‘ is obsolete and has been replaced with ‘ASPNETCORE_ENVIRONMENT‘");
            }

            if (Environment.GetEnvironmentVariable("ASPNET_ENV") != null)
            {
                Console.WriteLine("The environment variable ‘ASPNET_ENV‘ is obsolete and has been replaced with ‘ASPNETCORE_ENVIRONMENT‘");
            }

            if (Environment.GetEnvironmentVariable("ASPNETCORE_SERVER.URLS") != null)
            {
                Console.WriteLine("The environment variable ‘ASPNETCORE_SERVER.URLS‘ is obsolete and has been replaced with ‘ASPNETCORE_URLS‘");
            }

            var hostingServices = BuildHostingServices();
            var hostingContainer = hostingServices.BuildServiceProvider();

            var host = new WebHost(hostingServices, hostingContainer, _options, _config);

            host.Initialize();

            return host;
        }

这边主要是构建一个WebHost对象,然后更进去看

通过Initialize方法查看源代码,我们可以知道是EnsureServer这个方法创建的url地址

private void EnsureServer()
{
    if (Server == null)
    {
        Server = _applicationServices.GetRequiredService<IServer>();

        var addresses = Server.Features?.Get<IServerAddressesFeature>()?.Addresses;
        if (addresses != null && !addresses.IsReadOnly && addresses.Count == 0)
        {
            var urls = _config[WebHostDefaults.ServerUrlsKey] ?? _config[DeprecatedServerUrlsKey];
            if (!string.IsNullOrEmpty(urls))
            {
                foreach (var value in urls.Split(new[] { ‘;‘ }, StringSplitOptions.RemoveEmptyEntries))
                {
                    addresses.Add(value);
                }
            }

            if (addresses.Count == 0)
            {
                // Provide a default address if there aren‘t any configured.
                addresses.Add("http://localhost:5000");
            }
        }
    }
}

这里我们可以知道,原来它自己会从配置里面去读 _config[WebHostDefaults.ServerUrlsKey] 和 _config[DeprecatedServerUrlsKey]

WebHostDefaults.ServerUrlsKey的值是固定值

DeprecatedServerUrlsKey的值在WebHost这个对象一开始就定义了

哦!真相大白了。所以我们在配置文件里面设置“server.urls”就可以了。

总结:

综上所述,asp.net core启动的时候会自行读取环境变量里面的配置,实际点就是在项目属性里面增加如下配置:

已控制台方式启动,发现已经切换了端口。

那么这个是在开发环境,如何在产线部署呢。这个也很简单,以linux上部署为例,以守护进程supervisor启动程序,在supervisor的启动配置里面增加环境变量:

environment=ASPNETCORE_URLS=‘http://*:5001‘

大功告成!一行代码都不需要改,哈哈~

参考文献:

win10下iis部署asp.net core rtm

时间: 2024-10-06 13:01:05

.net core 启动域名及端口配置的相关文章

windows环境下XAMPP安装、多域名多端口配置、与python环境并存

一.去xampp官网下载最新版本的安装包,安装一般软件的安装步骤,一直下一步,不过如果你想安装到指定目录中的话,在选择安装位置的时候设置想要安装的位置. 二.我们在工作中经常遇到同时调试多个网站的情况,那么如何配置呢?就像平时访问网站一样,网站 a.com 与网站 b.com 截然不同.这都是常见现象,如果在局域网中要访问另外一台电脑上的多个网站,就需要使用 http://192.168.1.10/ 形式访问,而不是 http://localhost/,http 协议默认端口号是 80,如果我们

CentOS6.4 配置mysql服务器启动多个端口,同步单表数据

============================================================ ====多端口启动==== ============================================================ 创建数据目录 mkdir /usr/local/mysql/var1/ mkdir /usr/local/mysql/var2/ =================================================

tomact配置域名和端口直接访问网站

tomact配置域名和端口直接访问网站,就是使用域名解析到主机,通过端口执行网站地址,实现访问,在上一章节中发布了两个web项目,但是都是执行同一个根文件夹,通过 http://localhost:8080/项目名称   以这样的地址进行访问的. 下面通过配置Tomcat安装地址下的conf文件夹下的server.xml文件,实现绑定域名和指定端口到指向目录实现 域名加端口访问 网站 1.先配置两个虚拟域名.打开以下目录:C:\Windows\System32\drivers\etc 选中hos

Tomcat 端口配置,及原理详解

Tomcat 端口配置,及原理详解 作者:Ezitai 如果想深入了解tomcat的各个端口及配置,建议通读文章,对初学者十分有利,整理自网络. 1 tomcat 文件配置详细说明 tomcat服务器需配置三个端口才能启动,安装时默认启用了这三个端口,当要运行多个tomcat服务时需要修改这三个端口,不能相同.端口配置路径为tomcat\ conf\service.xml 修改Shutdown端口(默认为8005端口) <Server port="8005" shutdown=&

使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装、添加程序管理脚本、设置开机启动、反向代理配置、证书分发、添加iptables规则等

使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装.添加程序管理脚本.设置开机启动.反向代理配置.证书分发.添加iptables规则等.脚本支持自定义nginx安装版本.设置编译模块.配置监听端口等. 1. Nginx Role规则说明 本脚本用于中间节点(Nginx反向代理)环境的自动化配置,主要内容包括: 安装基础依赖环境: 创建nginx启动用户(支持自定义用户): 下载nginx安装文件(可自定义nginx版本): 解压安装文件: 执行编译安装(可自定义编译参数和

centos 7 防火墙和端口配置

开启redis端口,修改防火墙配置文件     vi /etc/sysconfig/iptables 加入端口配置 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379:7000 -j ACCEPT  //开放6379到7000之间的端口 servi

[转]php-fpm - 启动参数及重要配置详解

约定几个目录/usr/local/php/sbin/php-fpm/usr/local/php/etc/php-fpm.conf/usr/local/php/etc/php.ini 一,php-fpm的启动参数 #测试php-fpm配置 /usr/local/php/sbin/php-fpm -t /usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -t #启动p

Intel 主板 USB 3.0 XHCI控制器端口配置

Intel支持USB 3.0主机控制器的主板上一般具有2个EHCI和1个XHCI,这种主板一般有14个端口,并且端口0-3是EHCI和XHCI共用的,也即在0-3号端口具有4个开关,这4个开关的控制寄存器位于XHCI的PCI(PCI-E)配置空间,PC上控制这4个开关是在BIOS里配置的,由于很多主板默认没有开启,导致用户买了电脑后,虽然电脑有蓝色的USB端口,但是插上3.0的U盘还是按照高速来运行的,所以要使你的蓝色USB端口能够连接超速设备,需要确认你的主板集成了XHCI控制器,并且在BIO

JBoss AS 7之域名直接访问配置(The Return Of The King)

1.6域名直接访问配置 部署JBoss的时候,默认情况下访问是需要加项目名字才可以访问的.但是如何才能够"IP+端口"访问呢?下面将讲解如何配置. 配置域名访问需要在项目下面创建一个WEB-INF的目录,在其下面创建一个名字为jboss-web.xml的配置文件,文件内容如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE jboss-web> <jboss-web