LAMP
LAMP环境搭建
MySQL安装
1、下载mysql到/usr/local/src/下:
[root@localhost src]#cd /usr/local/src/
wget xxx.xxx.xxx
2、解压:
[root@localhost src]# tar -xzvf mysql-5.1.49-linux-i686-glibc23.tar.gz
3、将解压后的包移动到/usr/local/mysql:
[root@localhost src]# mv mysql-5.1.49-linux-i686-glibc23 /usr/local/mysql
4、创建mysql用户:
[root@localhost src]# useradd -s /sbin/nologin -M mysql
5、初始化数据库:
[root@localhost src]# cd /usr/local/mysql/
[root@localhost mysql]# mkdir -p /data/mysql;chown -R mysql:mysql /data/mysql
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
说明:--user定义数据库的属主;--datadir定义数据库安装路径,建议放到大空间分区,目录需要自行创建。执行到这一步,看到两个OK,说明执行正确;可以用echo $?查看执行结果;
6、拷贝配置文件:
[root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf
7、拷贝启动脚本并修改属性:
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql]# chmod 755 /etc/init.d/mysqld
8、修改启动脚本:
[root@localhost mysql]# vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/data/mysql
9、启动脚本加入系统服务项,设定开机自启动:
[root@localhost mysql]# chkconfig --add mysqld
[root@localhost mysql]# chkconfig mysqld on
[root@localhost mysql]# service mysqld start (/etc/init.d/mysqld start )
10、检查mysql是否启动:
[root@localhost mysql]# ps aux |grep mysql
[root@localhost mysql]# netstat -lnp |grep mysql
Apache安装
1、下载apache到/usr/local/src/下:
[root@localhost src]# cd /usr/local/src/
wget xxx.xxx.xxx
2、解压:
[root@localhost src]# tar -xjvf httpd-2.2.31.tar.bz2
3、编译配置参数:
[root@localhost src]# cd httpd-2.2.31
[root@localhost httpd-2.2.31]# ./configure \
--prefix=/usr/local/apache2 \
--with-included-apr \
--enable-so \
--enable-deflate=shared \
--enable-expires=shared \
--enable-rewrite=shared \
--with-pcre
说明:--prefix指定安装路径;--enable-so表示启动DSO;--enable-deflate=shared表示共享方式编译deflate,后面参数同理;
4、错误及解决方法:
error: mod_deflate has been requested but can not be built due to prerequisite failures
[root@localhost httpd-2.2.31]# yum -y install zlib-devel
5、为避免make时报错,提前安装库文件:
[root@localhost httpd-2.2.31]# yum -y install pcre pcre-devel apr apr-devel
6、编译、安装:
[root@localhost httpd-2.2.31]# make
[root@localhost httpd-2.2.31]# make install
7、启动apache:
[root@localhost ~]# /usr/local/apache2/bin/apachectl start
错误及解决方法:
httpd: Could not reliably determine the server's fully qualified domain name, using ::1 for ServerName
[root@localhost httpd-2.2.31]# vim /usr/local/apache2/conf/httpd.conf
ServerName localhost:80 (去掉#号即可)
8、apache开机自启动脚本设置:
默认源码编译安装apache是不能使用service命令来启动,通常启动命令是:
[root@localhost ~]# /usr/local/apache2/bin/apachectl start
其实apachectl就是一个启动脚本,把它拷贝到/etc/init.d/中,并重命名为apache2
[root@localhost ~]# cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2
在前面大段注释中任意地方加入以下两行,让脚本支持service和chkconfig命令
[root@localhost ~]# vim /etc/init.d/apache2
# chkconfig:35 20 80
# description:Apache2
35:apache启动的运行级别为(3,5)
20:启动序号为(S20)
80:关闭序号为(K80)
到此就可以使用service启动和关闭apache了
[root@localhost ~]# service apache2 start
设置apache跟随系统自启动:
[root@localhost ~]# chkconfig --add apache2
[root@localhost ~]# chkconfig apache2 on
PHP安装
1、下载php到/usr/local/src/下:
[root@localhost src]# cd /usr/local/src/
wget xxx.xxx.xxx
2、解压:
[root@localhost src]# tar -xvf php-5.4.37.tar.bz2
3、配置编译参数:
[root@localhost src]# cd php-5.4.37
[root@localhost php-5.4.37]# ./configure \
--prefix=/usr/local/php \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-config-file-path=/usr/local/php/etc \
--with-mysql=/usr/local/mysql \
--with-libxml-dir \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv-dir \
--with-zlib-dir \
--with-bz2 \
--with-openssl \
--with-mcrypt \
--enable-soap \
--enable-gd-native-ttf \
--enable-mbstring \
--enable-sockets \
--enable-exif \
--disable-ipv6
4、错误及解决方法:
configure: error: xml2-config not found. Please check your libxml2 installation.
[root@localhost php-5.4.37]# yum -y install libxml2-devel
configure: error: Cannot find OpenSSL's <evp.h>
[root@localhost php-5.4.37]# yum -y install openssl openssl-devel
configure: error: Please reinstall the BZip2 distribution
[root@localhost php-5.4.37]# yum -y install bzip2 bzip2-devel
configure: error: jpeglib.h not found.
[root@localhost php-5.4.37]# yum -y install libjpeg-turbo-devel
configure: error: png.h not found.
[root@localhost php-5.4.37]# yum -y install libpng libpng-devel
configure: error: freetype-config not found.
[root@localhost php-5.4.37]# yum -y install freetype freetype-devel
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
解决方法1:
[root@localhost php-5.4.37]# rpm -ivh "http://mirrors.isu.net.sa/pub/fedora/fedora-epel/6/i386/epel-release-6-8.noarch.rpm"
[root@localhost php-5.4.37]# yum install -y libmcrypt-devel
解决方法2:
[root@localhost php-5.4.37]# yum -y install epel-release //扩展包更新包
[root@localhost php-5.4.37]# yum update //更新yum源
[root@localhost php-5.4.37]# yum -y install libmcrypt libmcrypt-devel mcrypt mhashy
由于centos6.x默认的yum源没有libmcrypt-devel这个包,只能借助第三方yum源
注:configure: error: mysql configure failed. Please check config.log for more information.
将 --with-mysql=/usr/local/mysql \改为:
--with-mysql=mysqlnd \
--enable-mysqlnd \
由于mysqlnd存在于php源码里,因此使用原生驱动编译(native driver )
5、编译、安装:
[root@localhost php-5.4.37]# make
[root@localhost php-5.4.37]# make install
6、拷贝配置文件:
[root@localhost php-5.4.37]# cp php.ini-production /usr/local/php/etc/php.ini
apache结合php
1、修改apache主配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/httpd.conf
ServerName localhost:80
......
<IfModule dir_module>
DirectoryIndex index.html index.htm index.php
</IfModule>
......
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
2、查看安装的模块信息:
[root@localhost ~]# /usr/local/apache2/bin/apachectl -M
[root@localhost ~]# /usr/local/php/bin/php -m
LAMP测试
1、检查配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
2、启动apache:
[root@localhost ~]# /usr/local/apache2/bin/apachectl start
3、curl命令测试:
[root@localhost ~]# curl localhost
<html><body><h1>It works!</h1></body></html>
4、测试是否解析php:
[root@localhost ~]# vim /usr/local/apache2/htdocs/1.php
<?php
echo "php解析正常!";
?>
[root@localhost ~]# curl localhost/1.php
php解析正常!
5、浏览器测试:
关闭防火墙
[root@localhost ~]# iptables -F
web端访问测试
http://192.168.1.200/1.php
Discuz安装
1、解压:
[root@localhost src]# unzip Discuz_X3.2_SC_GBK.zip
2、创建目录:
[root@localhost src]# mkdir /data/www
3、将upload中文件拷贝到/data/www/下:
[root@localhost src]# cd /data/www/
[root@localhost www]# mv /usr/local/src/upload/* ./
4、修改主配置文件:
[root@localhost www]# vim /usr/local/apache2/conf/httpd.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
......
Include conf/extra/httpd-vhosts.conf
5、修改虚拟主机配置文件:
[root@localhost www]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/www/"
ServerName www.test.com
ServerAlias www.aaa.com
#ErrorLog "logs/dummy-host2.example.com-error_log"
#CustomLog "logs/dummy-host2.example.com-access_log" common
</VirtualHost>
6、检查配置文件:
[root@localhost www]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@localhost www]# /usr/local/apache2/bin/apachectl restart
7、浏览器测试:
先配置hosts再web访问
注意关闭防火墙
8、安装discuz:
查看apache权限用户
[root@localhost www]# ps aux |grep httpd
修改目录权限
[root@localhost www]# chown -R daemon config/ data/ uc_client/ uc_server/
9、配置mysql:
[root@localhost www]# /usr/local/mysql/bin/mysql
mysql> create database discuz;
mysql> grant all on discuz.* to 'test'@'localhost' identified by 'testlinux';
10、错误及解决方法:
首页提示:Please delete install/index.php via FTP!
[root@localhost www]# rm -fr /data/www/install/index.php
LAMP环境配置
Apache配置
用户认证
1、创建需要认证的目录和文件:
[root@localhost ~]# mkdir /data/www/abc
[root@localhost ~]# cd !$
[root@localhost abc]# cat /etc/passwd > 12.txt
2、修改虚拟主机配置文件:
[root@localhost abc]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.test.com
ServerAlias www.aaa.com
#ErrorLog "logs/dummy-host2.example.com-error_log"
#CustomLog "logs/dummy-host2.example.com-access_log" common
<Directory /data/www/abc/>
AllowOverride AuthConfig
AuthName "please call administrator"
AuthType Basic
AuthUserFile /data/.htpasswd
require valid-user
</Directory>
</VirtualHost>
3、检测配置文件:
[root@localhost abc]# /usr/local/apache2/bin/apachectl -t
Syntax OK
4、创建认证账号:
[root@localhost abc]# /usr/local/apache2/bin/htpasswd -c /data/.htpasswd user1
-c:创建文件
要创建 user2时( 命令行中不能加“ -c”,否则会覆盖user1信息 ):
[root@localhost abc]# /usr/local/apache2/bin/htpasswd /data/.htpasswd user2
5、查看认证账号信息:
[root@localhost abc]# cat /data/.htpasswd
user1:$apr1$PJ5JPif.$ZBgCf3mdckdaxCo3jP8OU0
user2:$apr1$YyaC1cNl$WoqGfsKvCLAhb33yatkp91
6、加载配置文件:
[root@localhost abc]# /usr/local/apache2/bin/apachectl graceful
7、浏览器访问:
默认虚拟主机
1、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/tmp/bcz"
ServerName www.bcz.com
</VirtualHost>
首个<VirtualHost *:80>中定义文件目录指向空目录
2、创建空目录:
[root@localhost ~]# mkdir /tmp/bcz
3、设置权限:
[root@localhost ~]# chmod 600 /tmp/bcz
4、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
5、测试:
IP访问受限,只能用定义的域名访问
域名301跳转(重定向)
1、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.test.com
ServerAlias www.aaa.com
........
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
</IfModule>
........
</VirtualHost>
若有2个别名则加入[OR]:
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.test.com
ServerAlias www.aaa.com
ServerAlias www.bbb.com
........
<IfModule mod_rewrite>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.bbb.com$
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
</IfModule>
........
</VirtualHost>
[^ 开头符号, $结尾符号, .* 贪婪匹配,匹配所有字符串。 之所以加个()是为了在后面部分引用它,这个$1其实就是()里面的.]
2、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
3、测试:
[root@localhost ~]# curl -x 192.168.1.200:80 www.bbb.com -I
日志
1、主配置文件定义了日志格式:
[root@localhost ~]# vim /usr/local/apache2/conf/httpd.conf
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
</IfModule>
h:来源IP
u:用户( 用户认证时会显示,否则显示“ -”)
t:访问时间
r:请求类型(GET/POST)
User-Agent:浏览器标识
2、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
使用combined日志记录格式:
日志切割:
<VirtualHost *:80>
......
ErrorLog "logs/test.com-error_log"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combined
......
</VirtualHost>
3、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
4、测试:
浏览器访问站点,查看日志:
[root@localhost ~]# ls /usr/local/apache2/logs/
修改本地时间:
date -s "2016-06-06 06:06:06"
5、不记录指定文件类型日志:
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.test.com
ServerAlias www.aaa.com
ServerAlias www.bbb.com
SetEnvIF Request_URI ".*\.gif$" image-request
SetEnvIF Request_URI ".*\.jpg$" image-request
SetEnvIF Request_URI ".*\.png$" image-request
SetEnvIF Request_URI ".*\.bmp$" image-request
SetEnvIF Request_URI ".*\.swf$" image-request
SetEnvIF Request_URI ".*\.js$" image-request
SetEnvIF Request_URI ".*\.css$" image-request
ErrorLog "logs/test.com-error_log"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combined env=!image-request
........
</VirtualHost>
6、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
静态缓存
1、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
........
ErrorLog "logs/test.com-error_log"
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" combined env=!image-request
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 days"
ExpiresByType image/jpeg "access plus 24 hours"
ExpiresByType image/png "access plus 24 hours"
ExpiresByType text/css "now plus 2 hours"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>
........
</VirtualHost>
2、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
3、测试:
web上右键一个图片,"复制图片地址"在curl中进行测试:
[root@localhost ~]# curl -x127.0.0.1:80 'http://www.aaa.com/static/image/common/logo_88_31.gif' -I
HTTP/1.1 200 OK
Date: Fri, 15 Jul 2016 23:01:02 GMT
Server: Apache/2.2.31 (Unix) PHP/5.3.27
Last-Modified: Tue, 08 Dec 2015 02:39:16 GMT
ETag: "3fc6d-9e0-52659e1375d00"
Accept-Ranges: bytes
Content-Length: 2528
Cache-Control: max-age=86400
Expires: Sat, 16 Jul 2016 23:01:02 GMT
Content-Type: image/gif
防盗链
1、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
........
<IfModule mod_expires.c>
........
</IfModule>
SetEnvIfNoCase Referer "^http://.*\.test\.com" local_ref
SetEnvIfNoCase Referer "^http://.*\.apelearn\.com" local_ref
#SetEnvIfNoCase Referer ".*\.lishiming\.net" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png|js|css)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
........
</VirtualHost>
定义白名单,并起别名为Referer:
SetEnvIfNoCase Referer "^http://.*\.test\.com" local_ref
只有白名单中定义的网站,才可以引用这些文件:
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif|png|js|css)">
<注:如果白名单中去掉自己网站,那么自己网站也获取不到这些图片、文件>
2、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
3、测试:
右键本网站图片“复制图片地址”,上传到其他网站查看图片是否能正常显示。
访问控制
1、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
........
<Directory "/data/www">
AllowOverride None
Options None
Order allow,deny
Allow from all
Deny from 127.0.0.1
</Directory>
或:
Order deny,allow
........
</VirtualHost>
##############################
顺序1:先allow,后deny
Order allow,deny
Allow from all
Deny from 127.0.0.1
全部允许访问,除了127.0.0.1
##############################
顺序2:先deny ,后allow
Order deny ,allow
Allow from all
Deny from 127.0.0.1
deny规则被allow规则覆盖,全部允许访问,包括127.0.0.1
##############################
2、实现白名单功能:
只允许某些主机访问站点
Order deny ,allow
Allow from 127.0.0.1
Allow from 192.168.1.200
Deny from all
3、设置指定主机访问指定站点:
例:只允许某些IP访问后台
<VirtualHost *:80>
........
<filesmatch "(.*)admin(.*)">
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.1.100
</filesmatch>
........
</VirtualHost>
4、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
5、测试:
使用192.168.1.100主机web访问www.test.com/admin.php可以访问
在服务器里用curl测试:
curl -x127.0.0.1:80 www.test.com/admin.php -I
HTTP/1.1 200 OK
curl -x192.168.1.200:80 www.test.com/admin.php -I
HTTP/1.1 403 Forbidden
禁止解析php
1、关闭防盗链
2、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
关闭php解析引擎
<Directory /data/www/data>
php_admin_flag engine off
</Directory>
禁止指定user_agent
1、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
user_agent即用户代理,如chrome、Firefox、ie等浏览器和curl访问方式;
在登录日志中可以查看详细的访问user_agent:
tail /usr/local/apache2/logs/test.com-access_20160716_log
......Chrome/49.0.2623.110 Safari/537.36"
<此方法可以禁止搜索引擎的爬虫访问>
<VirtualHost *:80>
........
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.bbb.com$
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*chrome.* [NC]
RewriteRule .* - [F]
</IfModule>
........
</VirtualHost>
2、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
3、测试:
[root@localhost ~]# curl -x127.0.0.1:80 www.test.com/forum.php -I
HTTP/1.1 403 Forbidden
chrome浏览器访问报Forbidden;
ie、Firefox等都可以访问;
4、注意:
##############################
[NC]:不区分大小写;
RewriteRule .* - [F]:否定,Forbidden
##############################
1、如果"最后一条"加入OR,那么其他任何访问方式都会被禁止;
一条规则:
RewriteCond %{HTTP_USER_AGENT} ^.*chrome* [NC,OR]
RewriteRule .* - [F]
或:
两条规则:
RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*chrome* [NC,OR]
RewriteRule .* - [F]
所有方式都会被禁止访问 (包括火狐、IE等浏览器都会被禁止访问);
2、如果两条规则之间没有加入OR,则都不生效:
RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC]
RewriteCond %{HTTP_USER_AGENT} ^.*chrome.* [NC]
RewriteRule .* - [F]
以上两条规则都不生效;
通过rewrite限制目录(访问控制):
1、创建需访问限制的目录和文件:
[root@localhost ~]# mkdir /data/www/bbb
[root@localhost ~]# cat /etc/passwd > /data/www/bbb/111.txt
web端可以访问www.test.com/bbb/111.txt
2、修改虚拟主机配置文件:
[root@localhost ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
........
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.bbb.com$
RewriteRule ^/(.*)$ http://www.test.com/$1 [R=301,L]
RewriteCond %{REQUEST_URI} ^.*/bbb/.* [NC]
RewriteRule .* - [F]
</IfModule>
........
</VirtualHost>
3、加载配置文件:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
4、测试:
[root@localhost ~]# curl -x192.168.1.200:80 www.test.com/bbb/111.txt -I
HTTP/1.1 403 Forbidden
web端访问www.test.com/bbb/111.txt报Forbidden
apache开机自启动脚本设置
默认源码编译安装apache是不能使用service命令来启动,通常启动命令是:
[root@localhost ~]# /usr/local/apache2/bin/apachectl start
其实apachectl就是一个启动脚本,把它拷贝到/etc/init.d/中,并重命名为apache2
[root@localhost ~]# cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2
在前面大段注释中任意地方加入以下两行,让脚本支持service和chkconfig命令
[root@localhost ~]# vim /etc/init.d/apache2
# chkconfig:35 20 80
# description:Apache2
35:apache启动的运行级别为(3,5)
20:启动序号为(S20)
80:关闭序号为(K80)
到此就可以使用service启动和关闭apache了
[root@localhost ~]# service apache2 start
设置apache跟随系统自启动:
[root@localhost ~]# chkconfig --add apache2
[root@localhost ~]# chkconfig apache2 on
PHP配置
php.ini配置文件详解:
1、查找php配置文件的路径:
[root@localhost ~]# /usr/local/php/bin/php -i |head
<phpinfo>
注释符:";"
2、修改php.ini配置文件:
[root@localhost ~]# vim /usr/local/php/etc/php.ini
出于安全考虑,要禁用的一些高风险函数:
disable_functions =
eval,assert,popen,passthru,escapeshellarg,escapeshellcmd,passthru,exec,system,chroot,scandir,chgrp,chown,escapeshellcmd,escapeshellarg,shell_exec,proc_get_status,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,leak,popepassthru,stream_socket_server,popen,proc_open,proc_close
查看错误日志:
display_errors = On/Off
注意:一般设置为Off,否则错误信息会显示在浏览器上,被用户看到;
On:浏览器中会打出错误信息;
Off:浏览器中不会打出错误信息;
3、修改php.ini配置文件后要重新加载apache:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
4、测试:
修改forum.php脚本:
[root@localhost ~]# vim /data/www/forum.php
<?php
lakjflskflaskdflaskfjlskdflaskfjlas
/**
* [Discuz!] (C)2001-2099 Comsenz Inc.
* This is NOT a freeware, use is subject to license terms
display_errors = On,浏览器返回如下信息:
Parse error: syntax error, unexpected T_STRING in /data/www/forum.php on line 2
display_errors = Off,浏览器中没有任何信息,为空白,排查方法如下;
a、多次按下F12可查看"Network"->"Status"状态:500;
b、[root@localhost ~]# curl -x127.0.0.1:80 www.test.com/forum.php -I
HTTP/1.0 500 Internal Server Error
配置php错误日志
[root@localhost ~]# vim /usr/local/php/etc/php.ini
打开日志开关、指定日志路径、指定日志格式:
log_errors = On
error_log = /usr/local/php/logs/php_errors.log
error_reporting = E_ALL & ~E_NOTICE
新建目录,赋权限:
[root@localhost ~]# mkdir /usr/local/php/logs
[root@localhost ~]# chmod 777 /usr/local/php/logs/
重新加载apache:
[root@localhost ~]# /usr/local/apache2/bin/apachectl graceful
web中访问站点,查看日志:
[root@localhost ~]# cat /usr/local/php/logs/php_errors.log
配置open_basedir
让木马病毒只能访问open_basedir指定的目录
可配置多个目录,以:号隔开
一般指定网站目录和tmp目录
vim /usr/local/php/etc/php.ini
open_basedir = /data/www:/tmp
如果open_basedir目录配置的不是站点路径,则web中无法访问;
注意:一般不配置php.ini,而是配置apache虚拟主机文件:
注释php.ini中的open_basedir:
;open_basedir = /data/www:/tmp
修改apache虚拟主机配置文件:
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.test.com
ServerAlias www.aaa.com
php_admin_value open_basedir "/data/www/:/tmp/"
每一个虚拟主机/域名/站点 配置唯一open_basedir;
配置虚拟主机文件后,就不必配置 php.ini文件了;
php扩展模块安装:
1、查看php编译安装模块:
[root@localhost ~]# /usr/local/php/bin/php -m
2、编译动态模块:
进入php源码包:
[root@localhost ~]# cd /usr/local/src/php-5.4.37/ext/
检查是否安装了curl模块:
[root@localhost ~]# /usr/local/php/bin/php -m |grep -i curl
3、进入curl文件夹,生成configure文件:
[root@localhost ~]# cd /usr/local/src/php-5.3.27/ext/curl
[root@localhost curl]# /usr/local/php/bin/phpize
##############################
错误:
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.
解决方法:
wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
tar -zvxf m4-1.4.9.tar.gz
cd m4-1.4.9/
tar -zvxf m4-1.4.9.tar.gz
cd m4-1.4.9/
./configure && make && make install
cd ../
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
tar -zvxf autoconf-2.62.tar.gz
cd autoconf-2.62/
./configure && make && make install
##############################
4、编译:
[root@localhost curl]# ./configure --with-php-config=/usr/local/php/bin/php-config
##############################
错误:
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
解决方案:
yum -y install curl-devel
##############################
5、安装:
[root@localhost curl]# make
[root@localhost curl]# make install <将模块放入指定目录下>
Installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
存放扩展模块的目录(extension_dir):
查询extension_dir目录位置:
/usr/local/php/bin/php -i |grep extension_dir
extension_dir目录可以通过php.ini文件定义:
vim /usr/local/php/etc/php.ini
; extension_dir = "./" ------默认不做修改
; On windows: ------默认不做修改
; extension_dir = "ext" ------默认不做修改
............ ............ ............
;extension=php_pgsql.dll
;extension=php_pspell.dll
;extension=php_shmop.dll
extension=curl.so
查看动态加载模块:
grep '^extension=' /usr/local/php/etc/php.ini
Mysql配置
mysql核心配置部分
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
MySQL调优
MySQL 调优可以从几个方面来做:
1. 架构层:
做从库,实现读写分离;
2. 系统层次:
增加内存;
给磁盘做 raid0或者raid5 以增加磁盘的读写速度;
1. 架构层:
做从库,实现读写分离;
2. 系统层次:
增加内存;
给磁盘做 raid0或者raid5 以增加磁盘的读写速度;
可以重新挂载磁盘,并加上 noatime 参数,这样可以减少磁盘的 i/o;
3. MySQL 本身调优:
(1) 如果未配置主从同步,可以把 bin-log 功能关闭,减少磁盘 i/o
(2) 在 my.cnf中加上 skip-name-resolve, 这样可以避免由于解析主机名延迟造成 mysql 执行慢
(3) 调整几个关键的 buffer 和cache 。调整的依据,主要根据数据库的状态来调试。如何调优可以参考 .
4. 应用层次:
查看慢查询日志,根据慢查询日志优化程序中的 SQL 语句,比如增加索引
(1) 如果未配置主从同步,可以把 bin-log 功能关闭,减少磁盘 i/o
(2) 在 my.cnf中加上 skip-name-resolve, 这样可以避免由于解析主机名延迟造成 mysql 执行慢
(3) 调整几个关键的 buffer 和cache 。调整的依据,主要根据数据库的状态来调试。如何调优可以参考 .
4. 应用层次:
查看慢查询日志,根据慢查询日志优化程序中的 SQL 语句,比如增加索引
5. 调整几个关键的 buffer和 cache
1) key_buffer_size 首先可以根据系统的内存大小设定它,大概的一个参考值: 1G 以下内存设定 128M; 2G/256M; 4G/384M;8G/1024M ;16G/2048M. 这个值可以通过检查状态值 Key_read_requests 和 Key_reads, 可以知道 key_buffer_size设置是否合理。比例 key_reads / key_read_requests应该尽可能的低,至少是 1:100 ,1:1000 更好 (上述状态值可以使用 SHOW STATUS LIKE ‘key_read%’获得 ) 。注意:该参数值设置的过大反而会是服务器整体效率降低 !
2) table_open_cache 打开一个表的时候,会临时把表里面的数据放到这部分内存中,一般设置成 1024 就够了,它的大小我们可以通过这样的方法来衡量: 如果你发现 open_tables 等于 table_cache,并且 opened_tables 在不断增长,那么你就需要增加 table_cache 的值了( 上述状态值可以使用 SHOW STATUS LIKE ‘Open%tables’获得 ) 。注意,不能盲目地把 table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。
3) sort_buffer_size 查询排序时所能使用的缓冲区大小 , 该参数对应的分配内存是每连接独占 ! 如果有100 个连接,那么实际分配的总共排序缓冲区大小为 100 × 4 = 400MB 。所以,对于内存在 4GB左右的服务器推荐设置为 4-8M 。
4) read_buffer_size 读查询操作所能使用的缓冲区大小。和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享 !
5) join_buffer_size 联合查询操作所能使用的缓冲区大小,和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享 !
6) myisam_sort_buffer_size 这个缓冲区主要用于修复表过程中排序索引使用的内存或者是建立索引时排序索引用到的内存大小,一般 4G 内存给64M 即可。
7) query_cache_size MySQL查询操作缓冲区的大小,通过以下做法调整: SHOW STATUS LIKE ‘Qcache%’; 如果 Qcache_lowmem_prunes 该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。如果该值非常大,则表明经常出现缓冲不够的情况,需要增加缓存大小 ;Qcache_free_memory: 查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,我们可以根据实际情况做出调整。一般情况下 4G 内存设置64M 足够了。
8) thread_cache_size 表示可以重新利用保存在缓存中线程的数,参考如下值: 1G —> 8 2G —> 16 3G —> 32 >3G —> 64
除此之外,还有几个比较关键的参数:
9) thread_concurrency 这个值设置为 cpu 核数的2 倍即可
10) wait_timeout 表示空闲的连接超时时间,默认是 28800s ,这个参数是和 interactive_timeout一起使用的,也就是说要想让 wait_timeout 生效,必须同时设置 interactive_timeout,建议他们两个都设置为 10
11) max_connect_errors 是一个 MySQL 中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况。与性能并无太大关系。为了避免一些错误我们一般都设置比较大,比如说 10000
12) max_connections 最大的连接数,根据业务请求量适当调整,设置 500 足够
3) sort_buffer_size 查询排序时所能使用的缓冲区大小 , 该参数对应的分配内存是每连接独占 ! 如果有100 个连接,那么实际分配的总共排序缓冲区大小为 100 × 4 = 400MB 。所以,对于内存在 4GB左右的服务器推荐设置为 4-8M 。
4) read_buffer_size 读查询操作所能使用的缓冲区大小。和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享 !
5) join_buffer_size 联合查询操作所能使用的缓冲区大小,和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享 !
6) myisam_sort_buffer_size 这个缓冲区主要用于修复表过程中排序索引使用的内存或者是建立索引时排序索引用到的内存大小,一般 4G 内存给64M 即可。
7) query_cache_size MySQL查询操作缓冲区的大小,通过以下做法调整: SHOW STATUS LIKE ‘Qcache%’; 如果 Qcache_lowmem_prunes 该参数记录有多少条查询因为内存不足而被移除出查询缓存。通过这个值,用户可以适当的调整缓存大小。如果该值非常大,则表明经常出现缓冲不够的情况,需要增加缓存大小 ;Qcache_free_memory: 查询缓存的内存大小,通过这个参数可以很清晰的知道当前系统的查询内存是否够用,是多了,还是不够用,我们可以根据实际情况做出调整。一般情况下 4G 内存设置64M 足够了。
8) thread_cache_size 表示可以重新利用保存在缓存中线程的数,参考如下值: 1G —> 8 2G —> 16 3G —> 32 >3G —> 64
除此之外,还有几个比较关键的参数:
9) thread_concurrency 这个值设置为 cpu 核数的2 倍即可
10) wait_timeout 表示空闲的连接超时时间,默认是 28800s ,这个参数是和 interactive_timeout一起使用的,也就是说要想让 wait_timeout 生效,必须同时设置 interactive_timeout,建议他们两个都设置为 10
11) max_connect_errors 是一个 MySQL 中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的情况。与性能并无太大关系。为了避免一些错误我们一般都设置比较大,比如说 10000
12) max_connections 最大的连接数,根据业务请求量适当调整,设置 500 足够
13) max_user_connections 是指同一个账号能够同时连接到 mysql 服务的最大连接数。设置为 0 表示不限制。通常我们设置为 100 足够
mysql_root密码重置
给root用户设置密码:
[root@localhost ~]# /usr/local/mysql/bin/mysqladmin -uroot password '123456'
root用户登录:
[root@localhost ~]# /usr/local/mysql/bin/mysql -uroot -p123456
或:
[root@localhost ~]# /usr/local/mysql/bin/mysql -uroot -p
Enter password:
重置uroot密码:
编辑配置文件:
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
........
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 8
skip-grant ------增加这条(不去授权)
重启mysql:
[root@localhost ~]# /etc/init.d/mysqld restart
Shutting down MySQL..... SUCCESS!
Starting MySQL. SUCCESS!
不输入密码进入mysql:
[root@localhost ~]# /usr/local/mysql/bin/mysql
使用mysql库:
mysql> use mysql
更新表(更新root用户密码):
mysql> update user set password=password('666666') where user='root';
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
注意:5.7里没password这个字段,改成:
mysql> update user set authentication_string=password('666666') where user='root';
退出:
mysql> exit
目前不输入密码还可以直接登录;
修改配置文件:
vim /etc/my.cnf
skip-grant ------删除此行;
重启mysql:
[root@localhost ~]# /etc/init.d/mysqld restart
使用新密码登录mysql;
------总结自阿铭linux