Lnmp 配置(Linux+Nginx+Mysql+Php)
1. Mysql 安装
yum install -y gcc gcc-c++ make ncurses-devel bison openssl-devel zlib-devel
lftp 192.168.0.254:/pub/docs/lamp/update/lnmp> get cmake-2.8.4.tar.gz
tar zxf cmake-2.8.4.tar.gz
cd cmake-2.8.4
./configure
make && make install(==>yum install cmake)

实验:注意在做实验之前最好先将之前的mysql php卸载掉。因为如果你不卸载的话系统会默认去选用用rpm包安装的。不会优先使用你用源码编译生成的包的。
步骤:
(1)cd ~
从服务器下载: lftp 192.168.0.254
cd /pub/docs/lamp/update/lnmp
get mysql-5.5.12.tar.gz httpd-2.2.19.tar.bz2 nginx-1.0.2.tar.gz
tar zxf mysql-5.5.12.tar.gz
cd mysql-5.5.12


-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \安装目录
-DMYSQL_DATADIR=/usr/local/mysql/data \数据库存放目录
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \Unix socket 文件路径
-DWITH_MYISAM_STORAGE_ENGINE=1 \安装 myisam 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \安装 innodb 存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \安装 archive 存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \安装 blackhole 存储引擎
-DWITH_PARTITION_STORAGE_ENGINE=1 \安装数据库分区
-DENABLED_LOCAL_INFILE=1 \允许从本地导入数据
-DWITH_READLINE=1 \快捷键功能
-DWITH_SSL=yes \支持 SSL
-DDEFAULT_CHARSET=utf8 \使用 utf8 字符
-DDEFAULT_COLLATION=utf8_general_ci \校验字符
-DEXTRA_CHARSETS=all \安装所有扩展字符集
-DMYSQL_TCP_PORT=3306 \MySQL 监听端口
注意在配置环境的时候此处的cmake 相当与之前的./configure.在上面的选项中,第1,2,3,4,\安装目录\数据库存放目录 \Unix socket 文件路径\安装 myisam 存储引擎 \支持 SSL\校验字符 \安装所有扩展字符集最好要写上,要不一会可能会出错的。
(2)make && make install
倘若出错,或者由于某种原因导致重新编译的时候,需要清除旧的对象文件和缓存信息。
make clean/tidy
rm -rf CmakeCache.txt

(3)useradd -u 26 -s /sbin/nologin mysql
id mysql (如果此时mysql的组id和本身的Id不一样,那么你可以使用groupmod -g 26 mysql)
cd /usr/local/mysql
chown -R mysql.mysql *
cp support-files/my-large.cnf /etc/my.cnf
my-medium.cnf
my-small.cnf
此时你在/usr/local/mysql 执行 scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
显示OK是对的。
chown -R root . *
此时文件中各自都是root.mysql
chown -R mysql data
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start
chkconfig mysqld on

echo "export PATH=\$PATH:/usr/local/mysql/bin" >> ~/.bash_profile
source ~/.bash_profile
mysql_secure_installation#按提示完成mysql安全设置,生产环境推荐使用
ln -s /usr/local/mysql/lib /usr/local/mysql/lib64 #不然php编译的时候找不到mysql的库文件
2. Php安装
(1)lftp 192.168.0.254:/pub/docs/lamp/update/lnmp> get libmcrypt-2.5.8.tar.bz2 libiconv-1.13.1.tar.gz  mcrypt-2.6.8.tar.gz  mhash-0.9.9.9.tar.bz2
tar zxf libiconv-1.13.1.tar.gz
#加强系统对支持字符编码转换的功能
cd libiconv-1.13.1/
./configure --libdir=/usr/local/lib64
make && make install

(2)
tar jxf libmcrypt-2.5.8.tar.bz2

# mcrypt mhash是php加密算法扩展库
cd libmcrypt-2.5.8
./configure --libdir=/usr/local/lib64
make && make install

cd libltdl
./configure –libdir=/usr/local/lib64 –enable-ltdl-install
make && make install

(3)tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9
./configure --libdir=/usr/local/lib64
make && make install

