🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名 →

路径(十八):在本地 CentOS 7 上搭建 Web 开发环境 — nginx 与 php-fpm

nginx 不懂 php,它可以把客户对 php 应用的请求转发给懂 php 的服务器,这台服务器会解释 php ,然后把处理好的内容再交给 nginx ,nginx 再把这些内容发送到客户那里去。这里,nginx 的作用就是一个代理服务器(Proxy Server),这个解释 php 用的服务器是上游服务器(Upstream Server),通常就是使用 FastCGI 类型的服务器,你可以把 php-fpm 想成是 php 版本的 FastCGI 服务器。

代理服务器,用现实生活的例子解释一下,它就像是房产中介,你打算租个房子,找到了房产中介,他会为你联系房主,把你的需求说一下,房主把他的意思转达给房产中介,房产中介又会从房主那里得来的消息转达给你。代理服务器就是,接到客户的请求以后,把请求转发给其它的服务器,它们处理好请求以后会把结果再交给代理服务器,然后由代理服务器把信息再传递给发出这个请求的客户那里。

在 nginx 的配置文件里,可以使用 fastcgi_pass 这个指令去指定 FastCGI 服务器。nginx 跟 FastCGI 服务器交流的方式用的是 FastCGI 协议,如果直接把客户的 http 请求转发给 FastCGI 服务器,它是不认识这些请求的,你需要用一种方法把 http 的请求解释成 FastCGI 能懂的请求,这个解释的工作就是去设置一些 FastCGI 参数,这些参数可以使用 nginx 的 fastcgi_param 指令去设置,它的值分成两部分,一部分是 FastCGI 参数,另一部分是对应的值。

介绍 nginx 配置的时候,我们在 /etc/nginx/conf.d 这个目录下创建了一个叫 ninghao.dev.conf 的配置文件,现在它看起来是这样的:

server {
  listen        80;
  server_name   ninghao.dev www.ninghao.dev;
  root          /vagrant/main/public;
}

下面去改造一下这个配置,在 server 配置区块的里面,添加一个 location 区块,在它里面,可以匹配用 .php 结尾的请求,然后指定一下 FastCGI 服务器的地址,再加上几个解释用的参数。

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }

location 后面的 ~ \.php$ 表示请求里用 .php 结尾,fastcgi_pass 指令设置了把请求转发到的那个 FastCGI 服务器的地址是 127.0.0.1:9000 ,这个 FastCGI 服务器跟 nginx 服务器在同一台主机上。fastcgi_param 指令设置了两个解释,REQUEST_METHOD 是 FastCGI 的参数,它的值设置成了一个变量 $request_method,这个变量的值会包含客户用的 http 方法。SCRIPT_FILENAME,请求的脚本文件,它的值设置成了两个变量的组合,$document_root,这个变量就是 root 指令的值, $fastcgi_script_name 这个变量里面会包含请求的脚本文件的名字,也就是 php 文件的名字。

保存文件,先测试一下配置 nginx -t ,再重新加载 nginx ,service nginx reload 。 现在定义的这个 nginx 服务器就可以接受对 php 应用的请求了。注意也要确定你的 FastCGI 服务器已经运行了,用 service php-fpm status 看一下,没运行的话,可以用 service php-fpm start 启动它。下面去测试一下,在这个服务器的根目录下面,创建一个叫 phpinfo.php  的文件,这个文件里的内容是:<?php phpinfo(); ?> ,在浏览器打开这个 php 文件,一切正常,你会看到下面这样的页面:

QQ20150129-1

FastCGI 还有很多可以设置的参数,你可以把这些设置单独放到一个文件里,nginx 默认会给我们一个这样的配置文件,就是 fastcgi.conf ,在配置里可以用 include 指令把这个文件直接包含进来,这个文件里包含之前我们手工设置的两个参数,所以,可以去掉它们,像这样:

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi.conf;
  }

下面,我们可以在 server 配置里面,再用一个 index 指令,去设置一下默认打开的文件,可以加上 index.php 。现在,整个服务器的配置看起来是这样的:

server {
  listen        80;
  server_name   ninghao.dev www.ninghao.dev;
  root          /vagrant/main/public;
  index         index.php index.html index.htm;

  location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    include fastcgi.conf;  
  }
}

[todo:需要技术审查]

路径 FastCGI php-fpm nginx

评论

php-fpm running
nginx也显示ok
在server中
server {
listen 80;
server_name miyogurt.com www.miyogurt.com;
root /vagrant/main/public;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
hosts文件也添加了,ping正常。
但是打开的时候
您访问的网页出错了!
(连接错误)

html静态文件是正常的

按文章里的最后一段的配置,在 location 里,用了一个 include fastcgi.conf 。记得重新加载 nginx,用 service nginx reload,

成功了,加上include,而且index.php忘记添加了,加上就正常了。

http://ninghao.dev/phpinfo.php访问网页,显示网页不存在或已删除

原文:“下面去测试一下,在这个服务器的根目录下面,创建一个叫 phpinfo.php 的文件,这个文件里的内容是:<?php phpinfo(); ?> 。”应该是创建一个index.php,而不是phpinfo.php。

下面去测试一下,在这个服务器的根目录下面,创建一个叫 phpinfo.php 的文件,这个文件里的内容是:<?php phpinfo(); ?> 。应该是创建一个index.php,而不是phpinfo.php。

clear!

皓哥,报告错误,“An error occurred.

Sorry, the page you are looking for is currently unavailable.
Please try again later.” 如何处理?

这里有一个完整版的 LEMP 搭建过程,您参考一下:http://ninghao.net/blog/3630

皓哥,跟着教程走完之后,显示403 forbidden
error.log内容是
2017/03/02 05:02:49 [error] 29107#0: *1 "/home/vagrant/www/index.php" is forbidden (13: Permission denied), client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "localhost:8080"

确定文件夹和文件都存在。
并且vagrant和www的权限都改为了755,这是咋回事呢。

server {
listen 8080;
root /home/vagrant/www;
index index.php index.html;

server {
listen 8080;
root /home/vagrant/www;
index index.php index.html;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}
}

已经解决了。原因是因为没有关闭SELinux

收到。

处理 php 的地方是不是少了一行配置?忘记加载 fastcgi 参数文件了。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点