我有话说

前言

由于需要在Linux上部署PHP+Nginx项目,用了一台现有的服务器,注意:这是大坑的开始!

以后部署新项目一定要新服务器,不要在已有项目运行的服务器上跑新的环境项目,因为你不知道你部署的这个新环境会不会搞一些很奇怪的问题出来。

问题描述

在服务器上部署了一个PHP项目,然后联系网络部人员对指定端口开放了互联网访问入口,但是 telnet 是通的!通过浏览器打开页面报错Connection reset by peer

telnet xxx.xxx.xxx.xxx port

通过命令检查防火墙是否开启:

systemctl status firewalld 

service iptables status

都未显示防火墙,认为是防火墙默认已关闭的,所以一度怀疑是在互联网相关入口处有啥限制导致的!

如果当时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)错误处理

SElinux错误:值错误:端口tcp/5000已定义

查看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

关闭防火墙

centOS7防火墙关闭失败问题

由于无法直接通过命令关闭防火墙,且不清楚实际需要放开服务端口有哪些,所以只得想办法关闭防火墙服务。

通过以下命令,先执行一遍。

systemctl stop firewalld
pkill -f firewalld
systemctl start firewalld

在关闭防火墙

systemctl stop firewalld

一般如果云服务器,可以在云服务商的安全组开启限定端口访问,可以关闭服务器的防火墙(仅个人想法)。

在执行firewall-cmd --state显示not running就ok啦!

关闭selinux

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

修改后,访问地址页面及显示正常