关于在linux上部署.netcore项目,只能Linux访问,不能外部主机访问的问题

328 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

发布到linux并运行网站

在我们在Linux上部署完.netcore项目之后,是进入到部署项目的文件夹之下启动项目,比如我的就是在www/core文件夹下。

首先cd

之后我们直接启动项目

 

之后我们在windows上访问此网址,发现我们无法访问。

 

原因是我们此网址的监听地址的本机,即Linux虚拟机(127.0.0.1)

解决方案

首先在Linux上ctrl+c结束项目

之后执行命令

--执行之前请给WebApplication1赋予权限如下
chmod 777 WebApplication1
--然后运行下面代码
./WebApplication1 --urls "http://*:5000" --environment "Development"

将手动配置监听地址,当然,在项目上修改配置也是可以的,不过有时候不行,所以我是用的这个方法。

 

可以看到,我们的地址从localhost:5000变成了[::]:5000,之后输入网址就能访问自己部署的项目了

如果想通过宿主机windows系统来访问linux内的网站,则需要把 5000端口开放对外:如下:

(1)查看对外开放的端口状态
查询已开放的端口 netstat  -ntulp | grep 端口号:可以具体查看某一个端口号
查询指定端口是否已开 firewall-cmd --query-port=5000/tcp 提示 yes,表示开启;no表示未开启。

(2)查看防火墙状态
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld  
关闭防火墙 systemctl stop firewalld
开启防火墙 service firewalld start 
若遇到无法开启
先用:systemctl unmask firewalld.service 
然后:systemctl start firewalld.service

(3)对外开发端口
查看想开的端口是否已开:firewall-cmd --query-port=5000/tcp 添加指定需要开放的端口:firewall-cmd --add-port=5000/tcp --permanent
重载入添加的端口:firewall-cmd --reload
查询指定端口是否开启成功:firewall-cmd --query-port=5000/tcp

查看已经开放的端口:firewall-cmd --list-ports

移除指定端口:firewall-cmd --permanent --remove-port=5000/tcp

端口对外开放后,宿主机windows通过telnet 192.168.31.62 5000 来ping以下是否可以ping通,如果ping不同则需要把linux的ip段和宿主机ip段设置一致。

Vmware虚拟机设置固定IP地址的方法

只需要把虚拟机的ip段和宿主机设置一致即可互通,可以telnet通和ping通来测试成果

一、在菜单栏选择编辑→ 虚拟网络编辑器,打开虚拟网络编辑器对话框,选择Net网络连接方式,随意设置子网IP,点击NAT设置页面,查看子网掩码和网关,后面修改静态IP会用到。

注:上面的“使用本地DHCP服务……”这一项是没有钩选的

二、检查物理主机 网卡设置,打开网络和共享中心→ 更改适配器设置→,在VMware Network Adapter VMnet8上单击右键,选择属性按钮打开属性对话框。  

修改IP地址注意填写和第一步设置的一样

三、进入虚拟机,设置固定IP地址。

WUMO2R~6E{9)O(@9B7U3PZJ.png

DEVICE="eth0"
BOOTPROTO="static" --修改代码1
HWADDR="00:0C:29:F4:7E:C9"
IPV6INIT="yes"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="2a76c2f8-cd47-44af-936d-11559b3a498d"
IPADDR="192.168.88.130" -添加代码2,此处网段和宿主机一致
NETMASK="255.255.255.0" -添加代码3
GATEWAY="192.168.88.2"  -添加代码4,此处网段和宿主机一致
DNS1="192.168.88.2"  -添加代码5,此处网段和宿主机一致

下一步,保存退出

为了使地址生效,需要重新启动网络配置,如下图输入:service network restart

其他设置(重要)

局域网访问网站到上面是可以了,但是mysql也要相应配置一下,否则数据库无法连接。 修改root用户的权限,把loalhost 修改为 % 设置数据库不区分大小写

vim /etc/my.cnf 文件 添加如下代码段:

lower_case_table_names=1  
--这段意思就是数据库不区分大小写,默认linux下mysql是区分的,否则找不到表名,我在这里吃了海亏了,折腾了大半天。

查看root权限如下 mysql -uroot -p 输入密码:

use mysql
select host,user  from user

host字段      user字段
| %         | root             |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys    

如果root 的host是 localhost,这执行代码

update set host ='%' where user='root'