.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 == )
{
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 == )
{
// 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'
大功告成!一行代码都不需要改,哈哈~
参考文献:
.net core 启动域名及端口配置的更多相关文章
- windows环境下XAMPP安装、多域名多端口配置、与python环境并存
一.去xampp官网下载最新版本的安装包,安装一般软件的安装步骤,一直下一步,不过如果你想安装到指定目录中的话,在选择安装位置的时候设置想要安装的位置. 二.我们在工作中经常遇到同时调试多个网站的情况 ...
- 三、调试IIS启动域名配置
一.IIS配置启动VS以及域名 1.hosts配置 2.配置 注意: 1.Web和Api 端口在IIS都设置80即可,都可以同时运行不冲突,与vs的IIS express启动方式不同vs会指定不同的两 ...
- centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 访问控制 apache rewrite 配置开机启动apache tcpdump 第二十节课
centos LAMP第二部分apache配置 下载discuz!配置第一个虚拟主机 安装Discuz! 用户认证 配置域名跳转 配置apache的访问日志 配置静态文件缓存 配置防盗链 ...
- tomact配置域名和端口直接访问网站
tomact配置域名和端口直接访问网站,就是使用域名解析到主机,通过端口执行网站地址,实现访问,在上一章节中发布了两个web项目,但是都是执行同一个根文件夹,通过 http://localhost:8 ...
- 使用eclipse上Tomcat插件配置域名、端口号、启动时间详解
作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7856284.html 邮箱:moyi@moyib ...
- Nginx配置基于多域名、端口、IP的虚拟主机
原文:https://www.cnblogs.com/ssgeek/p/9220922.html ------------------------------- Nginx配置基于多域名.端口.IP的 ...
- apache 多端口配置和虚拟主机配置
1 打开httpd.conf文件 2 添加端口监听 (找到Lisen 80 在后面添加 Listen 端口号 如Listen 1112) port =>你的端口 project_name=> ...
- 网卡配置和DNS配置,手动挂在nas存储的共享目录,网络相关其它操作命令,修改防火墙中的端口配置,resolv.conf配置详细介绍和网卡信息配置详细介绍
1. 网卡配置和DNS配置 若想服务器能够发邮件,需要让部署的服务器能够访问到外网环境.若部署的服务器访问不到外网,通过ping www.baidu.com的方式执行的时候,会出现以下问题: &q ...
- Linux CentOS7部署ASP.NET Core应用程序,并配置Nginx反向代理服务器
前言: 本篇文章主要讲解的是如何在Linux CentOS7操作系统搭建.NET Core运行环境并发布ASP.NET Core应用程序,以及配置Nginx反向代理服务器.因为公司的项目一直都是托管在 ...
随机推荐
- JAVA类加载器概念与线程类加载器
类加载器的功能:通过一个类的全限定名来获取描述此类的二进制字节流的过程 java的类加载器大致可以分为两类,一类是系统提供的,一类是由应用开发人员编写的.系统提供的类加载器有以下三种: 引导类加载器( ...
- request的生存期只限于服务器跳转
症状: 刚才想做一个实验,在a.jsp中向request添加属性(页面编码为UTF-8),在b.jsp中删除该属性(页面编码为ISO-8859-1),通过ServletRequestAttribute ...
- Juqery 定时器 settimeout setInterval
setTimeout 只执行一次 setTimeout(loading_tree,2000); function loading_tree(){ $('body').mLoading("hi ...
- 一款基于jQuery的超酷动画幻灯片
今天给大家带来一款仿步步高vivo手机网站的一款首页焦点幻灯展示特效,带有超酷炫的动画特效,动态效果丝毫不逊色于flash动画,具有很强的视觉冲击力,推荐下载学习! 提示:兼容360.FireFox. ...
- C基础之移位操作
因为左移操作不会导致符号位出现缺位,所以不考虑符号位,低位补0即可:右移操作会涉及到符号位出现缺位的问题,所以在有符号数的右移操作时要考虑符号位怎么补的问题. 左移操作(<<)对于无符号数 ...
- Linux下安装配置MediaWiKi全过程
0.libxml2的安装 *下载http://rpmfind.net/linux/rpm2html/search.php?query=libxml2 *执行以下Linux命令进行安装 a)gu ...
- springboot 完整企业项目搭建实记
昨天搭建ssm框架时突然想到可以搭建springboot来完美解决配置复杂的问题,今天学习了一下springboot的搭建,在此记录一下搭建的过程和踩过的坑 这里给自己定一个该框架搭建完成的目标,如下 ...
- 关于Cocos2d-x开发一个游戏的过程自述
我在2016年12月6号完成了我的第一个自己独立完成的游戏,期间遇到各种各样的问题和困难,但是幸运的是问题都一一被解决了,现在我想总结一个整个的制作游戏的过程 使用的环境是VS2013+cocos2d ...
- js 版本号
在web项目开发过程中,我们经常会引用css.js文件,更新文件后常出现缓存问题(明明更改了代码,在浏览器上访问的时候却没有发生变化),这种情况我们通常采用以下两种解决方案: 1.手动清除浏览器缓存 ...
- Oracle dbms_random随机数包详解
Oracle dbms_random包主要用于获得随机数,可以为数字也可以为字母等,还可以实现混拼.常用函数如下: dbms_random.value 生成一个指定范围的38位随机小数(小数点后38位 ...