php-fpm安装

nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。 nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx。

那什么又是cgi呢?

CGI(Common Gateway Interface)。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。

简单的说,就是:cgi就是专门用来和web 服务器打交道的。web服务器收到用户请求,就会把请求提交给cgi程序(php的fastcgi),cgi程序根据请求提交的参数作应处理(解析php),然后输出标准的html语句返回给web服服务器,再返回给客户端,这就是普通cgi的工作原理。

安装

yum安装

yum install php php-mysql php-fpm

安装成功。

php-fpm配置文件路径:/etc/php-fpm.d/www.conf

php配置文件路径:/etc/php.ini

说明:

php-mysql,这个是后续链接mysql需要的

修改php配置

php.ini

将 ;cgi.fix_pathinfo=1 改为 cgi.fix_pathinfo=1 只要把前面的分号去掉就可以了;

fix_pathinfo是用来干嘛的呢?

为CGI提供真正的PATH_INFO / PATH_TRANSLATED支持,不打开,nginx是解析不了路径的。

www.conf

将 user = apache group = apache

改为 user = nginx group = nginx

nginx配置php-fpm解析php请求

注:nginx安装参考

/etc/nginx/conf.d目录下新增php-fpm.conf,内容配置如下

server {listen  80;server_name 192.168.189.134;location ~ .php$ {try_files $uri =404;root /usr/share/nginx/html;fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME     $document_root$fastcgi_script_name;include fastcgi_params;}
}

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

这个配置的意思是 在浏览器中访问的.php文件,实际读取的是 $document_root(网站根目录)下的.php文件 -- 也就是说当访问127.0.0.1/index.php的时候,需要读取网站根目录下面的index.php文件,如果没有配置这一配置项时,nginx不回去网站根目录下访问.php文件,所以返回空白

SCRIPT_FILENAME这个参数在fastcgi_params也有,默认是$fastcgi_script_name,可以看出只是添加了网站根目录

启动php-fpm

开启自启动

sudo systemctl enable php-fpm

测试是否设置成功

/usr/share/nginx/html目录下新建phpinfo.php文件,内容如下:

<?php echo 6666666666; phpinfo(); ?>

重启nginx

sudo systemctl restart nginx

访问http://192.168.189.134/phpinfo.php

可以访问,已经成功安装了。

加固

php-fpm降权

修改/etc/php-fpm.d/www.conf
将 user = apache group = apache
改为 user = nobody group = nobody

php启动安全模式

PHP 环境提供的安全模式是一个非常重要的内嵌安全机制,PHP 安全模式能有效控制一些 PHP 环境中的函数(例如system()函数,官网有个列表),对大部分的文件操作函数进行权限控制,同时不允许对某些关键文件进行修改(例如 /etc/passwd)。默认的 php.ini 配置文件并没有启用安全模式

php5.4以前的版本修改/etc/php.ini

safe_mode = on

php5.4就移除安全模式了,下面是官网的说明

下面是安全模式下的功能

用户组安全

当您启用安全模式后,如果safe_mode_gid选项被关闭,PHP 脚本能够对文件进行访问,且相同用户组的用户也能够对该文件进行访问。

因此,建议您将该选项设置为关闭状态:

safe_mode_gid = off

安全模式下执行程序主目录

如果启用了安全模式后,想要执行某些程序的时候,可以指定需要执行程序的主目录,例如:

safe_mode_exec_dir = /usr/bin

一般情况下,如果不需要执行什么程序,建议您不要指定执行系统程序的目录。您可以指定一个目录,然后把需要执行的程序拷贝到这个目录即可,例如:

safe_mode_exec_dir = /temp/cmd

但是,更推荐您不要执行任何程序。这种情况下,只需要将执行目录指向网页目录即可:

safe_mode_exec_dir = /usr/www

安全模式下包含文件

如果您需要在安全模式下包含某些公共文件,您只需要修改以下选项即可:

safe_mode_include_dir = /usr/www/include/

一般情况下,PHP 脚本中包含的文件都是在程序已经写好的,可以根据您的具体需要进行设置。

设置 doc_root

