CentOS 7搭建LNMP教程
Nginx (读“enginex”)是一款免费、开源、高性能的HTTP服务器。
Nginx因性能稳定、功能丰富、配置简单、资源消耗低而著称。
本文介绍如何在Linux服务器(CentOS7)上安装Nginx、MySQL和PHP7(或者PHP5),这个环境也简称LNMP或LEMP。
其中,Nginx和PHP的采用PHP-FPM方式通信。
1约定
本问中的测试主机名用本地IP地址:http://127.0.0.1,请根据具体情况替换。
教程中的命令都是在root权限下操作,请切换到root用户,命令:
su
输入密码后进入root用户控制台。
2安装MySQL5
与CentOS6不同,CentOS7服务器必须通过社区仓库来安装MySQL。
如果像CentOS6中用:
yuminstallmysql
默认就会安装MariaDB数据库。
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。
开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险。
因此,社区采用分支的方式来避开这个风险,目前来看没有太大必要。
MySQL的社区仓库:https://dev.mysql.com/downloads/repo/yum/。
安装步骤:
wgethttp://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm-ivhmysql-community-release-el7-5.noarch.rpm yumupdate yuminstallmysql-server
在询问的时候键入y确定安装。
完成后,MySQL默认安装到/var/lib/mysql目录下。
然后启动MySQL,并设置开机启动:
systemctlstartmysqld#启动MySQL systemctlenablemysqld#开机启动ySMySQL
MySQL安装后会绑定到地址localhost(127.0.0.1),默认用户名是root,密码为空。
使用下面的命令修改root密码:
mysql_secure_installation
MySQL5.7.6+版本修改root密码稍有不同,请看这里:MySQL5.7修改默认root密码。
3安装Nginx
如果系统上有安装了Apache,先卸载。
servicehttpdstop systemctldisablehttpd yumremovehttpd
再安装Nginx:
yuminstallepel-release yum-yinstallnginx
启动Nginx,并设置为开机启动:
systemctlstartnginx systemctlenablenginx
在浏览器中输入服务器的域名或IP地址(如:http://127.0.0.1),会看到如下的内容,说明安装成功:
Nginx默认的HTML根目录是:/usr/share/nginx/html,可以修改其下的index.html的内容再看看效果。
为让web应用能读写HTML根目录下的目录和文件,需将其拥有者改为nginx用户:
chown-Rnginx:nginxhtml/
4安装PHP-FPM
PHP通过PHP-FPM(FastCGI进程管理器)可以很好地与Nginx协同工作。
PHP-FPM针对不同规模的网站功能和性能都非常优良,尤其是高并发大型网站。
如下,安装PHP5或PHP7都可以,两者安装其一即可。
PHP5安装步骤:
yuminstallphpphp-mysqlphp-fpm
PHP7安装步骤:
rpm-ivhhttp://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm#安装EPEL源 rpm-Uvhhttps://mirror.webtatic.com/yum/el7/webtatic-release.rpm#安装Webstatic源 yuminstallphp70wphp70w-commonphp70w-fpmphp70w-opcachephp70w-mysqlndphp70w-gdphp70w-mbstring#PHP5.3.0以上推荐使用mysqlnd驱动,而不是msyql
这里,我们用webstatic源来安装PHP7。
webstatic源还有很多PHP7.0扩展,地址:https://webtatic.com/packages/php70/。
PHP7.1版本把地址中的php70改成php71即可。
然后是配置。打开文件/etc/php.ini,删除cgi.fix_pathinfo前面的;注释符,再赋值为0,如下:
[...] cgi.fix_pathinfo=0 [...]
再配置PHP-FPM。打开文件/etc/php-fpm.d/www.conf,
- 将127.0.0.1:9000改为php-fpm.sock文件
- 取消listen.owner和listen.group前面的注释
- 将user和group的值由apache改为nginx
如下:
[...] listen=/var/run/php-fpm/php-fpm.sock [...] listen.owner=nobody listen.group=nobody [...] user=nginx group=nginx [...]
启动PHP-FPM,并设置为开机启动:
systemctlstartphp-fpm systemctlenablephp-fpm
PHP-FPM启动之后,会生成socket文件/var/run/php-fpm/php-fpm.sock作为守护进程运行FastCGI服务。
接下来配置Nginx的时候会用到这个socket文件。
5配置Nginx
Nginx的配置文件是:/etc/nginx/nginx.conf,使用vi打开:
vi/etc/nginx/nginx.conf
配置项非常简单,如果需要了解详细内容,可看:https://www.nginx.com/resources/wiki/start/topics/examples/full/。
下面介绍基本的配置。
首先,根据情况调整worker_processes和keepalive_timeout(可选):
[...] worker_processes4; [...] keepalive_timeout2; [...]
虚拟主机定义在server{}容器中,修改为如下内容:
[...] server{ listen80; listen[::]:80default_server; server_name_; root/usr/share/nginx/html; #设置默认主页 indexindex.phpindex.htmlindex.htm; location/{ #Firstattempttoserverequestasfile,then #asdirectory,thenfallbacktodisplayinga404. try_files$uri$uri/=404; } #PHP脚本转发至PHP-FPM解析 location~\.php${ try_files$uri=404; fastcgi_passunix:/var/run/php-fpm/php-fpm.sock; fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name; fastcgi_indexindex.php; includefastcgi_params; } } [...]
关于配置的一些说明:
- 首先,我们打开两个listen,让Nginx同时侦听IPv4和IPv6的80端口。
- server_name_;绑定所有的域名(可以指定主机名,如www.example.com)。
- 脚本根目录root不变,依然是 /usr/share/nginx/html。
- 索引首页文件index添加上index.php。
- 其中针对PHP很重要的部分在location~\.php${}中。为防止零日攻击(详见:http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP andhttp://forum.nginx.org/read.php?2,88845,page=3),该部分开头设置了try_files$uri=404;。
保存配置文件后,检查配置文件的语法,再重新加载Nginx:
nginx-t#检查配置文件语法 systemctlreloadnginx#重新加载nginx
在/usr/share/nginx/html目录下创建文件index.php,内容为:
<?php phpinfo();
再次访问http://127.0.0.1,如下:
可以看到,PHP5已经工作,根据ServerAPI行看出,是通过FPM/FastCGI方式工作的,往下拉会看到PHP5加载的其他模块,如MySQL、cURL、sqlite模块的支持。
6PHP-FPM使用TCP连接
默认情况下,PHP-FPM通过/var/run/php-fpm/php-fpm.sock文件侦听 socket。
当然,也可以设置PHP-FPM使用TCP连接。
打开文件 /etc/php-fpm.d/www.conf,设置listen值如下:
[...] ;listen=/var/run/php-fpm/php-fpm.sock listen=127.0.0.1:9000 [...]
这样PHP-FPM会侦听地址127.0.0.1(localhost)和端口9000,确保这个端口没有被其他程序占用。
然后重新加载PHP-FPM:
systemctlreloadphp-fpm
接下来,编辑 /etc/nginx/nginx.conf文件,修改如下一行:
[...] #fastcgi_passunix:/var/run/php-fpm/php-fpm.sock; fastcgi_pass127.0.0.1:9000; [...]
然后,重载nginx就可以了:
sytemctlreloadnginx
这样,整个LNMP环境就搭好了。
参考资料:
- Centos7安装PHP7最新版
- CentOS7安裝Nginx、PHP7、PHP-FPM
- HowToInstallLinux,Nginx,MySQL,PHP(LEMP)stackOnCentOS7
- InstallingNginxWithPHP5(AndPHP-FPM)AndMySQLSupport(LEMP)OnUbuntu14.04LTS
- HowtoInstallMySQLonCentOS7
- HOWTOINSTALLANDCONFIGURENGINXONCENTOS7