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 即可

暫時記錄這些,如遇到問題,會繼續補充



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