修改/etc/php.ini

doc_root = /usr/share/nginx/hml/

上图是修改后的,访问的phpinfo.php不在这个目录下,所以不被解析并访问

查看日志,现在不能打开这个php,起到限制php的执行目录,doc_root目录以外的php无法被解析

修改为正确的路径

doc_root = /usr/share/nginx/html/

重启pgp-fpm

可以被解析并访问

控制 PHP 脚本能访问的目录

修改/etc/php.ini

open_basedir = /usr/share/nginx/htm/

访问的phpinfo.php不在上面的目录下,则禁止访问

修改为正确路径则访问成功

关闭危险函数

如果您启用了安全模式,那么可以不需要设置函数禁止,但为了安全考虑,还是建议您进行相关设置。例如,您不希望执行包括system()等在内的执行命令的 PHP 函数,以及能够查看 PHP 信息的phpinfo()等函数,那么您可以通过以下设置禁止这些函数:

disable_functions=phpinfo

上面做测试禁用了phpinfo,重启php-fpm

phpinfo.php里面使用了这个函数,我们看下是否能执行

没有php的信息,函数被禁用了。

关闭 PHP 版本信息在 HTTP 头中的泄露

暴露给黑客的信息越少,攻击成功就会越高,php版本也是一样的,不知道版本就不能针对具体版本进行研究入侵了。

修改/etc/php.ini文件如下

expose_php=off

重启php-fpm

我们验证是否设置成功了,图片可看出生效了,没有了php版本信息

错误信息控制

display_errors = Off
error_reporting = E_WARNING & E_ERROR

错误日志

一般 PHP 环境在没有连接到数据库或者其他情况下会有错误提示信息,错误信息中可能包含 PHP 脚本当前的路径信息或者查询的 SQL 语句等信息,这类信息如果暴露给黑客是不安全的,因此建议您禁止该错误提示:

修改/etc/php.ini

display_errors = Off #如果您确实要显示错误信息,一定要设置显示错误信息的级别。例如,只显示警告以上的错误信息: error_reporting = E_WARNING & E_ERROR

打开错误信息提示

关闭错误信息提示

对比上面的错误信息,打开状态直接暴露了phpinfo.php的路径了,给黑客很好的信息了。

关闭注册全局变量

在 PHP 环境中提交的变量,包括使用 POST 或者 GET 命令提交的变量,都将自动注册为全局变量,能够被直接访问。这对您的服务器是非常不安全的,因此建议您将注册全局变量的选项关闭,禁止将所提交的变量注册为全局变量。

register_globals = off

注意: 该选项参数在 PHP 5.3 以后的版本中已被移

防护SQL注入攻击

php5.4以前的版本,有一个自动将进入 PHP 脚本的数据进行转义的过程。

当打开时,所有的 '(单引号),"(双引号),**(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。最好在编码时不要转义而在运行时根据需要而转义,被称为魔术引号(Magic Quote),不过php5.4开始就被移除了.

php5.4以前的版本修改配置/etc/php.ini

magic_quotes_gpc = On

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要点击

PHP进阶架构师视频资料、面试文档免费获取​docs.qq.com

或 者关注咱们下面的知乎专栏

PHP7进阶架构师​zhuanlan.zhihu.com

来源:https://www.cnblogs.com/alummox/p/11370941.html

