在之前的博客中虽然已经总结过了 MySQL 和 Apache 的安装、配置,但分开总结总是不太系统,这篇博客将会对LNMP(Linux + Nginx + MySQL +PHP)做一个比较系统的总结。需要提醒的一点是,这里我们并没有将 NMP 都安装在 /usr/local/ 目录下,而是统一安装在了 /opt/ 目录下,在博客末尾给出的参考资料中提供了/usr/local/ 目录下的安装方法,如有需要可以参考。
1. MySQL:
这里我们使用的 MySQL 版本为 mysql-5.1.40,免编译安装包。首先进入 /usr/local/src/ 目录下载安装包:
[root@localhost ~]# cd /usr/local/src [root@localhost ~]# wget http://syslab.comsenz.com/downloads/linux/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
解压,移动到 /opt/ 目录下,并改名为 mysql :
[root@localhost src]# tar -zxf mysql-5.1.40-linux-i686-icc-glibc23.tar.gz [root@localhost src]# mv mysql-5.1.40-linux-i686-icc-glibc23 /opt/mysql
添加 mysql 用户,不允许其登录:
[root@localhost src]# cd /opt/mysql [root@localhost mysql]# useradd -s /sbin/nologin mysql
创建 /data/mysql/目录,存放 MySQL 数据:
[root@localhost mysql]# mkdir -p /data/mysql [root@localhost mysql]# chown -R mysql:mysql !$
初始化 MySQL:
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
复制、修改配置文件:
[root@localhost mysql]# /bin/cp ./support-files/my-large.cnf /etc/my.cnf
添加到服务中方便启动/ 关闭:
[root@localhost mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld [root@localhost mysql]# chmod 755 !$ [root@localhost mysql]# vim !$
修改其中两行,修改前分别为:
basedir= datadir=
修改后为:
basedir=/opt/mysql datadir=/data/mysql
保存退出。其中,basedir设置为 MySQL 的安装目录,对于 MySQL 来说,它的默认安装目录为/usr/local/mysql ,如果已经安装到了该目录下,则无需特意设置 basedir ,否则像本例中,将 MySQL 安装到了/opt/mysql 下,basedir 则要设置为 /opt/mysql 。同理,将 datadir 设置为和前面 mysql_install_db 中对应的 /data/mysql 。
将 mysqld 添加到服务:
[root@localhost mysql]# chkconfig --add mysqld [root@localhost mysql]# chkconfig mysqld on [root@localhost mysql]# service mysql start / stop / restart
将 MySQL 相关命令路径添加到 PATH 变量中:
[root@localhost mysql]# vim /etc/profile
最下方添加如下一行内容:
export PATH=$PATH:/opt/mysql/bin [root@localhost mysql]# source !$
至此 MySQL 已经安装完毕,位于 /opt/ 目录下。如果启动 MySQL 失败,可以去 /data/mysql/ 目录下查看错误日志排查原因,如此处主机名为 localhost.localhostdomain,则错误日志名称通常为localhost.localdomain.err 。有关 MySQL 配置可以参考之前的博客,地址如下:
http://xitongjiagoushi.blog.51cto.com/9975742/1627864
2. PHP:
这里我们使用的 PHP版本为 php-5.3.27,为源码包,需要编译安装。首先进入/usr/local/src/ 目录下载安装包:
[root@localhost ~]# cd /usr/local/src [root@localhost src]# wget http://am1.php.net/distributions/php-5.3.27.tar.gz
解压:
[root@localhost src]# tar -zxf php-5.3.27.tar.gz [root@localhost src]# cd php-5.3.27
添加 php-fpm 用户,不允许其登录:
[root@localhost php-5.3.27]# useradd -s /sbin/nologin php-fpm
编译、安装前的配置:
[root@localhost php-5.3.27]# ./configure \ --prefix=/opt/php\ //指定PHP安装路径 --with-config-file-path=/opt/php/etc\ //与上述路径对应 --enable-fpm \ --with-fpm-user=php-fpm\ --with-fpm-group=php-fpm\ --with-mysql=/opt/mysql\ //对应mysql的安装路径 --with-mysql-sock=/tmp/mysql.sock\ --with-libxml-dir\ --with-gd \ --with-jpeg-dir\ --with-png-dir \ --with-freetype-dir\ --with-iconv-dir\ --with-zlib-dir\ --with-mcrypt \ --enable-soap \ --enable-gd-native-ttf\ --enable-ftp \ --enable-mbstring\ --enable-exif \ --enable-zend-multibyte\ --disable-ipv6 \ --with-pear \ --with-curl \ --with-openssl
注意,在 ./configure 的过程中可能会有报出很多次错,这是缺少某些库造成的,下面列出一些错误信息及解决方法,供参考:
(1)缺少 openssl库:
configure: error: Cannot find OpenSSL's<evp.h>
解决方法:yum 安装 openssl-devel
[root@localhost php-5.3.27]# yum install -yopenssl-devel
(2)缺少 libcurl库:
configure: error: Please reinstall thelibcurl distribution -easy.h should be in <curl-dir>/include/curl/
解决方法:yum 安装 libcurl-devel
[root@localhost php-5.3.27]# yum install -ylibcurl-devel
(3)缺少 jpeglib库:
configure: error: jpeglib.h not found.
解决方法:yum 安装 jpeglib-devel
[root@localhost php-5.3.27]# yum install -ylibjpeg-devel
(4)缺少 libpng-devel库:
configure: error: png.h not found.
解决方法:yum 安装 libpng-devel
[root@localhost php-5.3.27]# yum install -ylibpng-devel
(5)缺少freetype 库:
configure: error: freetype.h not found.
解决方法:yum 安装freetype-devel
[root@localhost php-5.3.27]# yum install -yfreetype-devel
(6)缺少 libmcrypt库:
configure: error: mcrypt.h not found.Please reinstall libmcrypt.
[root@localhost php-5.3.27]# yum install -ylibmcrypt-devel
上面给出的几种错误信息可能会涵盖不全具体安装过程中的错误,但是总结一下我们不难发现,可以根据报错提示大概猜出所需安装的文件名,而 -devel 是 development 的缩写,表示开发包(无 -devel 和有 -devel 就类似于 jre 和 jdk 的关系,jdk 包含了 jre,而 jre 不包含 jdk)。如果实在不知道要 yum 哪个名字,利用搜索引擎也能很快得到答案。如果 yum 安装失败,可能是 yum 源中无对应安装包,更换 yum 源(如 epel 源)或者直接搜索相应安装包使用 rpm 命令进行安装即可。这里给出 epel 源的安装方法,作为补充知识:
[root@localhost ~]# yum install -y epel-release
在 ./configure 成功后,开始编译、安装:
[root@localhost php-5.3.27]# make && make install
检验是否安装成功:
[root@localhost php-5.3.27]# echo $?
3.NGINX:
这里我们使用的 NGINX版本为nginx- 1.4.4,为源码包,需要编译安装。首先进入 /usr/local/src/ 目录下载安装包:
[root@localhost ~]# cd /usr/local/src [root@localhost src]# wget http://nginx.org/download/nginx-1.4.4.tar.gz
解压:
[root@localhost src]# tar -zxf nginx-1.4.4.tar.gz
编译、安装前的配置:
[root@localhost src]# cd nginx-1.4.4 [root@localhost nginx-1.4.4]#./configure \ --prefix=/opt/nginx\ //指定nginx 安装路径 --with-http_realip_module\ --with-http_sub_module\ --with-http_gzip_static_module\ --with-http_stub_status_module \ --with-pcre
注意,在./configure 的过程中可能会报出一些错误(相对于 php 来说少了很多),这是缺少某些库造成的,下面列出一些错误信息及解决方法,供参考:
(1)HTTPrewrite错误:
./configure: error: the HTTP rewrite modulerequires the PCRE library.
You can either disable the module by using--without-http_rewrite_module
option, or install the PCRE library intothe system, or build the PCRE library
statically from the source with nginx byusing --with-pcre=<path> option.
解决方法:yum 安装 pcre-devel
[root@localhost nginx-1.4.4]# yum install-y pcre-devel
(2)缺少 zlib 库:
./configure: error: the HTTP gzip modulerequires the zlib library.
You can either disable the module by using--without-http_gzip_module
option, or install the zlib library intothe system, or build the zlib library
statically from the source with nginx byusing --with-zlib=<path> option.
解决方法:yum 安装zlib-devel
[root@localhost nginx-1.4.4]# yum install-y zlib-devel
(3)缺少 libxml2库:
configure: error: xml2-config not found.Please check your libxml2 installation.
解决方法: yum 安装libxml2-devel
[root@localhost nginx-1.4.4]# yum install-y libxml2-devel
在 ./configure 成功后,开始编译、安装:
[root@localhost nginx-1.4.4]# make && make install
配置 nginx 成为服务:
[root@localhost nginx-1.4.4]# vim /etc/init.d/nginx
#!/bin/bash # chkconfig: -30 21 # description:http service. # SourceFunction Library ./etc/init.d/functions # Nginx Settings //下面三行要与 nginx 实际安装路径匹配 NGINX_SBIN="/opt/nginx/sbin/nginx" NGINX_CONF="/opt/nginx/conf/nginx.conf" NGINX_PID="/opt/nginx/logs/nginx.pid" RETVAL=0 prog="Nginx" start() { echo -n $"Starting $prog: " mkdir -p /dev/shm/nginx_temp daemon $NGINX_SBIN -c $NGINX_CONF RETVAL=$? echo return $RETVAL } stop() { echo -n $"Stopping $prog: " killproc -p $NGINX_PID $NGINX_SBIN-TERM rm -rf /dev/shm/nginx_temp RETVAL=$? echo return $RETVAL } reload(){ echo -n $"Reloading $prog: " killproc -p $NGINX_PID $NGINX_SBIN -HUP RETVAL=$? echo return $RETVAL } restart(){ stop start } configtest(){ $NGINX_SBIN -c $NGINX_CONF -t return 0 } case"$1" in start) start ;; stop) stop ;; reload) reload ;; restart) restart ;; configtest) configtest ;; *) echo $"Usage: $0{start|stop|reload|restart|configtest}" RETVAL=1 esac exit $RETVAL
保存退出,添加到系统服务中:
[root@localhost nginx-1.4.4]# chmod 755 !$ [root@localhost nginx-1.4.4]# chkconfig --add nginx [root@localhost nginx-1.4.4]# chkconfig nginx on
更改 nginx 配置:
[root@localhost nginx-1.4.4]# cd /opt/nginx [root@localhost nginx]# > ./conf/nginx.conf [root@localhost nginx]# vim !$
user nobodynobody; worker_processes2; error_log /opt/nginx/logs/nginx_error.logcrit; pid /opt/nginx/logs/nginx.pid; worker_rlimit_nofile51200; events { use epoll; worker_connections 6000; } http { include mime.types; default_type application/octet-stream; server_names_hash_bucket_size 3526; server_names_hash_max_size 4096; log_format combined_realip '$remote_addr$http_x_forwarded_for [$time_local]' '$host "$request_uri" $status' '"$http_referer""$http_user_agent"'; sendfile on; tcp_nopush on; keepalive_timeout 30; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; connection_pool_size 256; client_header_buffer_size 1k; large_client_header_buffers 8 4k; request_pool_size 4k; output_buffers 4 32k; postpone_output 1460; client_max_body_size 10m; client_body_buffer_size 256k; client_body_temp_path /opt/nginx/client_body_temp; proxy_temp_path /opt/nginx/proxy_temp; fastcgi_temp_path /opt/nginx/fastcgi_temp; fastcgi_intercept_errors on; tcp_nodelay on; gzip on; gzip_min_length 1k; gzip_buffers 4 8k; gzip_comp_level 5; gzip_http_version 1.1; gzip_types text/plainapplication/x-javascript text/css text/htm application/xml; server { listen 80; server_name localhost; index index.html index.htm index.php; root /opt/nginx/html; location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /opt/nginx/html$fastcgi_script_name; } } }
保存退出后,检验配置文件是否正确:
[root@localhost nginx]# sbin/nginx -t
显示如下信息则配置正确:
nginx: theconfiguration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx:configuration file /usr/local/nginx/conf/nginx.conf test is successful
启动 nginx :
[root@localhost nginx]# service nginx start
如果启动失败,可以查看错误日志排查原因:
[root@localhost nginx]# vim ./logs/error.log
至此,我们已经将 MySQL, PHP 和 NGINX 安装完毕,通过能否解析php 文件检验是否安装成功:
[root@localhost nginx]# vim ./html/test.php
<?php echo "testing php"; ?>
保存退出,测试:
[root@localhost nginx]# curl localhost/test.php testingphp[root@localhost nginx]#
如上显示结果表明php 解析正确。
参考资料:
http://www.aminglinux.com/study_v2/chapter18.html