• 软件环境:
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结合的更多相关文章

  1. LNMP安装Let’s Encrypt 免费SSL证书方法:自动安装与手动配置Nginx

    前几天介绍了最新StartSSL免费SSL申请与配置,很多人看到部落介绍SSL证书安装时总是推荐了OneinStack,因为OneinStack提供了一键添加和配置Let's Encrypt 免费SS ...

  2. 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/{ ...

  3. 服务器运行环境(LNMP)安装说明

    服务器运行环境(LNMP)安装说明 因为公司需要一套流程标准,所以写了如下步骤. 先下载文件environment.tar,将文件上传到服务器. 使用命令解压文件,tar xvf environmen ...

  4. LNMP安装了哪些软件?安装目录在哪?

    LNMP官网:http://lnmp.org/faq/lnmp-software-list.html LNMP一键安装包除去安装所必须的依赖包,还会默认安装以下软件: Nginx.MySQL/Mari ...

  5. lnmp全面优化集合nginx+mysql+php

    lnmp的全名是linux+nginx+mysql+php,既然是全面优化那我们就从linux系统的选择入手.debian系统可以算是 linux各分支中做的比较突出的一类,连谷歌都抛弃linux订制 ...

  6. Ubuntu lnmp安装记录

    参考了: Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL 在访问 info.php的时候,我显示的是502错误.后面我参考了: Ubuntu15 ...

  7. CentOS LNMP安装phpMyAdmin

    假设: 已经配置好LNMP环境,并且Nginx的网页目录在/usr/local/nginx/html 1.下载phpMyAdmin wget https://files.phpmyadmin.net/ ...

  8. 原已经安装好的nginx,现在需要添加一个未被编译安装的模块--echo-nginx-module-0.56

    为了测试一个NGINX变量,将NGINX加了一个编译模板echo-nginx-module-0.56. 参照如下文件 1,先看以前NGINX有哪些东东. sbin/nginx -Vnginx vers ...

  9. CentOS 7 下安装 LEMP 服务(nginx、MariaDB/MySQL 和 php)

    原文 CentOS 7 下安装 LEMP 服务(nginx.MariaDB/MySQL 和 php) LEMP 组合包是一款日益流行的网站服务组合软件包,在许多生产环境中的核心网站服务上起着强有力的作 ...

随机推荐

  1. python学习(3)

    Python学习(3)切片(Slice):根据索引范围取出字符串里面的内容,比如: l=range(100)   l[:8] [0, 1, 2, 3, 4, 5, 6, 7]              ...

  2. ThinkPHP3.1新特性:Action参数绑定

    Action参数绑定功能提供了URL变量和操作方法的参数绑定支持,这一功能可以使得你的操作方法定义和参数获取更加清晰,也便于跨模块调用操作方法了.这一新特性对以往的操作方法使用没有任何影响,你也可以用 ...

  3. android点滴之标准SD卡状态变化事件广播接收者的注冊

    眼下最完整的,须要注冊的动作匹配例如以下: IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED); int ...

  4. Java反编译器安装及各版本介绍

    JAVA语言是1995年5月由SUN公司发布的,由于其安全性高.代码优化.跨平台等特性,迅速取代了很多传统高级语言,占据了企业级网络应用开发等诸多领域的霸主地位.         不过,JAVA最突出 ...

  5. block_dump观察Linux IO写入的具体文件(mysqld)

      一.使用方法: 二.基本原理: 三.总结 很多情况下开发者调测程序需要在Linux下获取具体的IO的状况,目前常用的IO观察工具用vmstat和iostat,具体功能上说当然是iostat更胜一筹 ...

  6. SQL Server 2005下载安装

    好久没弄过数据库了,打算重温一下,由于是新买的笔记本,所以今天下载安装了一下哈. 官网 http://www.microsoft.com/zh-cn/download/default.aspx 在官网 ...

  7. RPM vs SRPM

    RPM 全名是『 RedHat Package Manager 』简称则为 RPM 啦!顾名思义,当初这个软件管理的机制是由 Red Hat 这家公司发展出来的. RPM 是以一种数据库记录的方式来将 ...

  8. 第七篇:web之前端之ajax

    前端之ajax   前端之ajax 本节内容 ajax介绍 原生js实现ajax jquery实现ajax json 跨域请求 1. ajax介绍 AJAX(Asynchronous Javascri ...

  9. 11.14 noip模拟试题

      题目名称 正确答案 序列问题 长途旅行 英文名称 answer sequence travel 输入文件名 answer.in sequence.in travel.in 输出文件名 answer ...

  10. Unity3D 之UGUI 面板

    UGUI中使用面板,可以对一组控件分为一个组. 一个面板里面可以添加一些控件,就如同Html中的<div>一样.