centos下搭建phpweb环境所遇之诸坑

注明:以下知识点皆为网上搜索诸多网友无私分享得来,此处唯有一并感谢。另:不要告我侵权哈。


一、 搭建phpweb环境

安装之前,可以使用命令查看服务是否安装:

rpm -q ***

1、 安装apache:

yum install httpd httpd-devel 
启动apache:
/etc/init.d/httpd start 或者service httpd start
此时输入服务器的IP地址,应该看到apache的服务页面,端口不用输,apache默认就是使用80端口

2、安装mysql:
yum install mysql mysql-server
启动mysql:
/etc/init.d/mysqld start或者service mysqld start

安装好mysql后,第一次登陆root没有密码,可通过命令方式设置密码:
shell> mysqladmin -u root -h host_name password "newpwd"   
-h host_name可不填。   
password后面的双引号不是必须的,不过如果密码包含空格或者一些特殊的符号,需要用引号。

3、安装php
yum install php php-devel

重启apache使php生效:
/etc/init.d/httpd restart

此时可以在目录:/var/www/html/下建立一个PHP文件
代码:
<?php phpinfo(); ?>
然后访问这个文件,就能看到PHP的一些信息,php.ini配置文件的路径可以在这个页面上看到

安装php的扩展:
yum install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc

安装完扩展之后需要再次重启apache
/etc/init.d/httpd restart

4、安装vsftpd(推荐使用flashFXP工具)
a、yum install vsftpd

b、启动vsftpd服务:
service vsftpd start

c、修改vsftpd主配置文件
文件路径:/etc/vsftpd/vsftpd.conf

去掉注释,值改为NO,不允许匿名登陆


去掉注释


去掉注释,此处我没有使用chroot_list_enable,直接使用指令添加的ftp用户。


最后,添加改行代码,是为了之后的脱坑而作,稍后会有说明

d、创建ftp用户:
useradd -s /sbin/nologin -d /var/www/html test
test这个用户只能连接ftp无法登录系统,默认家目录是在var/www/html文件夹下面

设置密码:
passwd test

设置目录权限:
chmod —R 777 /var/www/html

e、修改selinux配置文件
文件路径:
/etc/selinux/config


取消注释,值设置为disabled。
修改selinu后需要重启服务,如果服务器暂时不可以重启可以执行以下命令,临时修改selinux的策略,无需重启:
setenforce 0

f、重启vsftpd服务,并且下次自动启动
service vsftpd restart 
chkconfig vsftpd on

g、然后用软件来链接ftp测试一下即可

5、iptables
如果是centos7,所使用防火墙是firewalld,但习惯于使用iptables,所以关闭firewalld,安装iptables

a、安装iptables iptables-service

先检查是否安装了iptables
service iptables status


安装iptables
yum install -y iptables


升级iptables(安装的最新版本则不需要)
yum update iptables 


安装iptables-services
yum install iptables-services


b、禁用/停止自带的firewalld服务

停止firewalld服务
systemctl stop firewalld


禁用firewalld服务
systemctl mask firewalld

c、添加规则

配置文件路径:/etc/sysconfig/iptables


添加红框内规则,基本就是httpd、mysqld和vsftpd的端口。


二、所遇到的问题
1、httpd
a、
问题描述:
httpd: Could not reliably determine the server's fully qualified domain name

解决办法:
找到http.conf配置文件
路径:/etc/httpd/conf/httpd.conf

添加下列代码:


重启httpd即可。

2、mysqld
a、
问题描述:
使用数据连接工具(我使用的是navicat),运行sql文件,过程中提示“MySQL server has gone away”

解决方法:
造成这样的原因一般是sql操作的时间过长,或者是传送的数据太大(例如使用insert ... values的语句过长, 这种情况可以通过修改max_allowed_packed的配置参数来避免,也可以在程序中将数据分批插入)

网上有诸多原因分析,此处就不再一一列举,我的情况是插入语句过长:

Your SQL statement was too large.

当查询的结果集超过 max_allowed_packet 也会出现这样的报错。定位方法是打出相关报错的语句。

用select * into outfile 的方式导出到文件,查看文件大小是否超过 max_allowed_packet ,如果超过则需要调整参数,或者优化语句。

mysql> show global variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.00 sec)

修改参数:

mysql> set global max_allowed_packet=1024*1024*16;
mysql> show global variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 16777216 |
+--------------------+----------+
1 row in set (0.00 sec)


修改之后,sql脚本成功运行。

b、
问题描述:
Navicat软件连接数据库报错:2003-can't connect to MYSQL serve

解决方法:
执行下列命令:
GRANT ALL PRIVILEGES ON *.* TO 'itoffice'@'%' IDENTIFIED BY 'itoffice' WITH GRANT OPTION;
(第一个itoffice表示用户名,%表示所有的电脑都可以连接,也可以设置某个ip地址运行连接,第二个itoffice表示密码)。

执行下列命令:
flush privileges  

重启mysql。

3、php
a、
问题描述:
Call to undefined function mb_substr()

解决方法:
造成这种情况的原因是没有打开相应的php扩展,包括php连接mysql,都是需要打开扩展的。
服务器上有相关的so文件,可以直接将这些so文件所属目录添加到php.ini配置文件中。

本机的php.ini文件路径:/etc/php.ini

vi后,/extension_dir 查找命令所在位置,添加下列参数

该目录下都是一些so文件

保存后,重启httpd后,问题即解决。

b、
问题描述:


解决方法:
执行下列命令:
chmod -R 777 /var/www/html

问题即可解决


4、iptables
5、vsftpd
a、
问题描述:
连接的错误提示:
状态: 连接建立,等待欢迎消息...
返回: 220 (vsFTPd 2.0.1)
命令: USER xiaozhuren_user
返回: 331 Please specify the password.
命令: PASS **************
返回: 230 Login successful.
命令: SYST
返回: 215 UNIX Type: L8
命令: FEAT
返回: 211-Features:
返回: EPRT
返回: EPSV
返回: MDTM
返回: PASV
返回: REST STREAM
返回: SIZE
返回: TVFS
返回: 211 End
状态: 已连接
状态: 读取目录列表...
命令: PWD
返回: 257 "/home/xiaozhuren_user"
命令: TYPE I
返回: 200 Switching to Binary mode.
命令: PASV
返回: 227 Entering Passive Mode (60,29,225,54,125,229)
命令: LIST
错误: 连接超时
错误: 读取目录列表失败

有人说:
命令:        PASV
默认是pasv模式,因为服务端防火墙的设置,客户端不能用pasv模式,将设置中的pasv模式置为空,就正常了
返回:        227 Entering Passive Mode (58,X,X,X,0,1)
在ftp服务软件中设置指定端口地址范围,允许Passive Mode使用,比如60000-60020

解决办法:
在传输设置中:
修改传输模式为: 主动传输

b、
问题描述:
可以正常的连接,但是当上传文件时,总是报553 Could not create file错误信息

解决方法:
首先在/var/www的目录中创建一个目录(如果有,则不用创建,一般情况下会是html目录),然后设置权限为777
$ sudo mkdir /var/www/html
$sudo chmod -R 777 /var/www/html

然后修改vsftp的配置文件/etc/vsftpd.conf文件
在最后添加上
local_root=/var/www

保存,然后杀死vsftpd进程(这一步可能不需要,如果重启不成功再kill vsftpd进程),然后重启vsftpd服务器程序。
试试看,将文件上传到html目录,这个时候可以正常的上传文件了。



另:如果想让程序随系统启动,使用下列命令:
chkconfig XXX on 即可

暂时记录这些,如遇到问题,会继续补充



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章