前言:
  最近要搭建一个内部的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服务接入的更多相关文章

  1. 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% ...

  2. SuperSocket入门(三)-Telnet多服务实例和服务实例交互配置详解

        在SuperSocket入门(二)中我们已经简单了解了通过配置App.config文件使用BootStrap启动SuperSocket服务.我们先来看一下上个案例中的基本配置文件示例: < ...

  3. 使用bind配置DNS服务(CentOS 6.5)

    DNS域名解析服务(Domain Name System)是用于解析域名与IP地址对应关系的服务,功能上可以实现正向解析与反向解析: 正向解析:根据主机名(域名)查找对应的IP地址. 反向解析:根据I ...

  4. nacos服务注册与发现及服务配置实现

    Nacos 提供了一组简单易用的特性集,可快速实现动态服务发现.服务配置.服务元数据及流量管理. 更敏捷和容易地构建.交付和管理微服务平台. 关键特性: 服务发现和服务健康监测 动态配置服务 动态 D ...

  5. consul-服务发现、服务隔离、服务配置

    一.服务发现 服务发现组件记录了(大规模)分布式系统中所有服务的信息,其它服务可以据此找到这些服务.DNS 就是一个简单的例子.当然,复杂系统的服务发现组件要提供更多的功能,例如,服务元数据存储.健康 ...

  6. 腾讯高性能RPC开发框架Tars实现服务治理(微服务)

    Github:https://github.com/Tencent/Tars 1. 介绍 Tars是基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快 ...

  7. 6.Tray Monitor服务(监控服务)

    1.   Tray Monitor服务(监控服务) 该服务需要运行在gui环境下,用于查看baclua client.存储等状态.下面以windows下安装为例. 1.1.   Tray Monito ...

  8. 将nginx配置为服务,php-fpm配置说明

    编写shell脚本 vi /etc/init.d/nginx #!/bin/bash # # Startup script for the PHP-FPM server. # # chkconfig: ...

  9. 二.Nginx反向代理和静态资源服务配置

    2018年03月31日 10:30:12 麦洛_ 阅读数:1362更多 所属专栏: nginx   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/M ...

随机推荐

  1. Facebook技术架构

    Facebook MySQL,Multifeed (a custom distributed system which takes the tens of thousands of updates f ...

  2. Android 解压html压缩数据

    public static String unzipHTML(String s){ int endPos = s.indexOf("\r\n\r\n"); if(endPos< ...

  3. 滑雪(dp好题)

    题目描述:贝西去科罗拉多州去滑雪,不过还她不太会玩,只是个能力为 1 的渣渣.贝西从 0 时刻进入滑雪场,一到 T 时刻就必须离开.滑雪场里有 N 条斜坡,第 i 条斜坡滑行一次需要 Di 分钟,要求 ...

  4. 6.1.2Linux下Socket编程

    tcp简单实验 server.c #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include ...

  5. C# 轉義字符

    转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将 ...

  6. 在网页中编辑报表的报表设计器Stimulsoft Reports Designer.Web报表控件

    Stimulsoft Reports Designer.Web报表控件是一款网页报表设计器.您想在网页中编辑您的报表吗?现在是可能的! Stimulsoft Reports Designer.Web ...

  7. servlet filter可以用注解

    现在好像可以在新建一个servlet.filter等的的时候在选项中设置urlmapping,通过注解的方式来监控action,以及设置初始参数initparameter.

  8. [TOP10]十大渗透测试演练系统

    本文总结了目前网络上比较流行的渗透测试演练系统,这些系统里面都提供了一些实际的安全漏洞,排名不分先后,各位安全测试人员可以亲身实践如何利用这个漏洞,同时也可以学习到漏洞的相关知识. DVWA (Dam ...

  9. Linux信号(signal) 机制分析

    Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...

  10. 支撑向量机(SVM)

    转载自http://blog.csdn.net/passball/article/details/7661887,写的很好,虽然那人也是转了别人的做了整理(最原始文章来自http://www.blog ...