编译PHP并与nginx整合

安装mysql

yum install mysql-devel
yum install mysql-server

nginx+php的编译

apache一般是把php当做自己的一个模块来启动的.

而nginx则是把http请求变量(如get,user_agent等)转发给 php进程,即php独立进程,与nginx进行通信. 称为 fastcgi运行方式.

因此,为apache所编译的php,是不能用于nginx的.

如果已经在apache下安装了php,需要

make clean

原因上面已经解释过了

需要用到什么可以

cd php-5.4.19
//编译软件一遍通过这个方式查看,即将输出的mysqlnd php原生的mysql
./configure -help | grep mysql
	-- with-mysql=DIR 是否需要mysql的支持
	--enable-mysqlnd 是否开启mysqlnd
./configure -help | grep gd
//如果没有安装
yum install gd

注意: 我们编译的PHP 要有如下功能:

连接mysql, gd(画图), ttf(文字功能), 以fpm(fascgi)方式运行

命令行输入

./configure  --prefix=/usr/local/fastphp \
--with-mysql=mysqlnd \
--enable-mysqlnd \
--with-gd \
--enable-gd-native-ttf \
--enable-gd-jis-conv
//一定要这一行,说明是fpm形式运行
//为什么一定要用fpm形式,因为php和nginx是两个独立的进程
--enable-fpm
//如果安装过程中穿什么问题就把/usr/local/fastphp \文件删除重新开始

如果以上步骤,有报错configure:error:phg.h not found,运行yum install hd-devel

nginx+php的配置比较简单,核心就一句话----把请求的信息转发给9000端口的PHP进程, 让PHP进程处理 指定目录下的PHP文件.

如下例子:

location ~ \.php$ {
            root html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            //这里的document_root是上面定义的root html
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
}

1:碰到php文件,

2: 把根目录定位到 html,

3: 把请求上下文转交给9000端口PHP进程,

4: 并告诉PHP进程,当前的脚本是 documentrootdocument_rootdocumentr​ootfastcgi_scriptname

(注:PHP会去找这个脚本并处理,所以脚本的位置要指对)

最后执行

make && make install

编译完毕后:

将php的配置文件复制到fastphp目录

cd /usr/local/fastphp
cp /user/local/src/php-5.4.19/hph.ini-development ./lib/php.ini
//下面有两个配置文件php.ini-development 开发环境 php.ini-production产品环境
ls sbin/
//如果上面编译成功的话,发现目录下有php-fpm
ls etc/
//如果上面编译成功的话,目录下有pear.conf php-fpm.conf.default
cp etc/php-fpm.conf.default etc/php-fpm.conf
./sbin/php-fpm
ps aux |gerp php
//发现有php-fpm

配置location

location ~ \.php$ {
            root html;
            //fastcgi就是nginx和php互通信息用的
            //如果访问的是xxx.php就重定向到9000端口,即php进程
            fastcgi_pass   127.0.0.1:9000;
            //默认主页
            fastcgi_index  index.php;
            //这里的document_root是上面定义的root html
            //告诉php进程想运行哪个php页面
            //运行html目录下对应的php文件
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            //这个参数这行必须有,因为这些参数是nginx和php之间互通信息用的
            include        fastcgi_params;
}

测试:

vim html/test.php
//输入
<?php
	phpinfo();

页面访问 192.168.xx.xx/test.php

成功的话会输出php的详细信息。

启动mysql

service mysql start

安装ecshop(这是一个多年前php的项目貌似,作为java开发的我暂时不去关心)

上传ecshop文件并解压

//将解压的ecshop放到nginx的html下面,并重命名
mv ecshop-ori /usr/local/nginx/html/ecshop
vim conf/nginx.conf

location /{
	//index中添加一个index.php,尝试去加载index.php
	index  index.php
}

访问:192.168.xxx.xxx/ecshop 就会自动跳转到192.168.xxx.xxx/ecshop/install/index.php

开始安装

进入如上的页面后,点击下一步,发现有报错

//给权限
cd /usr/local/nginx/html/ecshop
chmod o+w  cert -R
chmod o+w  images -R
chmod o+w  data -R
chmod o+w  temp -R
chmod o+w  themes -R



填写管理员、邮箱等相关信息,最后点击立即安装

如上图所示,点击搜能够查看数据库是否有效,如果是localhost会报错,是真实ip的话就不会报错。

原因

在linux下mysql用localhost连接的时候,不是通过tcp协议连接的,而是用socket连接的。

vim /usr/local/fastphp/php/lib/php.ini
//搜索socket,修改如下
mysql.defaut_socket = /var/lib/mysql/mysql.socket
//杀掉进程
pkill -9 php-fpm
//重启
/usr/local/fastphp/sbin/php-fpm

最后点击”立即安装“的时候还是会报错,

vim /usr/local/fastphp/php/lib/php.ini
//搜索timezone,修改为如下
date.timezone = PRC
//杀掉进程
pkill -9 php-fpm
//重启
/usr/local/fastphp/sbin/php-fpm

然后在点击立即安装,完成之后返回首页,

还是会报一些错,因为ecshop是几年前的了。

cd html
rm -rf ecshop
cd /usr/local/src/
rm -rf ecshop-ori
unzip ecshop-ori.zip
mv exshop-ori /usr/local/nginx/html/ecshop
cd /usr/local/nginx/html/ecshop
vim includs/ini.php
//修改
	error.reporting(0)
	@ini_set('display_errors',0);
	//从下面的if这里删除到下个注释”判断是否只会Gzip 格模式“中间的内容
	if((DEBUG_MODE & 1 )==1)
	...
	/*判断是否只会Gzip 格模式*/

