nginx服务配置---php服务接入
前言:
最近要搭建一个内部的wiki系统, 网上搜了一圈, 也从知乎上搜集了一些大神的评价和推荐. 重点找了几个开源的wiki系统, 不过发现他们都是采用php来实现的. 于是乎需要配置php环境, 来配合服务正常工作. 网上多是apache+php的组合方式, 不过由于个人是nginx脑残粉, 因此决定采用nginx+php fastcgi来配置下环境.
思路梳理:
云主机是ubuntu系统(主要觉得apt好用, 当然centos的yum也是利器). 对于php, php-fpm, 以及nginx的安装, 决定采用apt来完成. 虽然网上很多大神建议采用编译安装, 这样可以定制, 不过这边为了简洁快速, 主要还是偷懒, ^_^.
整个思路可分为如下步骤:
1). php环境的安装和配置
2). nginx环境的安装和配置
3). 两者的集成
php环境安装和配置:
ubuntu上安装php, 非常的简单, 重要的是不要遗落php重要的插件.
# 安装php
sudo apt-get install php5
# 安装php的mysql插件
sudo apt-get install php5-mysql
# 安装php5-fpm(Fastcgi process manager)
sudo apt-get install php5-fpm
然后让我们简单检测下php是否安装成功.

然后在让我们简单过一下配置文件的组织结构和重要的相关项.

php5-fpm的默认目录在/etc/php5/fpm中, 其修改项主要集中在pool.d/www.conf中, 让我们来看一下, 里面有那些需要注意一下.
• 子进程的执行用户和组
#user=www-data
user=work
#group=www-data
group=work
注: 其默认的用户:组为www-data:www-data, 这边改为work:work. 若没有, 可以通过adduser/addgroup来完成用户和组的添加.
• 监听模式
#listen=/var/run/php5-fpm.sock
listen=127.0.0.1:9000
注: 后续版本的php-fpm. 更推荐unix域(性能更优异), 而不是tcp的模式. 这边还是选用tcp监听端口的方式.
• 子进程数控制
pm = dynamic
pm.max_children = 10
pm.start_server = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
其具体的含义, 借助官方的注释来说话.
static - a fixed number (pm.max_children) of child processes;
dynamic - the number of child processes are set dynamically based on the
following directives. With this process management, there will be
always at least 1 children.
pm.max_children - the maximum number of children that can
be alive at the same time.
pm.start_servers - the number of children created on startup.
pm.min_spare_servers - the minimum number of children in 'idle'
state (waiting to process). If the number
of 'idle' processes is less than this
number then some children will be created.
pm.max_spare_servers - the maximum number of children in 'idle'
state (waiting to process). If the number
of 'idle' processes is greater than this
number then some children will be killed.
然后启动php-fpm后台服务.
service php5-fpm start|stop|restart|status
推荐使用service来启动php5-fpm.
启动的效果如下所示:

