lnmp安装--php与nginx结合
- 软件环境:
linux:centos5.
nginx:1.7..tar.gz
php:5.6..tar.gz
- lnmp与lamp的区别?
lnmp(linux+nginx+mysql+php)的提法相对于lamp(linux+apche+mysql+php)来提的。
为什么用nginx而抛弃apache了呢?
nginx网络io的方式为epoll,apache的网络io的方式为select。两者详细区别请移步:http://www.cnblogs.com/simpman/p/4150005.html
个人理解epoll的方式:建立一个文件描述符队列,在文件描述队列准备好以后,通知web容器。相当于维护一个队列,队列中的成员就绪就通知线程。
select方式:需要web容器开一个线程去扫描哪个文件描述符准备就绪。相当于维护一个数组。
在apache2.4.1上已经引入了epoll代替select。老版的apache因为采用select方式,在处理高并发静态文件请求的时候就会能力不足。
- php的处理方式
nginx是通过使用php-fastcgi来实现的。apache一般是通过mod_php模块来实现的。本人以前在使用apache的时候也是用这种方式。
下面说一下nginx与php-fastcgi的工作原理:
1. 定义:CGI(Common Gateway Interface)是HTTP服务器与机器上的其他程序进行“交谈”的一种工具,该程序须运行在网络服务器上。
2. 功能:绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。
3. 运行环境:CGI程序在UNIX操作系统上CERN或NCSA格式的服务器上运行。 在其它操作系统(如:windows NT及windows95等)的服务器上也广泛地使用CGI程序,同时它也适用于各种类型机器。
4. CGI处理步骤: ⑴通过Internet把用户请求送到服务器。
⑵服务器接收用户请求并交给CGI程序处理。
⑶CGI程序把处理结果传送给服务器。
⑷服务器把结果送回到用户。 详细请移步:http://www.cnblogs.com/simpman/p/4151639.html
其实上面就相当于说:cgi用来解析动态脚本,fast-cgi是用来管理cgi的程序。
在具体实现上php-cgi用来解析php脚本,php-fpm(全程php:FastCGI Process Manager)用来管理php-cgi。
概念的详细解释请看:http://www.nowamagic.net/librarys/veda/detail/1319
在php5.3.3+已经将php-fpm整合到内核中了。5.3.3以前,php-fpm需要作为php的补丁安装。
php-fpm在老版php中使用xml配置,在新版使用和php.ini类似的配置格式。
安装:只需要在configure的时候添加 --enable-fpm。
- 安装准备:
需要gcc(GUN Compiler Collection)编译器,可以编译c,c++,object-c,fortran,java。
gcc为GNU Compiler Collection的缩写,可以编译C和C++源代码等,它是GNU开发的C和C++以及其他很多种语言 的编译器(最早的时候只能编译C,后来很快进化成一个编译多种语言的集合,如Fortran、Pascal、Objective-C、Java、Ada、 Go等。)
gcc 在编译C++源代码的阶段,只能编译 C++ 源文件,而不能自动和 C++ 程序使用的库链接(编译过程分为编译、链接两个阶段,注意不要和可执行文件这个概念搞混,相对可执行文件来说有三个重要的概念:编译(compile)、链接(link)、加载(load)。
源程序文件被编译成目标文件,多个目标文件连同库被链接成一个最终的可执行文件,可执行文件被加载到内存中运行)。
因此,通常使用 g++ 命令来完成 C++ 程序的编译和连接,该程序会自动调用 gcc 实现编译。g++也能编译C源代码,只不过把会把它当成C++源代码,后缀为.c的,gcc把它当作是C程序,而g++当作是c++程序;后缀为.cpp的,两者都会认为是c++程序,注意,虽然c++是c的超集,但是两者对语法的要求是有区别的。
此外还需要安装Autoconf和Automake工具,他们用于自动创建功能完善的Makefile,大多数软件包都是用这个工具生成Makefile。nginx也是。
yum install gcc gcc-c++ autoconf automake
模块依赖性:nginx需要其他第三方库的支持,gzip需要zlib库,rewrite需要pcre(Perl Compatible Regular Expression)库,ssl功能需要openssl。
yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel
- 安装nginx:
Nginx的安装非常简单。在默认情况下,经过编译安装的Nginx包含了大部分可用模块。可以通过“./configure --help”选项设置各个模块的使用情况,例如对不需要的http_ssi模块,可通过“--without-http_ssi_module”方式关闭此模块;同理,如果需要“http_perl”模块,那么可以通过“--with-http_perl_module”方式安装此模块。“http_perl”模块可以用来启用 Nginx 的 NginxStatus 功能,以监控 Nginx 的当前状态。一下是安装过程:
wget http://nginx.org/download/nginx-1.7.8.tar.gz
tar zxvf nginx-1.7..tar.gz
cd nginx-1.7.
yum install gcc gcc-c++ autoconf automake
yum install -y zlib zlib-devel pcre pcre-devel openssl openssl-devel
./configure --with-http_stub_status_module --prefix=/usr/local/nginx -–with-http_ssl_module
make
make install
安装完成。
查看管理nginx的帮助。
/usr/local/nginx/sbin/nginx -h
后期可以写shell脚本将nginx加入到service中。
- 安装php:
前面已经讲过,在php5.3.3以后php-fpm已经加入到php内核中。老版本中php-fpm是以patch的方式安装。我们安装php-5.6.3最新版。
wget http://cn2.php.net/get/php-5.6.3.tar.gz/from/this/mirror
tar zxvf php-5.6..tar.gz
cd php-5.6.
./configure --enable-fpm --with-mysql
make
make install
/usr/local/sbin/php-fpm -h cp php.ini-development /usr/local/php/php.ini
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
cp sapi/fpm/php-fpm /usr/local/bin
至此,已经安装上了php,php-fpm。
- 配置:
如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块, 以避免遭受恶意脚本注入的攻击。
将 php.ini 文件中的配置项 cgi.fix_pathinfo 设置为 vim /usr/local/php/php.ini
cgi.fix_pathinfo=
启动php-fpm:
/usr/local/bin/php-fpm
查看php-fpm支持的启动选项
/usr/local/bin/php-fpm -h
让nginx支持php:
修改nginx.conf, vim /usr/local/nginx/conf/nginx.conf
location / {
root html;
index index.php index.html index.htm;
}
location ~* \.php$ {
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
如果修改的不对,会报404错误。
重启nginx:
sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx
可能遇到的问题
- 安装php configure的时候没有生成makefile。
可能缺少支持的库,ncurse,libxml2或者其他的什么,使用yum安装一下。
- 测试nginx支持php的时候,会报告404错误。
nginx传递给php-fpm的参数不对。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
将这两个参数配置好,注意下root html;就ok了。
有参考:
http://q.cnblogs.com/q/62016/
http://ixdba.blog.51cto.com/2895551/806622
http://ixdba.blog.51cto.com/all/2895551/page/2
http://www.phpfensi.com/php/20131204/731.html
http://www.cnblogs.com/iosdev/p/3439834.html
http://php.net/manual/zh/install.unix.nginx.php
lnmp环境的操作部分:
安装php+nginx:http://www.cnblogs.com/simpman/p/4151662.html
安装mysql:http://www.cnblogs.com/simpman/p/4192942.html
安装php:http://www.cnblogs.com/simpman/p/4196051.html
lnmp环境的理论部分:
FastCgi与PHP-fpm关系[转] 读完本文瞬间明朗了很多 : http://www.cnblogs.com/simpman/p/4151639.html 2、http://segmentfault.com/q/1010000000256516
epoll和select区别:http://www.cnblogs.com/simpman/p/4150005.html
lnmp安装--php与nginx结合的更多相关文章
- LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx
前几天介绍了最新StartSSL免费SSL申请与配置,很多人看到部落介绍SSL证书安装时总是推荐了OneinStack,因为OneinStack提供了一键添加和配置Let's Encrypt 免费SS ...
- centos LNMP第一部分环境搭建 LAMP LNMP安装先后顺序 php安装 安装nginx 编写nginx启动脚本 懒汉模式 mv /usr/php/{p.conf.default,p.conf} php运行方式SAPI介绍 第二十三节课
centos LNMP第一部分环境搭建 LAMP安装先后顺序 LNMP安装先后顺序 php安装 安装nginx 编写nginx启动脚本 懒汉模式 mv /usr/local/php/{ ...
- 服务器运行环境(LNMP)安装说明
服务器运行环境(LNMP)安装说明 因为公司需要一套流程标准,所以写了如下步骤. 先下载文件environment.tar,将文件上传到服务器. 使用命令解压文件,tar xvf environmen ...
- LNMP安装了哪些软件?安装目录在哪?
LNMP官网:http://lnmp.org/faq/lnmp-software-list.html LNMP一键安装包除去安装所必须的依赖包,还会默认安装以下软件: Nginx.MySQL/Mari ...
- lnmp全面优化集合nginx+mysql+php
lnmp的全名是linux+nginx+mysql+php,既然是全面优化那我们就从linux系统的选择入手.debian系统可以算是 linux各分支中做的比较突出的一类,连谷歌都抛弃linux订制 ...
- Ubuntu lnmp安装记录
参考了: Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL 在访问 info.php的时候,我显示的是502错误.后面我参考了: Ubuntu15 ...
- CentOS LNMP安装phpMyAdmin
假设: 已经配置好LNMP环境,并且Nginx的网页目录在/usr/local/nginx/html 1.下载phpMyAdmin wget https://files.phpmyadmin.net/ ...
- 原已经安装好的nginx,现在需要添加一个未被编译安装的模块--echo-nginx-module-0.56
为了测试一个NGINX变量,将NGINX加了一个编译模板echo-nginx-module-0.56. 参照如下文件 1,先看以前NGINX有哪些东东. sbin/nginx -Vnginx vers ...
- CentOS 7 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)
原文 CentOS 7 下安装 LEMP 服务(nginx.MariaDB/MySQL 和 php) LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作 ...
随机推荐
- python学习(3)
Python学习(3)切片(Slice):根据索引范围取出字符串里面的内容,比如: l=range(100) l[:8] [0, 1, 2, 3, 4, 5, 6, 7] ...
- ThinkPHP3.1新特性:Action参数绑定
Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法了.这一新特性对以往的操作方法使用没有任何影响,你也可以用 ...
- android点滴之标准SD卡状态变化事件广播接收者的注冊
眼下最完整的,须要注冊的动作匹配例如以下: IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED); int ...
- Java反编译器安装及各版本介绍
JAVA语言是1995年5月由SUN公司发布的,由于其安全性高.代码优化.跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位. 不过,JAVA最突出 ...
- block_dump观察Linux IO写入的具体文件(mysqld)
一.使用方法: 二.基本原理: 三.总结 很多情况下开发者调测程序需要在Linux下获取具体的IO的状况,目前常用的IO观察工具用vmstat和iostat,具体功能上说当然是iostat更胜一筹 ...
- SQL Server 2005下载安装
好久没弄过数据库了,打算重温一下,由于是新买的笔记本,所以今天下载安装了一下哈. 官网 http://www.microsoft.com/zh-cn/download/default.aspx 在官网 ...
- RPM vs SRPM
RPM 全名是『 RedHat Package Manager 』简称则为 RPM 啦!顾名思义,当初这个软件管理的机制是由 Red Hat 这家公司发展出来的. RPM 是以一种数据库记录的方式来将 ...
- 第七篇:web之前端之ajax
前端之ajax 前端之ajax 本节内容 ajax介绍 原生js实现ajax jquery实现ajax json 跨域请求 1. ajax介绍 AJAX(Asynchronous Javascri ...
- 11.14 noip模拟试题
题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...
- Unity3D 之UGUI 面板
UGUI中使用面板,可以对一组控件分为一个组. 一个面板里面可以添加一些控件,就如同Html中的<div>一样.