(4)ldconfig /usr/local/lib64
(5)tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
./configure --libdir=/usr/local/lib64
make && make install

#./configure时可能会报这个错:/bin/rm: cannot remove `libtoolT’: No such file or
directory 直接忽略(注意mhash要在mcrypt前面的噢!否则会报错的!)
(6)yum install net-snmp-devel curl-devel libxml2-devel libpng-devel libjpeg-devel freetype-devel gmp-devel openldap-devel -y
(7)useradd -M -s /sbin/nologin www(—M不创建家目录,-s没有shell)
(8)tar jxf php-5.3.6.tar.bz2
cd php-5.3.6

rhel6 lnmp_第1张图片(最好手写 啊。不要复制噢!)
./configure –prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql/ --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --without-pear --with-gettext --with-gmp --with-mcypt --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-libdir=lib64
make ZEND_EXTRA_LIBS='-liconv'(一定要加这个选项否则会出现:/root/php-5.3.6/ext/iconv/iconv.c:2624: undefined reference to `libiconv' /r类似的错误的噢!解决了大半天。。。。)
make install
(9)cd php-5.3.6
cp php.ini-production /usr/local/php/etc/php.ini
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
vi /usr/local/php/etc/php.ini

cgi.fix_pathinfo=0 #防止Nginx文件类型错误解析漏洞
如果不为0 而为1的话,那么在你用ll /use/local/nginx/html
curl -I http://localhost/test.php(在你安装好nginx之后你关闭httpd默认访问的是/usr/local/nginx/html/index.html
curl -I http://localhost/test.txt/test.php
curl -I http://localhost/test1.jpg
curl -I http://localhost/test1.jpg/test1.php
看Content Type。。。。。
改为0正常的时候,可以防止漏洞,此时你在web网页的时候登录:http://desktop20.example.com/test.txt/test.php 会出现 No input file specified
(10) cd /usr/local/php/etc
mv php-fpm.conf.default php-fpm.conf #去掉以下几行的注释
vi php-fpm.conf

   
   
   
   
  1. pid = run/php-fpm.pid(一定要有的哦!) 

  2. pm.max_children = 50 

  3. pm.start_servers = 20 

  4. #在生产环境中一定要做压力测试,找到最合适的进程数组合 

  5. pm.min_spare_servers = 5 

  6. pm.max_spare_servers = 35 

  7. pm.max_requests = 500 

 

chmod +x /etc/init.d/php-fpm
service php-fpm start
chkconfig php-fpm on
echo "export PATH=\$PATH:/usr/local/php/bin" >> ~/.bash_profile
source ~/.bash_profile

3. Nginx安装
(1) yum install -y pcre-devel
tar zxf nginx-1.0.2.tar.gz
cd nginx-1.0.2
vi auto/cc/gcc

#CFLAGS=”$CFLAGS -g” (注释掉这行,去掉debug模式编译,编译以后程序只有几百k)
(2)vi src/core/nginx.h
#define NGINX_VERSION "1.0.2”
#define NGINX_VER "nginx" (修改此行,去掉后面的“NGINX_VERSION”,为了安全,这样编译后外界无法获取程序的版本号)
(3)./configure --user=www --group=www --prefix=/usr/local/nginx --with-
http_stub_status_module --with-http_ssl_module

(4)make && make install
ln -s /usr/local/nginx/sbin/nginx /usr/sbin

(5)vi /usr/local/nginx/conf/nginx.conf

   
   
   
   
  1. user  www www; 
  2. worker_processes  4; 
  3. error_log  logs/error.log  info; 
  4. events { 
  5.      use  epoll; 
  6.     worker_connections  1024; 
  7. http { 
  8.     include       mime.types; 
  9.     default_type  application/octet-stream; 
  10.     sendfile        on; 
  11.     tcp_nopush     on; 
  12.     keepalive_timeout  65; 
  13.     tcp_nodelay on; 
  14.     gzip  on; 
  15.     server { 
  16.         listen       80; 
  17.         server_name  desktop9.example.com; 
  18.         location / { 
  19.             root   html; 
  20.             index  index.html index.htm; 
  21.         } 
  22.         error_page   500 502 503 504  /50x.html; 
  23.         location = /50x.html { 
  24.             root   html; 
  25.         } 
  26.         location ~ \.php$ { 
  27.             root           html; 
  28.             fastcgi_pass   127.0.0.1:9000; 
  29.             fastcgi_index  index.php; 
  30.             include        fastcgi.conf; 
  31.         } 
  32.     location /status { 
  33.         stub_status on; 
  34.         access_log off; 
  35.         } 
  36.         
  37.     } 


nginx -t
#检测语
nginx
#运行nginx
nginx -s reload
#重载主配置文件
nginx -s stop
#关闭nginx
(如果出现nginx正在使用的情况,记住可以使用killall nginx

4. Php功能模块扩展
wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
wget http://bart.eaccelerator.net/source/0.9.6/eaccelerator-0.9.6.tar.bz2
wget http://pecl.php.net/get/memcache-2.2.5.tgz
Memcache是danga.com的一个开源项目,它是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的Hash表,能够用来存储各种格式的数据。可以类比于MySQL这样的服务,
而PHP扩展的Memcache实际上是连接Memcache的方式。
(1)yum install libevent libevent-devel -y
(2)lftp 192.168.0.254:/pub/docs/memcached> get eaccelerator-0.9.6.tar.bz2 memcached-1.4.5.tar.gz memcache-2.2.5.tgz
tar zxf memcached-1.4.5.tar.gz
cd memcached-1.4.5
./configure
make && make install
memcached -u root -m 10 -d
(3)yum install autoconf -y
tar zxf memcache-2.2.5.tar.gz
cd memcache-2.2.5
phpize(
phpize是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块
比如你想在原来编译好的php中加入memcached或者ImageMagick等扩展模块,可以使用phpize,通过以下几步工作。
./configure --with-php-config=/usr/local/php/bin/php-config(
./configure 后面可以指定的是php-config文件的路径
make && make install
(4)vi /usr/local/php/etc/php.ini

   
   
   
   
  1. extension=memcache.so   

service php-fpm reload

(5)vi /usr/local/nginx/html/test.php

   
   
   
   
  1. php 

  2. $memcache = new Memcache;  

  3. $memcache->connect('127.0.0.1', 11211) or die ("Could not connect");  

  4. $version = $memcache->getVersion();  

  5. echo "Server's version: ".$version."\n";  

  6. $tmp_object = new stdClass;  

  7. $tmp_object->str_attr = 'test';  

  8. $tmp_object->int_attr = 123;  

  9. $memcache->set('key', $tmp_object, false, 10) or die ("Failed to save data at the server");  

  10. echo "Store data in the cache (data will expire in 10 seconds)\n";  

  11. $get_result = $memcache->get('key');  

  12. echo "Data from the cache:\n";  

  13. var_dump($get_result); ?> 

通过网页访问:
http://192.168.0.20/test.php
cp memcache.php /usr/local/nginx/html
(6)vi /usr/local/nginx/html/memcache.php
define('ADMIN_USERNAME','admin');
// Admin Username
define('ADMIN_PASSWORD','westos');
// Admin Password
$MEMCACHE_SERVERS[] = '192.168.0.20:11211'; // add more as an 将array(//$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
注释掉!!!否则会影响效果滴!)
通过网页访问:
http://192.168.0.20/memcache.php
5.eaccelerator的使用。
eaccelerator是一个自由开放源码PHP加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除, 它还有对脚本起优化作用,以加快其执行效率, 使您的PHP程序代码执效率能提高1-10倍;
(1)tar jxf eaccelerator-0.9.6.tar.bz2
cd eaccelerator-0.9.6
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
(2)mkdir -m 777 /var/cache/eaccelerator
vi /usr/local/php/etc/php.ini
 

   
   
   
   
  1. extension="eaccelerator.so" 

  2. eaccelerator.shm_size="64" 

  3. eaccelerator.cache_dir="/var/cache/eaccelerator" 

  4. eaccelerator.enable="1" 

  5. eaccelerator.optimizer="1" 

  6. eaccelerator.check_mtime="1" 

  7. eaccelerator.debug="0" 

  8. eaccelerator.log_file = "/var/log/httpd/eaccelerator_log" 

  9. eaccelerator.filter="" 

  10. eaccelerator.shm_max="0" 

  11. eaccelerator.shm_ttl="3600" 

  12. eaccelerator.shm_prune_period="3600" 

  13. eaccelerator.shm_only="0" 

  14. eaccelerator.compress="1" 

  15. eaccelerator.compress_level="9" 

  16. eaccelerator.allowed_admin_path = "/usr/local/nginx/html" 

  17. eaccelerator.shm_size="32" 

eAccelerator 可以使用的共享内存的数量 (以兆为单位) . "0" 是指操作系统的默认值. 默认值是
"0".可根据服务器的实际情况来调整,16,32,64,128都是可以的。
eaccelerator.cache_dir="/var/cache/eaccelerator"
这个目录是给磁盘缓存使用. eAccelerator 在这里储存预先编译好的代码, 进程数据, 内容以及用
户的自定义内容. 同样的数据也能被储存在共享内存中 (这样可以提高访问速度). 默认的设置是 "/
tmp/eaccelerator".
eaccelerator.enable="1"
开启或关闭 eAccelerator。"1" 为开启,"0" 为关闭。默认值为 "1"。
eaccelerator.optimizer="1"
启或关闭内部优化器,可以提升代码执行速度。"1" 为开启,"0" 为关闭。默认值为 "1"。
eaccelerator.check_mtime="1"
打开或者关闭 PHP 的文件修改检查. "1" 是指打开, "0" 是指关闭. 如果您在修改以后重新编译 PHP
的文件,那么您应当设置为 "1". 默认值是 "1".
eaccelerator.debug="0"
开启或关闭调试日志记录。"1" 为开启,"0" 为关闭。默认值为 "0"。会将缓存命中得记录写入日
志。
eaccelerator.filter=""
判断哪些 PHP 文件必须缓存。您可以指定缓存和不缓存的文件类型(如 "*.php *.phtml"等)
如果参数以 "!" 开头,则匹配这些参数的文件被忽略缓存。默认值为 "",即,所有 PHP 文件都将被
缓存。
eaccelerator.shm_max="0"
当使用 " eaccelerator_put() " 函数时禁止其向共享内存中存储过大的文件。该参数指定允许存储
的最大值,单位:字节 (10240, 10K, 1M)。"0" 为不限制。默认值为 "0"。
eaccelerator.shm_ttl="3600"
当 eAccelerator 获取新脚本的共享内存大小失败时,它将从共享内存中删除所有在最后 "shm_ttl"
秒内没有存取的脚本缓存。默认值为 "0",即:不从共享内春中删除任何缓存文件。
eaccelerator.shm_prune_period="3600"
当 eAccelerator 获取新脚本的共享内存大小失败时,他将试图从共享内存中删除早于
"shm_prune_period" 秒的缓存脚本。默认值为 "0",即:不从共享内春中删除任何缓存文件。
eaccelerator.shm_only="0"
允许或禁止将已编译脚本缓存在磁盘上。该选项对 session 数据和内容缓存无效。默认值为 "0",
即:使用磁盘和共享内存进行缓存。
eaccelerator.compress="1"
允许或禁止压缩内容缓存。默认值为 "1",即:允许压缩。
eaccelerator.compress_level="9"
指定内容缓存的压缩等级。默认值为 "9",为最高等级。
eaccelerator.keys = "disk_only"
eaccelerator.session = "disk_only"
eaccelerator.content = "disk_only"
设置内容缓存的存放的地方,可以设置为:
shm_and_disk
在共享缓存和硬盘(默认值)
shm
默认存在共享内存,如果共享内存已满或大小超过 "eaccelerator.shm_max" 的值,就
存到硬盘
shm_only 只存放在共享内存
disk_only 只存放在硬盘
none 不缓存数据
eaccelerator.allowed_admin_path = "/usr/local/nginx/html"
这是控制面板的地址,安装包里有个control.php,你把它复制到网站的任意目录,可以用它查看和管
理,这个必须指定,否则查看缓存内容的时候会出错
访问http://desktop20.example.com/memcache.php
即可出现memcache