nginx环境的安装和配置:
nginx的安装也异常的简单.
sudo apt-get install nginx
其默认的配置文件路径为/etc/nginx/nginx.conf.
nginx和php的集成:
现在到了最后的集成工作了, 可再/etc/nginx/nginx.conf中, 添加如下规则即可.
server {
location ~ .*\.php$ {
root /path/to/phpwebapp;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
注: 由于php-fpm采用的fastcgi协议, 因此这边需要填写fastcgi_pass, 而不是之前proxy_pass那种形式.
最后把php项目, 放入到/path/to/phpwebapp(实际为/home/work/phpwebapps)的目录中. 通过浏览器即可访问成功, nginx和php的集成工作也告一段落.
问题和追查:
实际在配置和部署中, 并没有上述描述的一帆风顺. 遇到最多的是404和403错误.
404错误为File Not Found, 这个一般由两种原因导致, 一种是路径真的配置错了, 另一种是访问权限(linux帐号)的问题(这个比较隐蔽, 难以一时找到). php子进程需要借助$document_root$fastcgi_script_name来获取正确的位置信息.
403错误为权限受限(Forbidden), 还是访问权限(linux帐号)的问题. php子进程的执行用户, 需要拥有访问目录的读权限.
php文件直接下载, 这个问题, 往往是php在nginx的配置中没设置好. 比如匹配规则没命中(未匹配, 被人优先匹配).
总结:
nginx+php的集成, 网上资料很多, 而且介绍篇幅也不大, 让人有些飘飘然, 觉得很容易. 但真正实践起来, 却总有不少问题. 还是得沉下心来做事, 踏踏实实的做笔记, ^_^.
公众号&游戏站点:
个人微信公众号: 木目的H5游戏世界

个人游戏作品集站点, 请点击访问: www.mmxfgame.com
nginx服务配置---php服务接入的更多相关文章
- nginx动态配置及服务发现那些事
Reference: http://xiaorui.cc/2016/10/16/nginx%E5%8A%A8%E6%80%81%E9%85%8D%E7%BD%AE%E5%8F%8A%E6%9C%8D% ...
- SuperSocket入门(三)-Telnet多服务实例和服务实例交互配置详解
在SuperSocket入门(二)中我们已经简单了解了通过配置App.config文件使用BootStrap启动SuperSocket服务.我们先来看一下上个案例中的基本配置文件示例: < ...
- 使用bind配置DNS服务(CentOS 6.5)
DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析: 正向解析:根据主机名(域名)查找对应的IP地址. 反向解析:根据I ...
- nacos服务注册与发现及服务配置实现
Nacos 提供了一组简单易用的特性集,可快速实现动态服务发现.服务配置.服务元数据及流量管理. 更敏捷和容易地构建.交付和管理微服务平台. 关键特性: 服务发现和服务健康监测 动态配置服务 动态 D ...
- consul-服务发现、服务隔离、服务配置
一.服务发现 服务发现组件记录了(大规模)分布式系统中所有服务的信息,其它服务可以据此找到这些服务.DNS 就是一个简单的例子.当然,复杂系统的服务发现组件要提供更多的功能,例如,服务元数据存储.健康 ...
- 腾讯高性能RPC开发框架Tars实现服务治理(微服务)
Github:https://github.com/Tencent/Tars 1. 介绍 Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快 ...
- 6.Tray Monitor服务(监控服务)
1. Tray Monitor服务(监控服务) 该服务需要运行在gui环境下,用于查看baclua client.存储等状态.下面以windows下安装为例. 1.1. Tray Monito ...
- 将nginx配置为服务,php-fpm配置说明
编写shell脚本 vi /etc/init.d/nginx #!/bin/bash # # Startup script for the PHP-FPM server. # # chkconfig: ...
- 二.Nginx反向代理和静态资源服务配置
2018年03月31日 10:30:12 麦洛_ 阅读数:1362更多 所属专栏: nginx 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/M ...
随机推荐
- HDU 3265 扫描线(矩形面积并变形)
Posters Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 【NOIP2015】提高组D1 解题报告
P1978神奇的幻方 Accepted 描述 幻方是一种很神奇的 N ∗ N 矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时 ...
- [mr440] 崎岖的山区
极类似动归的广搜?反正各种算法傻傻分不清…写之前叹了一句,好久不写广搜了啊!呵呵真的写了好久,大约一个钟头? f[i,j,0]表示到点(i,j)且最后一步为下降的最少步数,f[i,j,1]就是上升.莫 ...
- High Performance Django
构建高性能Django站点 性能 可用 伸缩 扩展 安全 build 1.审慎引入第三方库(是否活跃.是否带入query.是否容易缓存) 2.db:减少query次数 减少耗时query 减小返回 ...
- 苹果 iOS 8 新固件新功能特性总结汇总 (苹果 iPhone/iPad 最新移动操作系统)
苹果在 WWDC 2014 大会上正式发布了其最新的 OS X Yosemite 桌面系统以及 iOS 8 移动操作系统,虽然 iOS 8 依然延续了 iOS7 的扁平化设计风格,但在功能上却还是给我 ...
- Julia中文教程资源.txt
Julia中文教程资源.txt 2016年3月28日 05:18:32 codegay 本文更新在这里: https://github.com/FGFW/julia-science-and-techn ...
- 基于反射的通过set方法的依赖注入,可以看成一种设计模式,自己来用
非常好用,在properties文件中配置字符串和类名之间的对应,在程序里读取文件,找到类名,通过反射,达到调用set方法的目的,然后直接将自己的指向其他类的对象的引用赋值,指向实体对象. 比如use ...
- poj2104 线段树 划分树
学习:http://www.cnblogs.com/pony1993/archive/2012/07/17/2594544.html 划分树的build: 划分树是分层构建的,在构建的t层时,我们可以 ...
- [UIImage resizableImageWithCapInsets:]使用注意
转自:http://www.cnblogs.com/scorpiozj/p/3302270.html 最近在sae上搭建了个wp,因为深感自己前端的东西缺乏,所以想依次为契机,学习一下.本文是从个人的 ...
- META标签的NAME变量
META标签的NAME变量语法格式是: <META NAME=xxx CONTENT=xxxxxxxxxxxxxxxxxx> 其中xxx主要有下面几种参数: 1. Keywords(关键字 ...