然后重新安装一次

点击安装后还是会报错

cd /usr/local/nginx/html/ecshop
vim install/includs/index.php
//修改如下内容
	@ini_set('display_errors',0);
	error.reporting(0)

商城url重写实战

普通的get请求,http://xxxxx:xxxx/a?id=1,希望在地址栏写成http://xxxxx:xxxx/a-1.html,nginx自动重定向

Rewrite语法

Rewrite 正则表达式 定向后的位置 模式

Goods-3.html ---->Goods.php?goods_id=3

goods-([\d]+).html —> goods.php?goods_id =$1

location /ecshop {

index index.php;

rewrite goods-([\d]+).html$ /ecshop/goods.php?id=KaTeX parse error: Expected 'EOF', got '\d' at position 22: …rite article-([\̲d̲]+)\.html /ecshop/article.php?id=$1;

rewrite category-(\d+)-b(\d+).html /ecshop/category.php?id=$1&brand=$2;

rewrite category-(\d+)-b(\d+)-min(\d+)-max(\d+)-attr([\d.]+).html /ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5;

rewrite category-(\d+)-b(\d+)-min(\d+)-max(\d+)-attr([\d+.])-(\d+)-([-]+)-([-]+).html /ecshop/category.php?id=$1&brand=$2&price_min=$3&price_max=$4&filter_attr=$5&page=$6&sort=$7&order=$8;

}

注意:用url重写时, 正则里如果有”{}”,正则要用双引号包起来

允许正则表达式前面的通过"()"包起来,正则引擎就会记住,在后面可以进行引用,这叫做 反向引用

vim cong/nginx/conf

location /ecshop{
//goods-数字.html   这里的数字有1-7位, 就重定向到goods.php?id=$1
	rewrite "goods-(\d{1,7})\.html" /ecshop/goods.php?id=$1
}
//更复杂的url的重定向,可以依据类似的方法
//即$1  $2  $3 ....

Nginx网络架构实战学习笔记(二):编译PHP并与nginx整合、安装ecshop、商城url重写实战的更多相关文章

  1. LinQ实战学习笔记(二) C#增强特性

    C# 为支持LINQ添加了许多语言特性: 隐式类型局部变量 对象初始化器 Lambda表达式 扩展方法 匿名类型 了解这些新特性是全面了解LINQ的重要先解条件,因此请不要忽视它们. (一)  隐式类 ...

  2. (转)redis 学习笔记(1)-编译、启动、停止

    redis 学习笔记(1)-编译.启动.停止   一.下载.编译 redis是以源码方式发行的,先下载源码,然后在linux下编译 1.1 http://www.redis.io/download 先 ...

  3. [Firefly引擎][学习笔记二][已完结]卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  4. java之jvm学习笔记二(类装载器的体系结构)

    java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...

  5. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  6. Learning ROS for Robotics Programming Second Edition学习笔记(二) indigo tools

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  7. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  8. python3.4学习笔记(二) 类型判断,异常处理,终止程序

    python3.4学习笔记(二) 类型判断,异常处理,终止程序,实例代码: #idle中按F5可以运行代码 #引入外部模块 import xxx #random模块,randint(开始数,结束数) ...

  9. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

随机推荐

  1. GET and POST

    有待补充:

  2. Ubuntu安装程序提示无法获得锁

    目录 1.问题描述 2.问题原因 3.解决方案 3.1方法一:杀掉apt-get进程 3.2方法二:强制解锁 1.问题描述 E: 无法获得锁 /var/lib/dpkg/lock-frontend - ...

  3. mac OS 安装 Homebrew及常用命令

    Homebrew  是由国外大神 Max Howell 开发的一款包管理工具,类似Debian的apt,他可以安装任何你想安装的东西. 安装方法 命令行输入 /usr/bin/ruby -e &quo ...

  4. 【知识强化】第四章 网络层 4.8 移动IP

    这节课我们来学习一下移动IP. 那移动IP呢要跟动态IP区分开.动态IP是指,通过使用DHCP协议,在一个局域网内部的一台主机,就可以动态地获得一个IP地址.那这里面的移动IP是什么意思呢? 我们来举 ...

  5. RabbitMQ学习第三记:发布/订阅模式(Publish/Subscribe)

    工作队列模式是直接在生产者与消费者里声明好一个队列,这种情况下消息只会对应同类型的消费者. 举个用户注册的列子:用户在注册完后一般都会发送消息通知用户注册成功(失败).如果在一个系统中,用户注册信息有 ...

  6. 力扣——remove element(删除元素) python实现

    题目描述: 中文: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) ...

  7. git注意事项

    1,在github中新建空的工程,第一次提交代码的时候 使用命令  $ git push -u origin master -f 后面就直接push就行了

  8. hadoop 2.7 添加或删除datanode节点

    1.测试环境 ip 主机名 角色 10.124.147.22 hadoop1 namenode 10.124.147.23 hadoop2 namenode 10.124.147.32 hadoop3 ...

  9. iter()(一)

    >>> f=open('script2.py') >>> f <_io.TextIOWrapper name='script2.py' mode='r' en ...

  10. 学习java设计模式有用吗?懂这六个原则,编程更轻松

    学习java设计模式有用吗?懂这六个原则,编程更轻松 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修改关闭.在程序需要进行拓展的时候,不能去修改原有的代码,实 ...