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游戏世界
  
  个人游戏作品集站点, 请点击访问http://120.26.221.54/.

时间: 2024-10-16 21:23:18

nginx服务配置---php服务接入的相关文章

在NGINX上配置HTTPS服务

使用 NGINX 配置 HTTPS服务的步骤如下: 首先应该为你的域名申请一个ssl证书,如果是阿里云的服务器可以直接在阿里云的控制台中申请一个ssl安全证书. 在阿里云平台申请证书完成后,点击下载证书将证书下载到本地.然后用ftp工具传输到你自己的服务器上 listen 443 ssl 监听443号端口 server_name 你服务器的ip或者ip绑定的域名 ssl_certificate 服务器上xxx.pem文件的路径(最好填绝对路径) ssl_certificate_key 服务器上x

linux平台下apache的源码安装和将apache服务配置成系统服务

安装apache服务 下载apache源码包 # tar -zxvf http-2.2.29.tar.gz # cd http-2.2.29 #   ./configure --prefix=/usr/local/apache  --enable-so --enable-cgi #   make #   make install 配置成系统服务: #  cp /usr/local/apache/bin/apachectl /etc/init.d/httpd #  cp /usr/local/ap

linux云自动化运维基础知识23(DDNS服务配置)

DDNS(Dynamic Domain Name Server)是动态域名服务的缩写. DDNS是将用户的动态IP地址映射到一个固定的域名解析服务上,用户每次连接网络的时候客户端程序就会通过信息传递把该主机的动态IP地址传送给位于服务商主机上的服务器程序,服务器程序负责提供DNS服务并实现动态域名解析. DDNS捕获用户每次变化的IP地址,然后将其与域名相对应,这样其他上网用户就可以通过域名来进行交流.而最终客户所要记忆的全部,就是记住动态域名商给予的域名即可,而不用去管他们是如何实现的. 动态

【译】gRPC的服务配置

原文地址:https://github.com/grpc/grpc/blob/master/doc/service_config.md gRPC的服务配置 目标 服务配置是一种允许服务拥有者去发布参数以自动的被所有对应的客户端使用的机制. 格式 服务配置是一个如下格式的JSON字符串: { // 负载均衡策略名 (不区分大小写). // 目前,客户端侧gRPC提供的唯一可用的是'轮询调度',但是第三方可能会添加他们自己的策略. // 这个字段是可选的:如果没设置,默认的行为是获取第一个可用的后台

应用量化时代 | 微服务架构的服务治理之路

技术随业务而生,业务载技术而行. 近些年来,伴随数字经济的发展,在众多企业的数字化转型之路上,云原生.DevOps.微服务.服务治理等成为行业内不断被探讨的新话题.人们在理解和接受这些新型概念的同时,也不断地思考其可能的落地形态.需求是创造发生的原动力,于是一批代表性的开源技术或者框架涌现而出:Kubernetes,Spring Cloud,Service Mesh,Serverless-- 它们炙手可热,大放异彩.然而在具体落地过程中却步履维艰,磕磕绊绊. 本文试图结合企业业务的核心诉求,以应

源码编译Nginx服务配置

一.实验环境: RHEL7.0 172.25.254.1 server1.example.com  firewalld disable 二.实验内容:     1.源码安装Nginx nginx-1.9.14.tar.gz        下载源码包 tar zxf nginx-1.9.14.tar.gz         cd nginx-1.9.14/         vim auto/cc/gcc # debug        #CFLAGS="$CFLAGS -g"    #关闭d

nginx的文件cache服务配置记录(proxy_cache)

根据业务部门需求,申请一台文件的cache服务器.如下记录在单台机器上部署Nginx缓存服务过程: nginx缓存配置(缓存配置的参数这里就不做过多解释了,在前面的文档中已说明过,这里只做简单记录) [[email protected] ~]# cat /data/nginx/conf/nginx.conf|grep -v "^$"|grep -v "#" user www; worker_processes 8; events { worker_connectio

Centos7+Nginx通过windows CA颁发及配置SSL服务

近期在学习Linux的相关知识,作为一个运维工程师所必备的知识点,一个web服务尤其运行在互联网上的很容易攻击,所以为了保证安全最起码的需要对web服务配置SSL,这样能提高一定的安全性,所以我们今天介绍,Centos7+Nginx通过windows CA颁发及配置SSL服务,当然如果是生成环境的话,一般都会申请第三方证书,比如沃通等第三方证书颁发机构,今天我们主要使用的是内部的windows CA服务为nginx颁发证书,当然也可以使用Nginx的自签名证书,但是那样每次访问都会有相关的警告

Nginx服务配置综合实例

################################ 1.安装nginx,yum安装,编译安装 Nginx是一个免费,开源,高性能的HTTP服务器,同时也可以作为反向代理服务器,支持IMAP/POP3邮件代理服务器,支持模块化定制功能. Nginx支持三种运行模式,默认为worker模式: prefork:进程模型,两级结构,主进程master负责生成和管理子进程,每个子进程负责响应一个请求: worker:线程模型,三级结构,主进程负责生成子进程,每个子进程负责生成多个线程,每个线