折腾 netcore app,头都大了,至今遇到如下问题不能解决:
【顺带说下:这个编辑器在火狐中,换行后输入内容,换行无效,必须先输入内容,再移动光标到指定位置后换行】
1、使用 dotnet publish 发布站点,即便使用了参数 “ -c Release ” 发布的好像还是Debug版本(PDB文件依然存在),怎么解决?
2、站点发布后,默认的 EnvironmentName 是 Production,如何修改这个配置?
3、最头痛的问题:
3.1、虚拟机(Centos 7 最新版本里)的公网IP是 192.168.137.224
3.2、运行netcoreapp后,使用curl是能正确的获得html的:
curl http://127.0.0.1:5001 curl http://localhost:5001 curl http://192.168.137.224:5001
3.3、我配置了 Nginx 反向代理 15000 端口到 127.0.0.1:5001,本机curl也能获得html:
curl http://127.0.0.1:15000 curl http://localhost:15000 curl http://192.168.137.224:15000
3.4、在宿主机器中访问 虚拟机的站点失败:
http://192.168.137.224 成功响应nginx的默认页面 http://192.168.137.224:15000 失败,nginx的access.log和error.log都没记录 http://192.168.137.224:5001 失败,nginx的access.log和error.log都没记录
3.5、Nginx的配置如下:
upstream netcore{ server 127.0.0.1:5001; } server { listen 15000; location / { proxy_pass http://netcore; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
第三个是防火墙的问题。
http://192.168.137.224 可以访问,说明网络设置没问题,80端口默认是开了的
http://192.168.137.224:15000 失败,说明centos7 的15000端口没开。
可以这样打开端口
firewall-cmd --zone=public --add-port=15000/tcp --permanent
firewall-cmd --reload
确实是防火墙的问题,关闭后就OK了。
感觉你的 Nginx 配置写的不对吧,我记得我以前是这样写做反向代理的。
server {
listen 127.0.0.1:80;
server_name a.b.com;
location / {
proxy_pass http://localhost:5001;
}
}
网络抄的。
upstream:便于做负载均衡,也就是一个服务器组合。
server:是服务,我这样配置反向代理本机安装的github是成功的(具体的配置参数稍有不同)
第一个问题:Release版本也可以带PDB文件的,Release和Debug主要的区别是编译器是否对代码进行优化。
第二个问题:可以通过配置环境变量来设定。AddEnvironmentVariables()会将环境变量的值加进Configuration。
public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); }
谢谢!
第二个问题:我是问怎么指定应用运行时的Environment,而不是如何对不同的运行时Environment使用不同的配置。
同时,这个问题有两个新的疑问:
1、hosting.json这个配置的是站点服务地址和端口的话,修改后自动加载有效?2、直接dotnet publish到运行中的站点,文件是锁定的,但可以通过文件系统覆盖,覆盖后是否是能立即起作用?
谢谢!
1、判断标准不对。可以忽略
2、一般是环境变量
3、看了你的配置,没什么问题。从你的测试来看,本地能访问,外部不能访问,那么检查Linux的防火墙,可以考虑执行: systemctl stop firewalld 来关闭防火墙。
已确认是防火墙问题,尝试着关闭了防火墙就能访问了。
VMWARE虚拟机工具栏的编辑-虚拟网络编辑器-NAT Setting-Port Forwarding