Liniux下互联网访问不通问题解决
我有话说
前言
由于需要在Linux上部署PHP+Nginx项目,用了一台现有的服务器,注意:这是大坑的开始!
以后部署新项目一定要新服务器,不要在已有项目运行的服务器上跑新的环境项目,因为你不知道你部署的这个新环境会不会搞一些很奇怪的问题出来。
问题描述
在服务器上部署了一个PHP项目,然后联系网络部人员对指定端口开放了互联网访问入口,但是 telnet
是通的!通过浏览器打开页面报错Connection reset by peer
telnet xxx.xxx.xxx.xxx port |
通过命令检查防火墙是否开启:
systemctl status firewalld |
都未显示防火墙,认为是防火墙默认已关闭的,所以一度怀疑是在互联网相关入口处有啥限制导致的!
如果当时firewall-cmd --state
命令检查下就好了,显示running
!!!
当时问题有三个
- nginx启动报错
- 防火墙无法关闭
- nginx访问403报错
解决方式
启动nginx报错
我之前启动nginx方式/usr/sbin/nginx -s reload
,实际配置了服务方式的systemctl start nginx.service
,可能导致冲突原服务方式启动报错。
Nginx 启动报 [emerg] bind() to 0.0.0.0:XXXX failed (13: Permission denied)错误处理
查看http允许访问的端口
semanage port -l | grep http_port_t |
显示输出: http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000
启动的端口新增
semanage port -a -t http_port_t -p tcp 8000 |
报错日志:ValueError: Port tcp/5000 already defined
将-a
选项替换为用于修改的-m
,将tcp port 8000
添加到http_port_t
中
semanage port -m -t http_port_t -p tcp 8000 |
关闭防火墙
由于无法直接通过命令关闭防火墙,且不清楚实际需要放开服务端口有哪些,所以只得想办法关闭防火墙服务。
通过以下命令,先执行一遍。
systemctl stop firewalld |
在关闭防火墙
systemctl stop firewalld |
一般如果云服务器,可以在云服务商的安全组开启限定端口访问,可以关闭服务器的防火墙(仅个人想法)。
在执行firewall-cmd --state
显示not running
就ok啦!
关闭selinux
由于通过互联网http://xxx.xxx.xxx.xxx:port/
访问页面报错nginx 403
,经过查询需要关闭selinux
,修改配置文件需要重启服务器,于是选择临时更改解决。
方式一:
修改配置文件/etc/selinux/config
,然后重启服务器。
SELINUX=disabled |
方式二:
setenforce 0 |
- 【默认:enforcing】setenforce 1 设置SELinux 成为enforcing模式
- setenforce 0 设置SELinux 成为permissive模式
查看selinux
状态
sestatus -v |
修改后,访问地址页面及显示正常