前面一节中,我们初体验了Nginx的安装以及使用浏览器访问自己的html页面,Nginx作为一个优秀的WEB服务器,如果只是支持静态页面,那么整个互联网数据就没法和用户进行沟通。那么有童鞋就问了,为什么静态页面就没法和用户沟通了?
因为一个网站如果要想和用户沟通,那么就必须允许用户进行数据的输入与提交,从技术角度来讲,就是我们常说的动态网页,除了动态网页还不够,我们还必须存储用户提交的数据,比如:评论、留言等。那么这些就是我们今天要讲的一个后台Service,LNMP架构的实现,即Linux+Nginx+Mysql+PHP,其中PHP就是一种网页制作动态语言,当然除了它,我们还有Perl、Python、Jsp、Asp等动态网页脚本语言,而LNMP架构是当前互联网中使用最广泛的架构之一。
今天我们要讲的与网上绝大多数的LNMP架构搭建可能都不太一样,网上绝大多数文章一上来就是使用源码,各种编译,各种找编译问题,想要看源码编译折腾的童鞋可以看我另外一篇文章:https://www.guoziweb.com/?p=748 而本文中,我尽量以一种简洁快速的方式让大家轻松实现,到底有多简洁呢?请看下文。
1、安装PHP-FPM和MYSQL
在CentOS系统中,很容易安装这两样服务,那么为什么是安装PHP-FPM而不是PHP呢?
PHP-FPM其实是PHP的5.3版本就内置添加进来的一个第三方插件,现在既然是内置了,那么就不存在第三方的说法了,直接变成私有的东西。它的存在就是为了作为FCGI技术解决Nginx本身不能解析PHP脚本设计,并不是说Nginx做得不够强大,而是它做得足够灵活,它能提供各种第三方接口,以体现其强大的灵活性。
关于FCGI技术的解释这里就不作多写了,有兴趣的童鞋可以自行上百度或谷歌查阅。好了,安装我们还是使用yum在线安装的方式,这就是前面我们提到的简洁的方式(其实我们Nginx也可以使用yum在线安装方式,只是因为我们后面会涉及到开发Nginx模块,所以使用了源码编译的方式,让大家深入了解下)。
yum -y install php-fpm php-* mysql-server
怎么样?是不是很简单,我们安装了php-fpm模块,为了避免少PHP扩展库,我们把所有的php扩展库都安装上了,同时也安装好了mysql的server端。我们可以使用如下命令继续查看php-fpm安装的具体位置:
[root@localhost ~]# rpm -qa | grep php-fpm php-fpm-5.3.3-46.el6_6.x86_64 [root@localhost ~]# rpm -ql php-fpm-5.3.3-46.el6_6.x86_64 /etc/logrotate.d/php-fpm /etc/php-fpm.conf /etc/php-fpm.d /etc/php-fpm.d/www.conf /etc/rc.d/init.d/php-fpm /etc/sysconfig/php-fpm /usr/sbin/php-fpm /usr/share/doc/php-fpm-5.3.3 /usr/share/doc/php-fpm-5.3.3/LICENSE /usr/share/doc/php-fpm-5.3.3/php-fpm.conf.default /usr/share/fpm/status.html /usr/share/man/man8/php-fpm.8.gz /var/log/php-fpm /var/run/php-fpm
2、开始配置
我们先把/etc/php-fpm.conf备份下,同时去掉所有注释和空行语句:
cp /etc/php-fpm.conf /etc/php-fpm.conf.bak grep -Ev '^(;|$)' /etc/php-fpm.conf.bak >/etc/php-fpm.conf
查看下该配置文件内容如下:
include=/etc/php-fpm.d/*.conf
[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
daemonize = no
这时,我们在/etc/php-fpm.d/目录下会发现有一个www.conf文件,我们如法炮制:
cd /etc/php-fpm.d cp www.conf www.conf.bak grep -Ev '^(;|$)' www.conf.bak > www.conf
从现在开始,我们下面的配置字段将都不做解释,你只管按我的配置好就行了,随着学习的慢慢深入,我们后面会接触到。
我们将其中的user和group字段值修改成www,listen字段值修改成/tmp/php-fcgi.sock,为了和Nginx接口进行对接,修改了一些参数,最后的内容如下:
[www]
listen = /tmp/php-fcgi.sock
listen.allowed_clients = 127.0.0.1
user = www
group = www
pm = dynamic
pm.max_children = 5
pm.start_servers = 3
pm.min_spare_servers = 1
pm.max_spare_servers = 3
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/sessionchroot = /var/www/html
注意,这里边增加了一行配置chroot = /var/www/html这是后面我们WEB目录配置的根目录。
上一节中,我们将Nginx的配置文件放在:/usr/local/nginx/nginx.conf,我们修改nginx.conf的内容修改成如下(你现在不需要懂这些配置,我们先只管运行起来再说,透过现象看本质):
worker_processes 1; user www www; error_log logs/error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main 'remote_addr -remote_user [time_local] "request" ' 'statusbody_bytes_sent "http_referer" ' '"http_user_agent" "http_x_forwarded_for"'; access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; server { listen 80; server_name localhost; charset utf-8; location / { root /var/www/html; index index.html index.htm index.php; if (!-erequest_filename) { rewrite ^/(.*)/index.php/1 last; break; } } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/html; } location ~ \.php(|/) { setscript uri; setpath_info "/"; if (uri ~ "^(.+\.php)(/.+)") { setscript 1; setpath_info 2; } fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param PATH_INFOpath_info; fastcgi_param SCRIPT_FILENAME document_rootscript; } } }
到目前为止,我们还缺少一个nginx的启动脚本,这里我也写好了,直接粘贴放到/etc/init.d/nginx文件中即可:
#! /bin/sh # chkconfig: 2345 55 25 # Description: Startup script for nginx webserver on Debian. Place in /etc/init.d and # run 'update-rc.d -f nginx defaults', or use the appropriate command on your # distro. For CentOS/Redhat run: 'chkconfig --add nginx' ### BEGIN INIT INFO # Provides: nginx # Required-Start: all # Required-Stop:all # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: starts the nginx web server # Description: starts nginx using start-stop-daemon ### END INIT INFO # Author: guozi # website: http://lnmp.org . /etc/init.d/functions PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=nginx NGINX_BIN=/usr/local/nginx/sbin/NAME CONFIGFILE=/usr/local/nginx/NAME.conf PIDFILE=/var/run/NAME.pid SCRIPTNAME=/etc/init.d/NAME case "1" in start) echo -n "StartingNAME... " if netstat -tnpl | grep -q nginx;then echo "NAME (pid `pidofNAME`) already running." exit 1 fi NGINX_BIN -cCONFIGFILE if [ "?" != 0 ] ; then echo"failed" exit 1 else echo"done" fi ;; stop) echo -n "StopingNAME... " if ! netstat -tnpl | grep -q nginx; then echo "NAME is not running." exit 1 fiNGINX_BIN -s stop for nid in `ps aux | grep "nginx:" | grep -v grep | awk '{print 1}'` do kill -9nid >/dev/null 2>&1 done if [ "?" != 0 ] ; then echo"failed. Use force-quit" exit 1 else echo"done" fi ;; status) if netstat -tnpl | grep -q nginx; then PID=`pidof nginx` echo "NAME (pid PID) is running..." else echo "NAME is stopped" exit 0 fi ;; force-quit) echo -n "Terminating NAME... " if ! netstat -tnpl | grep -q nginx; then echo "NAME is not running." exit 1 fi kill `pidof NAME` if [ "?" != 0 ] ; then echo " failed" exit 1 else echo " done" fi ;; restart) SCRIPTNAME stop sleep 1SCRIPTNAME start ;; reload) echo -n "Reload service NAME... " if netstat -tnpl | grep -q nginx; thenNGINX_BIN -s reload echo " done" else echo "NAME is not running, can't reload." exit 1 fi ;; configtest) echo -n "TestNAME configure files... " NGINX_BIN -t ;; *) echo "Usage:SCRIPTNAME {start|stop|force-quit|restart|reload|status|configtest}" exit 1 ;; esac
接着再对/etc/init.d/nginx赋与可执行权限并添加到开机启动项中:
chmod a+x /etc/init.d/nginx chkconfig nginx on
3、启动所有服务
/etc/init.d/php-fpm start /etc/init.d/nginx start
4、测试一下
我们在/var/www/html目录中创建一个1.php文件,内容如下:
<?php echo phpinfo(); ?>
接着在网页中访问链接:http://192.168.128.7/1.php 效果如下图:
好了,今天就至此为止了,大家有任何疑问都可以给我留言哦
如果需要一键安装脚本,请访问我的github链接:
- 微信扫码赞助
-
- 支付宝赞助
-