LAMP总四部分

 

第一部分

1. 安装mysql
cd /usr/local/src/
免安装编译二进制的包
wget http://syslab.comsenz.com/downloads/linux/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz

tar zxvf /usr/local/src/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz 解压
mv mysql-5.1.40-linux-i686-icc-glibc23 /usr/local/mysql 挪到mysql下并重命名为mysql

useradd -s /sbin/nologin mysql 增加一个mysql用户不让它登录
mkdir -p /data/mysql 要存放mysql数据

cd /usr/local/mysql

chown -R mysql:mysql /data/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql 初始化,要运行一些mysql必要的文件mysql表,数据库放在/data/mysql

echo $?

]# ls /data/mysql
mysql test
生成了mysql库

mysql]#ls support-files/
mysql]#cp support-files/mysql.server /etc/init.d/mysqld mysql启动的脚本====
放到这里是为了让它放到系统的服务列表里面去

chmod 755 /etc/init.d/mysqld

chkconfig --add mysqld
chkconfig mysqld on


vim /etc/init.d/mysqld 需要修改一下配置文件================
加上如下内容
basedir=/usr/local/mysql mysql所在的路径
datadir=/data/mysql 要存放mysql数据


mysql]# ls support-files/
my-huge.cnf
my-large.cnf
my-small.cnf


cp support-files/my-huge.cnf /etc/my.cnf 也可以打开my.cnf 修改他的端口
vim /etc/my.cnf 里面有配置
注释下面两行,是做主从用的,防止占用过多资源,
#log-bin=mysql-bin
#server-id = 1


service mysqld start
或者
/etc/init.d/mysqld start mysql启动脚本========================

ps aux |grep mysqld
netstat -lnp |grep mysql

ls /data/mysql 查看一下生成的文件
可以查看一下错误日志

 


2. 安装apache
wget http://syslab.comsenz.com/downloads/linux/httpd-2.2.16.tar.gz
tar zvxf httpd-2.2.16.tar.gz
cd httpd-2.2.16

./configure --prefix=/usr/local/apache2 --with-included-apr --with-pcre --enable-mods-shared=most
prefix后面是安装apache的目录,apr可以让我们在多个平台使用apache,pcre叫正则相关的,后面是模块

如果上面出错就需要安装一下gcc和apr yum install -y gcc apr
echo $?

make
make install
ls /usr/local/apache2/ 可以查看生成的文件

启动apache
/usr/local/apache2/bin/apachectl start
ps aux |grep httpd

【httpd-2.4版本编译安装方法】 http://www.aminglinux.com/bbs/thread-7283-1-1.html
2.2用到他自带的apr,2.4要用到系统的apr
【如何指定使用worker/prefork】 http://www.lishiming.net/thread-944-1-1.html
【apache两种工作模式】http://www.lishiming.net/thread-838-1-2.html

 


php必须在前面两者后面安装

3. 安装php
wget http://cn2.php.net/distributions/php-5.3.28.tar.gz
tar zxf php-5.3.28.tar.gz

cd php-5.3.28 安装相关需要的包,继续执行下面的操作
./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

如果安装出错就是缺少一些库,需要安装一下 yum install -y libxml2-devel 比如这个,后面都跟-devel
(不确定的时候可以查找一下 yum list |grep bzip2)很准确


注意,最后到这里mcrypt 这个包,你需要安装epel的扩展源才可以看到
不然yum list |grep mcrypt 是搜索不到mcrypt

centos6
32位epel yum源下载地址:wget www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm
64位下载地址: www.lishiming.net/data/attachment/forum/epel-release-6-8_64.noarch.rpm

rpm -ivh epel-release-6-8_32.noarch.rpm

然后就可以搜索yum list |grep mcrypt

centos6
32位epel yum源下载地址: www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm
64位下载地址: www.lishiming.net/data/attachment/forum/epel-release-6-8_64.noarch.rpm

下载完后
rpm -ivh 'www.lishiming.net/data/attachment/forum/epel-release-6-8_32.noarch.rpm'

yum install -y libmcrypt-devel 然后才可以成功安装这个


make
make install


【php5.5、5.6编译安装方法】http://www.aminglinux.com/bbs/thread-7284-1-1.html