php显示地址栏携带的错误信息_php-fpm搭建及加固相关推荐

  1. elementUI表单验证怎么显示后台返回的错误信息

    elementUI的表单验证使用非常方便,此处不赘述,网上的方法和官方文档都有描述. 如果后台返回的错误信息要显示在表单验证错误提示的地方,而不是另外弹出提示框或者,实现效果如下图: 这个效果要如何实 ...

  2. C语言中返回错误信息的函数总结

    C语言strerror()函数:返回错误原因的描述字符串 头文件: #include <string.h> 定义函数: char * strerror(int errnum); 函数说明: ...

  3. asp.net MVC 验证错误信息本地化

    asp.net MVC 提供了模型验证的快捷方式,我在上一篇博客中有专门提到模型验证的类型以及如何自定义验证,这次我们来探讨一下模型验证信息如何本地化,活着直白点说如何在不同语言中显示不同的错误信息. ...

  4. 修改html文件500错误信息,打开网页提示 HTTP500错误的终极解决方法

    http 500内部服务器错误说明IIS服务器无法解析ASP代码,访问一个静态页面试试是否也出现这个问题,如果访问静态页面没问题,那就要分以下几种 情况来分析了: ① 你是否改变过计算机名称. ② 站 ...

  5. 服务器 1 500错误信息,什么是500错误

    什么是500错误[编辑] 概述 500错误页面,则说明了内部服务器无法解析ASP代码.但有时候它能打开静态页面问题.如果静态页面没有问题,则是具体问题具体分析. 一.查看错误信息 1."服务 ...

  6. jsr303jsp页面怎么显示错误信息_springmvc使用JSR-303进行数据校验实例

    项目中,通常使用较多的是前端的校验,比如页面中js校验以及form表单使用bootstrap校验.然而对于安全要求较高点建议在服务端进行校验. 服务端校验: 控制层controller:校验页面请求的 ...

  7. php mysql 500错误日志_服务器出现500错误的时候,让PHP显示错误信息

    用PHP开发程序时,如果服务器出现500的时候,如果无法知道究竟是什么原因,就无法进行调试. 要让PHP显示错误信息,可以从PHP配置文件 (php.ini)或PHP程序文件入手,另外,如果与IIS整 ...

  8. 项目上线,php的错误信息必须不让其在页面中显示给客户,

    对于PHP开发者来 说,一旦某个产品投入使用,应该立即将 display_errors选项关闭,以免因为这些错误所透露的路径.数据库连接.数据表等信息而遭到黑客攻击.但是,任何一个产品在投入使用后,都 ...

  9. Ajax.net显示错误信息

    <asp:ScriptManager ID="ScriptManager1" EnablePartialRendering="true" runat=&q ...

最新文章

  1. 中国芯片将靠此超车!RISC-V架构神在哪全解构【附下载】
  2. element中upload单图片转base64后添加进数组,请求接口
  3. C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式
  4. 解决 Oralce 执行set autotrace on时的SP2-0618和SP2-0611错误
  5. 如何获取尚未开票信息(包括交货单、销售订单)
  6. myeclispe快捷键一\(≧▽≦)/终于也收藏了
  7. 应用服务器——jetty架构分析
  8. php reflectionmethod,PHP ReflectionMethod getClosure()用法及代码示例
  9. php mysql缓存技术_系统的讲解 - PHP 缓存技术
  10. 各种乐器与人声的频率特性说明
  11. latex缩进与对齐_科学网—Latex算法排版,不同行缩进不同 - 张鹏的博文
  12. 德国Java工程师_1886年,德国工程师。
  13. Android 应用程序之间数据共享—ContentProvider
  14. AJAX from S3 CORS fails on preflight OPTIONS with 403
  15. Python入门之经典练习题
  16. 点菜系统软件源码(点菜软件源码分享)
  17. 调通sina33下的AP6212A0版本的BT(V1.0)
  18. MySQL全文索引的坑 20211202
  19. 会议纪要模板----邮件
  20. 裸眼 3D 技术是什么原理?

热门文章

  1. 电脑集显linux版本,Intel即将推出新的Linux驱动 核显性能最高可提升20%
  2. wps html编辑表格,手机wps中怎么编辑表格图文教程
  3. java项目整合mybatis_JavaWeb项目整合Spring,SpringMVC,Mybatis框架
  4. scrapy 中爬取时被重定向_Scrapy详解之scrapy shell
  5. python列表推导式生成随机数_Python:列表推导式/生成器推导式
  6. C语言中变量名加括号,为什么在声明变量时C ++允许我们在括号内将变量名括起来?...
  7. C语言把输入值放入数组,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...
  8. 生存分析——快手的基于深度学习框架的集成⽣存分析软件KwaiSurvival(一)
  9. 第三章_深度学习基础
  10. Android---真机调试时不能识别手机的解决方案