=========================================================mysql,apache,php安装完成了

 

4. 配置apache结合php
vim /usr/local/apache2/conf/httpd.conf apache的配置文件,里面和很多模块

ls /usr/local/apache2/modules/ apache模块的路径

/usr/local/apache2/bin/apachectl -M 查看静态动态的模块
里面的share(动态)是通过LocadModule控制的
静态的模块就是把这些静态模块塞到了我们的执行文件
ls /usr/local/apache2/bin/httpd 里,把他们变成一个模块,可以理解是内核模块


apache配置文件最后的那个模块LoadModule php5_module modules/libphp5.so
是上面的./configure --with-apxs2=/usr/local/apache2/bin/apxs
这里完成的操作

====================================
/usr/local/apache2/bin/apachectl -l 只查看静态的内核模块
core.c
http_core.c
mod_so.c
prefork.c 这个是默认的mpm模式,有三种模式,常用的有prefork,worker,event 简单的区别是prefork使用的是 子进程S给我们的客户端提供服务。而worker是由进程和线程来提供服务,进程和线程的区别,进程是互相独立的,两个或者多个进程相互不受影响,线程直接是互相共享进程的资源的。prefork使用的内存多一点,worker少一点,worker支持的并发多一点,event是worker的升级版,支持的并发还要多一点,和worker差不多

(上面是apaceh默认编译的公共模式,2.0 2.2 默认的是prefork模式,2.4默认是event)


他的模式可以改
httpd-2.2.16]# ./configure --help |grep mpm
--with-mpm=MPM Choose the process model for Apache to use.
MPM={beos|event|worker|prefork|mpmt_os2}

===================================================
/usr/local/apache2/bin/apachectl -t 改了配置文件后,检测语法也没有错误,然后再重启=============


vim /usr/local/apache2/conf/httpd.conf
找到
<Directory />
将里面的Deny改为Allow 要不然访问不了
Allow from all

</Directory>

将这里打开
DocumentRoot "/usr/local/apache2/htdocs"

找到:
#ServerName www.example.com:80
打开
ServerName localhost:80

找到:
AddType application/x-gzip .gz .tgz
在该行下面添加:
AddType application/x-httpd-php .php


找到:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>

将该行改为:
<IfModule dir_module>
DirectoryIndex index.html index.php 显示默认的主页
</IfModule>

 


/usr/local/apache2/bin/apachectl -t 检测一下


/usr/local/apache2/bin/apachectl restart 重启apache================

/usr/local/apache2/bin/apachectl graceful 加载配置文件,这个也可以

 

5. 测试解析php
直接访问 192.168.11.190
vim /usr/local/apache2/htdocs/1.php 这个路径是放php文件的地方============
写入:

<?php
echo "hello world!";
?>

保存后,继续测试:
192.168.11.190/1.php

或者 curl -x192.168.3.129:80 lshfoids.com/1.php 或者index.html

<?php

phpinfo(); 看php的配置文件
?>


加载一下他的配置文件
ls /usr/local/php/etc
cd /usr/local/src/php-5.3.28
ls
php.ini-production 复制这个文件

cp php.ini-production /usr/local/php/etc/php.ini

/usr/local/apache2/bin/apachectl restart 重启一下,然后就可以显示出来了

================

有时候没有web页面,怎么通过命令行去检验和测试php
cd /usr/loacl/php/
/usr/local/php/bin/php -m 可以列出他所有加载的模块

其实apache用的是这个文件 /usr/local/apache2/modules/libphp5.so = /usr/local/php/bin/php
libphp5.so是apache调用的模块,/bin/php是一个执行文件,其实他们是一个东西,能实现一样的功能


/usr/local/php/bin/php -i |less 相当于phpinfo()和他看到的一样,
如果进入到bin下,直接 ./bin/php -i |less

搜索php的配置文件
/usr/local/php/bin/php -i |grep -i 'Configuration File' 查一下他的路径
如果有提示,就改一下他的时间就可以了
vim /usr/local/php/etc/php.ini
date.timezone = 'Asia/Chongqing'


/usr/local/php/etc/php.ini php的配置文件=========

 

/usr/local/php/bin/php -v 看他的版本


查看./configure 的时候都加了什么选项 查看php的
./bin/php -i |head


查看apache编译过的选项
cat /usr/local/apache2/build/config.nice

mysql编译参数:
# cat /usr/local/mysql/bin/mysqlbug|grep configure


ldd 是查询这个文件都依赖于哪些库
ldd /usr/local/apache2/modules/libphp5.so


==============查看nginx,apache,php,mysql的编译参数

nginx编译参数:
#/usr/local/nginx/sbin/nginx -V
2、apache编译参数:
# cat /usr/local/apache/build/config.nice
3、php编译参数:
# /usr/local/php/bin/php -i |grep configure
4、mysql编译参数:
# cat /usr/local/mysql/bin/mysqlbug|grep configure

================================================================================================

第二部分--apache的配置

1. 下载discuz!
mkdir /data/www
cd /data/www
mv /root/Discuz_X3.2_SC_GBK.zip .
wget http://download.comsenz.com/DiscuzX/3.2/Discuz_X3.2_SC_GBK.zip
unzip Discuz_X3.2_SC_GBK.zip

rm -rf readme/ utility/ 删除这两个目录
mv upload/* .
rm -rf upload
mv Discuz_X3.2_SC_GBK.zip /root/

echo $PATH
ln -s /usr/local/apache2/bin/apachectl /usr/bin/ 做一个软连接,或者加入到系统环境变量中去 /etc/rc.local=========

apachectl -t

apachectl restart

 

 

2. 配置第一个虚拟主机
vim /usr/local/apache2/conf/httpd.conf

打开下面这行
#Include conf/extra/httpd-vhosts.conf

vim /usr/local/apache2/conf/extra/httpd-vhosts.conf

加入如下配置:
<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.123.com #自定义的
</VirtualHost>


apachectl -t
apachectl graceful 将配置文件重新加载

curl -x127.0.0.1:80 www.111.com 什么都没有输出,测试成功了
curl -x127.0.0.1:80 www.111.com -I 检测状态码302,下面显示是install

按下ctrl+r 就是搜索命令历史,输入命令自动就找到了====

安装discuz
测试一下,在本地hosts加入 192.168.3.129 www.111.com 可以ping一下
在浏览器打开www.111.com 显示discuz的安装页面
同意安装会提示目录不可写,需要改一下所属主组
看apache是属于哪个用户的ps aux |grep httpd
chown -R daemon data config uc_server/data uc_client/data
这时刷新一下安装页面就可以了

===============加入环境变量================
PATH=$PATH:/usr/local/mysql/bin
或者
vim /etc/profile.d/
vim /etc/profile.d/path.sh
里面加入
export PATH=$PATH:/usr/local/mysql/bin

然后
source /etc/profile
echo $PATH

然后输入mysql就可以进入到mysql的命令行了


3. 然后配置mysql,给Discuz!增加一个账户
]#mysqladmin -uroot password '123456'
]#mysql -uroot -p123456 这样子登陆mysql
给mysql root账户设置密码,然后命令行进入mysql,创建新的库,并创建一个新的帐号对该库有所有权限

> create database discuz;
> grant all on discuz.* to 'aming'@'localhost' identified by 'aming123';
> quit

.*是所有的表,all是所有的权限

验证登陆数据库用户
mysql -uaming -paming123

继续安装Discuz!
安装成功

=================


5. 为某个虚拟主机配置用户认证,打开www.111.com/admin.php 需要认证(给后台管理中心配置用户验证)
http://www.lishiming.net/thread-554-1-1.html


vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
虚拟主机配置文件中,找到虚拟配置的地方,<VirtualHost>
在里面加入
<Directory /data/www>
AllowOverride AuthConfig
</Directory>


保存后,然后
创建apache的验证用户
/usr/local/apache2/bin/htpasswd -c /data/.htpasswd aming #/data/.htpasswd是密码文件

cat /data/.htpasswd

#第一次创建用户要用到-c 参数 第2次添加用户,就不用-c参数
增加第二个用户的时候,就不要加-c了,因为-c是创建的意思,如果加上会把这个文件重写。

/usr/local/apache2/bin/htpasswd /data/.htpasswd abiao 第二次创建用户

m 是用md5加密,如果你想修改密码,可以如下

/usr/local/apache2/bin/htpasswd -m /data/.htpasswd test2
重启apache,即可。


vim /usr/local/apache2/conf/extra/httpd-vhosts.conf然后继续在虚拟配置文件中加入
<Directory /data/www/admin.php>
AllowOverride AuthConfig #将要进行用户认证
AuthName "自定义的" #认证的名字
AuthType Basic
AuthUserFile /data/.htpasswd # 这里的/data/.htpasswd你可以随便写一个路径或名字,没有限制
require valid-user #需要这些可用的用户
</Directory >

apachectl -t
apachectl graceful

 

 

6. 配置域名跳转
http://www.lishiming.net/thread-603-1-1.html


在虚拟配置文件中加入
ServerAlias www.222.com
然后在本地电脑hosts中解析一下就可以访问了,结论:我们的网站,任何一个域名绑定到你的ip,都可以访问你的虚拟主机

<VirtualHost *:80>
DocumentRoot "/data/www"
ServerName www.111.com
ServerAlias www.222.com

<IfModule mod_rewrite.c>
#需求:要把访问域名 www.222.com 的域名转发到 www.111.com 上
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.222.com$

RewriteRule ^/(.*)$ http://www.111.com/$1 [R=301,L]

</IfModule>

</VirtualHost>

curl -xlocalhost:80 www.111.com -I
测试 curl -xlocalhost:80 www.222.com/1212 -I


如果是多个域名重定向到一个域名
DocumentRoot "/data/www"
ServerName www.111.com
ServerAlias www.222.com 888.com 666.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.222.com [OR]
RewriteCond %{HTTP_HOST} ^888.com [OR]
RewriteCond %{HTTP_HOST} ^666.com$
RewriteRule ^(.*)$ http://www.111.com/$1 [R=301,L]
</IfModule>

 

==========
ss -an |grep -ci esta


7. 配置apache的访问日志
首先打开
vim /usr/local/apache2/conf/httpd.conf 主配置文件
找到下面这行,复制粘贴在下面,根据需求改一下
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
改为
LogFormat "%h %u \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" biao

然后在虚拟主机配置文件中打开vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
下面的
CustomLog "/tmp/apache2.log" biao

然后访问查看一下日志 tail -f /tmp/apache2.log

================================


去掉图片日志
在虚拟主机配置#ErrorLog "logs/dummy-host.example.com-error_log"下面加入

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

然后把CustomLog "/tmp/apache2.log" biao
改成
CustomLog "/tmp/apache2.log" biao env=!image-request

 


日志切割
在虚拟主机配置改这里
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /tmp/access_%Y%m%d.log 86400" biao env=!image-request

访问测试
www]# ls /tmp/
access_20150701.log

 

参考资料:
使apache的日志文件里不记录图片文件 http://www.lishiming.net/thread-561-1-1.html
apache 日志中记录代理IP以及真实客户端IP http://www.lishiming.net/thread-960-1-1.html
apache只记录指定URI的日志 http://www.lishiming.net/thread-981-1-1.html
apache日志记录客户端请求的域名 http://www.lishiming.net/thread-1037-1-1.html
apache 日志切割问题 http://www.lishiming.net/thread-566-1-1.html


8. 配置静态文件缓存
http://www.lishiming.net/thread-912-1-1.html

按下f12 可以看到那些静态文件
下次访问就不用从服务器里面取,就是保存在浏览器上,访问用到直接拿出来用

在虚拟主机配置改这里加入
<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 hour"
ExpiresByType application/x-javascript "now plus 2 hours"
ExpiresByType application/x-shockwave-flash "now plus 2 hours"
ExpiresDefault "now plus 0 min"
</IfModule>

按下f12 刷新一下,可以看到文件有304 说明这个文件缓存过的。

查看图片的过期缓存
curl -I 'http://www.111.com/static/image/common/logo.png'

Cache-Control: max-age=86400

86400/3600/24=1天,这个可以设置

=============================================================================================
第三部分php配置和mysql配置


9. 配置防盗链
http://www.lishiming.net/thread-71-1-1.html

防止别人的网站,放你网站图片的链接,

位置一般情况下在 /usr/local/apache/conf/httpd.conf
或者apache 2.2 的 /usr/local/apache2/conf/extra/httpd-vhost.conf
添加

SetEnvIfNoCase Referer "^http://www.ccvita.com" local_ref
SetEnvIfNoCase Referer "^http://ccvita.com" local_refSetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>

还一种写法,是用正则的,这种写法在各个版本的apache比较通用。
写法是

SetEnvIfNoCase Referer "^http://.*\.yourdomin\.com" local_ref
SetEnvIfNoCase Referer ".*\.yourdomin\.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>

 

10. 访问控制
apache的order allow deny
http://www.lishiming.net/thread-832-1-1.html

apache限制某个目录下的php文件没有执行权限 http://www.lishiming.net/thread-1000-1-1.html
apache 针对访问uri 限制ip http://www.lishiming.net/thread-5365-1-1.html
几种限制ip的方法 http://www.lishiming.net/thread-6519-1-1.html

 

 

11. apache rewrite相关,后面讲到
apache 限制指定user_agent http://www.lishiming.net/thread-1033-1-1.html
apache 限制某些目录不能访问通过rewrite实现 http://www.lishiming.net/thread-3587-1-1.html
apache rewrite 出现死循环 http://www.lishiming.net/thread-1043-1-1.html

 


一. php配置
查看配置文件的路径 /usr/local/php/bin/php -i |grep -i config
vi /usr/locall/php/etc/php.ini

查找/disable_function
1. 配置disable_function
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

禁止这些函数,禁止黑客用这些黑客访问

2. 配置error_log
display_error=off 这里如果是on 有助于我们去排错和调试========
log_errors=on
error_log=/usr/local/php/logs/php_errors.log 这里写绝对路径,创建logs目录,权限777
error_reporting = E_ALL & ~E_NOTICE 错误级别

查看网站出错的状态码
curl -I -x127.0.0.1:80 http://www.111.com/forum.php

错误级别参考 http://www.aminglinux.com/bbs/thread-6973-1-1.html

3. 配置open_basedir 限定访问目录

open_basedir = /data/www1:/tmp 在php.ini里面配置,一种方法,指定到别的目录去,就访问不了了

php_admin_value open_basedir "/data/www1:/tmp" 在虚拟主机配置,二种方法,


> /usr/local/php_errors.log 清空日志的意思


4. 安装php的扩展模块(memcache)
http://www.aminglinux.com/bbs/thread-45-1-1.html

源码包的模块
cd /usr/local/src/php-5.3.28/ext/

如果想要用哪些模块,就进入到模块 执行这个命令
ext]# cd ftp
[root@Centos6 ftp]#/usr/local/php/bin/phpize
需要安装autoconf yum install autoconf
然后再执行一下命令/usr/local/php/bin/phpize
ls
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install 这时告诉你这个动态模块在哪里
ls + 模块路径
出现 ftp.so

/usr/local/php/bin/php -i |grep -i extension_dir

vi /usr/local/php/etc/php.ini 配置加上ftp模块,需要手动加
进去加上 extension=ftp.so extension这里说明是一个动态加载
然后 /usr/local/php/bin/php -m |grep ftp 就多了ftp这个模块了

 


二. mysql配置

mysql调优: http://www.aminglinux.com/bbs/thread-5758-1-1.html

/etc/my.cnf 已经拷贝了这个模板
[mysqld]
socket = /tmp/mysql.sock # 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(Linux下默认是/var/lib/mysql/mysql.sock文件)等我写完后你再读
port = 3306 # 指定MsSQL侦听的端口
key_buffer = 384M # key_buffer是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写)。索引被所有的线程共享,key_buffer的大小视内存大小而定。
table_cache = 512 # 为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。可以避免频繁的打开数据表产生的开销
sort_buffer_size = 2M # 每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。
注意:该参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100×6=600MB
read_buffer_size = 2M # 读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。=====
query_cache_size = 32M # 指定MySQL查询结果缓冲区的大小
read_rnd_buffer_size = 8M # 改参数在使用行指针排序之后,随机读用的。
myisam_sort_buffer_size =64M # MyISAM表发生变化时重新排序所需的缓冲
thread_concurrency = 8 # 最大并发线程数,取值为服务器逻辑CPU数量×2,如果CPU支持H.T超线程,再×2
thread_cache = 8 # #缓存可重用的线程数
skip-locking # 避免MySQL的外部锁定,减少出错几率增强稳定性。 wait_timeout = 8 # 表示空闲的连接超时时间,默认是28800s,这个参数是和interactive_timeout一起使用的,也就是说要想让wait_timeout 生效,必须同时设置interactive_timeout
interactive_timeout = 8
long_query_time = 1 ##慢查询日志的超时时间
log_slow_queries = /path/to/slow_queries ## 慢查询日志路径,必须配合上面的参数一同使用

 

============
查看key_reads / key_read_requests 这两的值
登录mysql

SHOW STATUS LIKE 'key_read%';

--------
show varables like 'table%'

 

apache 限制指定user_agent http://www.lishiming.net/thread-1033-1-1.html
打开虚拟主机配置文件
判断是用什么搜索引擎
有些user_agent 不是我们想要的,可以通过rewrite功能针对 %{HTTP_USER_AGENT} 来rewirete到404页,从而达到限制某些user_agent的请求。

配置如下
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*bot.* [NC]
RewriteCond %{REQUEST_URI} !^/404*
RewriteRule .* /404.html
</IfModule>

测试curl -xlocalhost:80 www.111.com -I 跳到了404
curl -A "sfjslkfjlsjgssfhsl "-xlocalhost:80 www.111.com -I 这个就不是404了

curl -A "botslkfjlsjgssfhsl "-xlocalhost:80 www.111.com -I 这个是404 因为包含了bot

请注意,你的404.html千万别再跳转到其他页面了,否则很有可能就会死循环了。
其实rewrite到404.html 并不是很好的办法,而apache的rewrite功能有一项就是forbidden ,那就是 F
配置如下
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*curl.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*bot.* [NC]
RewriteRule .* - [F]
</IfModule>
======================
apache 限制某些目录不能访问通过rewrite实现 http://www.lishiming.net/thread-3587-1-1.html


deny allow肯定是可以实现的,但是这个必须指定准确的目录,如果有很多个目录,但是都包含某个名字,比如
bbs.1.com/1/tmp/123.html
bbs.1.com/2/tmp/123.html
bbs.1.com/3/1/2/tmp/123.html
……
如果有很多,需要逐一去定义Directory 模块,这显然很麻烦,使用rewrite模块的 REQUEST_URI 就可以很容易实现。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^.*/data/* [NC] #data这个目录下的都访问不了
RewriteRule .* - [F]
</IfModule>


访问一下网站,看到很多东西没有出来,按下12,会看到有的文件是403就是限制了这个目录下面的文件了

======================
apache rewrite 出现死循环 http://www.lishiming.net/thread-1043-1-1.html

我的一条规则
RewriteRule ^.* /beian.html [R,L]
复制代码
使用curl测试,没有问题,但是使用浏览器访问时,出现了无限循环。
本来访问的是 www.111.com 结果变成了 www.111.com/111/111/111/.....
虽然在最后加了 [L] 依然不管用,可能apache还是不够智能,一直满足条件就一直去匹配,一直去跳转。最后没招了只能再加一个条件。

RewriteCond %{REQUEST_URI} !^/beian.html [NC]
RewriteRule ^.* /beian.html [R,L]

这样就不再循环了。

==================================================================================================

 

第四部分 -- mysql相关

1. 忘记root密码
http://www.lishiming.net/thread-252-1-1.html

进入mysql
which mysql
/usr/local/mysql/bin/mysql 没有设置密码之前可以这样子打开mysql

登录/usr/local/mysql/bin/mysql -uroot -p123456

如果忘记root密码或其他用户密码,不要急,按下面操作即可。
1. 编辑mysql主配置文件 my.cnf
vim /etc/my.cnf
在[mysqld]字段下添加参数
skip-grant 不需要授权
2. 重启数据库服务
service mysqld restart
3. 这样就可以进入数据库不用授权了
mysql -uroot

4. 修改相应用户密码
use mysql;
update user set password=password('aminglinux') where user='root';

flush privileges;
5. 修改/etc/my.cnf 去掉 skip-grant , 重启mysql服务
重启
/etc/init.d/mysqld restart

登录/usr/local/mysql/bin/mysql -uroot -paminglinux

看user表
use mysql;
select * from user\G;


=============
2.
skip-name-resolve(禁止解析域名)
skip-innodb (是mysql的引擎)

vim /etc/my.cnf 在配置里面加上上面两个,然后在/data/mysql 有几个文件会消失

3. 配置慢查询日志
#log_slow_queries = /path/to/slow_queries
#long_query_time = 1

查看配置文件,默认在下面文件找
vim /etc/init.d/mysqld 进去查找conf=/etc/my.cnf

4. innodb与myisam 常用mysql引擎,总结一下
http://www.lishiming.net/thread-97-1-1.html

5. mysql配置调优
http://www.lishiming.net/thread-5758-1-1.html

6. mysql常用操作
mysql -uroot -paminglinux
或者 mysql -uroot -h127.0.0.1 -paminglinux
mysql -uroot -h192.168.11.190 -P3306 -paminglinux

mysql -uroot -S /tmp/mysql.sock -paminglinux 可以用sock去通讯,只可以在本地用

查看都有哪些库 show databases;
调用系统的命令 system ls
查看某个库的表 use db; show tables;
查看表的字段结构 desc tb;
查看建表语句 show create table tb\G; \G显示比较有规则一点

当前是哪个用户 select user();
当前库 select database();
创建库 create database db1; mysql -uroot -paminglinux -e "create database discuz2"
创建表 create table t1 (`id` int(4), `name` char(40));
insert into t1 values(1, 'aming');
insert into t1 (`id`) values(2); 插入单个字段
select * from t1;

查看数据库版本 select version();
查看mysql状态 show status;
修改mysql参数 show variables like 'max_connect%'; set global max_connect_errors = 1000;
查看mysql队列 show processlist; ===============

grant all on *.* to 'root'@'10.0.2.100' identified by '123456'; *.*代表所有的库和表都授权

创建普通用户并授权 grant all on *.* to user1 identified by '123456';
grant all on db1.* to 'user2'@'10.0.2.100' identified by '111222';
flush privileges; 刷新一下磁盘
grant all on db1.* to 'user3'@'%' identified by '231222';

更改密码 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;
查询 select count(*) from mysql.user; select * from mysql.db; select * from mysql.db where host like '10.0.%';

更新 update db1.t1 set name='aaa' where id=1;
删除表字段 delete from t1 where id=3;
清空表的数据 truncate table db1.t1;
删除表 drop table db1.t1;
删除数据库 drop database db1;
修复表 repair table tb1 [use frm];
show processlist ; 看看任务都有哪些 show full processlist ;
show variables like '%timeout%';

在配置文件里面加上,两个必须同时用从可以
interactive_timeout = 10
wait_timeout=10

如果更改mysql的配置文件my.conf 就需要重启mysql,现在不需要重启就可以生效的方法(不是全局,全局需要写入到配置文件里面)
set global interactive_timeout = 10;

把重启的服务放到系统的环境 /etc/rc.local 下面,就可以开机自动生效=========
/usr/local/apache2/bin/apachectl start

查看帖子内容的表
select * from pre_forum_post\G;

搜索帖子
select * from pre_forum_post where subject like '%sjs%';


7. mysql备份与恢复
备份数据库 mysqldump -uroot -paminglinux db >1.sql
恢复 mysql -uroot -paminglinux db <1.sql

 

mysql -uroot -paminglinux -e "create database discuz2"


备份时指定字符集 mysqldump -uroot -paminglinux --default-character-set=utf8 db >1.sql
只备份表结构 mysqldump -uroot -paminglinux --default-character-set=utf8 -d db >1.sql
恢复指定字符集 mysql -uroot -paminglinux --default-character-set=utf8 db < 1.sql
只备份一个表 mysqldump -uroot -paminglinux db tb1 > 2.sql

8. 一台mysql服务器启动多个端口
http://www.lishiming.net/thread-63-1-1.html

http://www.aminglinux.com/bbs/forum.php?mod=viewthread&tid=6509&highlight=phpmyadmin

安装mysqlamin 管理平台

 

 

 

 

 

 

 

 

posted @ 2015-07-02 23:02  chenshoubiao  阅读(238)  评论(0编辑  收藏  举报