phpstudy nginx配置_phpstorm配置php环境

phpstudy nginx配置_phpstorm配置php环境前言:首先来了解一下nginx工作原理:https://blog.csdn.net/hguisu/article/details/8930668一.nginx实现php动态解析原理nginx是一个高性能的http服务器和反向代理服务器。即nginx可以作为一个HTTP服务器进行网站的发布处理,也可以作为一个反向代理服务器进行负载均衡。但需要注意的是:nginx本身并不会对php文…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言:

首先来了解一下nginx工作原理:https://blog.csdn.net/hguisu/article/details/8930668

一.nginx实现php动态解析原理

nginx 是一个高性能的http服务器和反向代理服务器。即nginx可以作为一个HTTP服务器进行网站的发布处理,也可以作为一个反向代理服务器进行负载均衡。但需要注意的是:nginx本身并不会对php文件进行解析。对PHP页面的请求将会被nginx交给FastCGI进程监听的IP地址及端口,由php-fpm(第三方的fastcgi进程管理器)作为动态解析服务器处理,最后将处理结果再返回给nginx。即nginx通过反向代理功能将动态请求转向后端php-fpm,从而实现对PHP的解析支持,这就是Nginx实现PHP动态解析的基本原理。 

 

首先需要了解一些概念。(nginx + php-fpm +fastcgi)

  • Nginx 是非阻塞IO & IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。
  • PHP-FPM 是阻塞的单线程模型,pm.max_children 指定的是最大的进程数量,pm.max_requests 指定的是每个进程处理多少个请求后重启(因为 PHP 偶尔会有内存泄漏,所以需要重启)。PHP-FPM 的每个进程也只有一个线程,但是一个进程同时只能服务一个客户端。
  • fastCGI :为了解决不同的语言解释器(如php、python解释器)与webserver的通信,于是出现了cgi协议。只要你按照cgi协议去编写程序,就能实现语言解释器与webwerver的通信。如php-cgi程序。但是webserver每收到一个请求,都会去fork一个cgi进程,请求结束再kill掉这个进程。这样有10000个请求,就需要fork、kill php-cgi进程10000次。 fastcgi是cgi的改良版本。fast-cgi每次处理完请求后,不会kill掉这个进程,而是保留这个进程,使这个进程可以一次处理多个请求。大大提高了效率。

补充:反向代理与正向代理的相关知识(简言之,正向代理-代理的是客户端;反向代理-代理的是服务器)

正向代理的用途:
                (1)访问原来无法访问的资源,如Google
                (2) 可以做缓存,加速访问资源
                (3)对客户端访问授权,上网进行认证
                (4)代理可以记录用户访问记录上网行为管理,对外隐藏用户信息)

反向代理的用途:反向代理,”它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。
               (1)保证内网的安全,通常将反向代理作为公网访问地址,Web服务器是内网
               (2)负载均衡,通过反向代理服务器来优化网站的负载

二.nginx实现php动态解析.之如何配置nginx

1.了解nginx配置相关常识 (nginx.conf)

nginx.conf组成及基本配置语法讲解详见另外一篇文章,此处将解析php配置用到的几个语法做一下简单介绍:

2.nginx解析php的配置范例

server {
    listen       8000 backlog=4096;
    server_name  www.baidu.com localhost;
    access_log logs/access.log main;
    root   /home/leimengyao/api/app/htdocs;

    location / {
        index  index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        #fastcgi_pass   127.0.0.1:9000;
        fastcgi_pass unix:/home/leimengyao/php7/var/run/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/leimengyao/api/app/htdocs$fastcgi_script_name;
        include        fastcgi_params;
    }

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ /\.ht {
        deny  all;
    }
}

如上配置,当一个http请求到来时,被处理的过程如下:

http://10.94.120.124:8000/A/B?c=1&d=4为例:

  • http请求到来后,通过server全局块里监听的端口号,匹配到相应server。然后接下来进行location路径的匹配。
  • 首先匹配到location / ,在这个匹配规则中,通过try_files 先在root目录(/home/leimengyao/api/app/htdocs)下查找是否有$uri文件;没有匹配到,然后再查找root目录下是否有$uri/目录;同样没有匹配到,则匹配最后一项/index.php?$args,即发出一个”内部子请求”,也就相当于nginx发起了一个http请求到http://10.94.120.124:8000/index.php?c=1&d=4
  • 这个子请求会被location ~ \.php${ ... }catch住,也就是进入 FastCGI 的处理程序(nginx需要通过FastCGI模块配置,将相关php参数传递给php-fpm处理。在该项中设置了fastcgi_pass相关参数,将用户请求的资源发给php-fpm进行解析,这里涉及到nginx FastCGI模块的相关配置语法下文会介绍)。而具体的 URI 及参数是在 REQUEST_URI 中传递给 FastCGI 和 WordPress 程序的,因此不受 URI 变化的影响!!!!。
    public static function detectPath() {
        if (!empty($_SERVER['SCRIPT_URL'])) {
            $path = $_SERVER['SCRIPT_URL'];
        } else {
            //as: www.baidu.com/A/B?saadf=esdf
            if (isset($_SERVER['REQUEST_URI'])) {
              //$_SERVER['REQUEST_URI']="/m/test?saadf=esdf";
                $request_uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
                if (false !== $request_uri) {
                    $path = $request_uri;
                  //echo $path; /A/B
                  //exit;
            } elseif ($_SERVER['REQUEST_URI'] && strpos($_SERVER['REQUEST_URI'], '?') !== false) {
                $path = strstr($_SERVER['REQUEST_URI'], '?', true);
            }
            } else {
                $path = $_SERVER['PHP_SELF'];
            }
        }
        return $path;
    }

3. Nginx配置.之PHP FastCGI

首先需要了解一些文件。(nginx.conf + fastcgi_params + php-fpm.conf + php.ini)

  • fastcgi_params 文件一般保存在/usr/local/etc/nginx下(Ubuntu可保存于/etc/nginx下),它为FastCGI模块定义了基本的环境变量。这些fastcgi环境变量,我们在配置nginx的fastcgi_params时会用到。内容见下:

    phpstudy nginx配置_phpstorm配置php环境

  • Nginx.conf 的PHP FastCGI模块允许nginx同FastCGI协同工作,并且控制哪些参数将被安全传递。常见的fastcgi参数配置含义下文会具体介绍。配置范例如下:
    location / {
      fastcgi_pass   localhost:9000;
      fastcgi_index  index.php;
     
      fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;
      fastcgi_param  QUERY_STRING     $query_string;
      fastcgi_param  REQUEST_METHOD   $request_method;
      fastcgi_param  CONTENT_TYPE     $content_type;
      fastcgi_param  CONTENT_LENGTH   $content_length;
    }

 

https://www.jianshu.com/p/9bae5c49a163

       查看发现配置文件目录在/etc目录,但是加载php.ini显示为none;切换到/etc下目录查看,确实没有php.ini文件。

phpstudy nginx配置_phpstorm配置php环境

复制php.ini.default为php.ini,再次执行php –ini  查看发现加载php.ini文件成功

phpstudy nginx配置_phpstorm配置php环境

php -m 查看会列出命令行 PHP Cli 已经安装的扩展。

查看php拓展安装目录命令:   php-config | grep -i extension (http://www.blogdaren.com/post-2520.html)

phpstudy nginx配置_phpstorm配置php环境

切换到该目录下查看拓展

phpstudy nginx配置_phpstorm配置php环境

其次了解一些nginx.conf中常用fastcgi配置的含义

其中TCP是IP加端口,可以跨服务器.而UNIX Domain Socket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:
方式1:
php-fpm.conf: listen = 127.0.0.1:9000
nginx.conf: fastcgi_pass 127.0.0.1:9000;
方式2:
php-fpm.conf: listen = /tmp/php-fpm.sock
nginx.conf: fastcgi_pass unix:/tmp/php-fpm.sock;
其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw—-.

 

UNIX Domain Socket可用于两个没有亲缘关系的进程,是目前广泛使用的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIX Domain Socket通讯的.这种通信方式是发生在系统内核里而不会在网络里传播.UNIX Domain Socket和长连接都能避免频繁创建TCP短连接而导致TIME_WAIT连接过多的问题.对于进程间通讯的两个程序,UNIX Domain Socket的流程不会走到TCP那层,直接以文件形式,以stream socket通讯.如果是TCP Socket,则需要走到IP层,对于非同一台服务器上,TCP Socket走的就更多了.

UNIX Domain Socket:
Nginx <=> socket <=> PHP-FPM
TCP Socket(本地回环):
Nginx <=> socket <=> TCP/IP <=> socket <=> PHP-FPM
TCP Socket(Nginx和PHP-FPM位于不同服务器):
Nginx <=> socket <=> TCP/IP <=> 物理层 <=> 路由器 <=> 物理层 <=> TCP/IP <=> socket <=> PHP-FPM

  • fastcgi_index:
  • fastcgi_param:

 

以上配置文件全部修改完成以后,需要进行重启nginx和php-fpm,修改的内容才能生效:

三.nginx实现php动态解析.之配置过程中常见错误

  1. ​​​​​​php-fpm需要进行一些配置修改​(超时时长:request_slowlog_timeout等   php-fpm 的request_terminate_timeout设置不当导致的502错误
  2. Nginx-配置误区 (fastcgi_param SCRIPT_FILENAME)
  3. Nginx + Php-fpm 一个神奇的502错误
  4. nginx+php-fpm打开index.php显示空白
  5. php国际化插件安装、debug插件安装(extension  php.ini)
  6. php缓存信息关闭(https://www.cnblogs.com/JohnABC/p/3529786.html   !!开启缓存会引起许多问题,视情况而定
  7. ?php执行流程https://www.jianshu.com/p/042c56e08939

四.Mac下配置神器PhpStrom开发环境

https://blog.csdn.net/tfy_2425482491/article/details/79377672

phpstudy nginx配置_phpstorm配置php环境

phpstudy nginx配置_phpstorm配置php环境

phpstudy nginx配置_phpstorm配置php环境

点击debug报如下错误:安装debug扩展

phpstudy nginx配置_phpstorm配置php环境

五.php依赖管理工具-composer

 

六.其他

    redis(https://www.jianshu.com/p/018bbf5ff42a

    php    call_user_func_array(https://www.jianshu.com/p/1c0f30d8722d

 

参考文献:

http://www.cnblogs.com/mangguoxiansheng/p/5967745.htmll

https://segmentfault.com/q/1010000004854045

nginx rewrite规则 https://segmentfault.com/a/1190000002797606

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190616.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [ASP.net]web.config的customErrors与httpErrors的区别

    [ASP.net]web.config的customErrors与httpErrors的区别之前一直知道设置web.config(其实就是xml文件)的customErrors的error来指向自定义的错误页的URL,但是今天在调试的时候发现customErrors无法跳转到自定义的页面,在

    2022年7月1日
    31
  • 网络诊断dns服务器未响应,网络诊断提示DNS服务器未响应解决方法

    网络诊断dns服务器未响应,网络诊断提示DNS服务器未响应解决方法DNS服务器未响应是什么意思DNS服务器是计算机域名系统(DomainNameService)的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。其中域名必须对应一个IP地址,而IP地址不一定有域名。域名系统采用类似目录树的等级结构。域名服务器为客户机/服务器模式中的服务器方,它主要有两种形式:主服务器和转发…

    2022年5月9日
    46
  • 在html 中怎么将超链接分别设置样式,html中局部超链接样式设置怎么弄?[通俗易懂]

    在html 中怎么将超链接分别设置样式,html中局部超链接样式设置怎么弄?[通俗易懂]满意答案朝雾中的晨夕推荐于2017.09.12采纳率:45%等级:12已帮助:8531人a.two:link{color:#CC99CC;text-decoration:none}a.two:visited{color:#FF0000;text-decoration:none}a.two:hover{color:#606060;text-decoration:…

    2022年7月19日
    15
  • emWin学习[通俗易懂]

    emWin学习[通俗易懂]一、API学习  1.1、初始化     intGUI_Init(void); 函数来初始化emWin内部数据结构和变量。如果在初始化之前调用WM_SetCreateFlags()使用窗口管理器,则在GUI_Init()内创建背景窗口。(也就是窗口设置创建标记必须在初始化之前)。  1.2、显示文本     可以显示字符串、十六进制、十进制、二进制数,文

    2022年10月14日
    4
  • 补码加、减运算规则「建议收藏」

    补码加、减运算规则「建议收藏」在计算机中,通常总是用补码完成算术的加减法运算。其规则是:  [X+Y]补=[X]补+[Y]补,[X-Y]补=[X]补-[Y]补=[X]补+[-Y]补这表明,有了补码表示的被加(减)数和加(减)数,要完成计算补码表示的二数之和或二数之差,只需用二数的补码直接执行加减运算即可,符号位与数值位同等对待,一起参加运算,若运算结果不溢出,即不超出计算机所能表示的范围,则结果的符号…

    2022年4月19日
    52
  • 计算机病毒的算法,计算机病毒从算法划分为几个类型

    计算机病毒的算法,计算机病毒从算法划分为几个类型随着计算机应用的日益普及,计算机病毒也开始入侵并呈不断蔓延趋势,对计算机的正常运行造成了威胁。那么,计算机病毒从算法划分为几个类型那?就让佰佰安全网的小编和你一起去了解一下吧!计算机病毒从算法划分为以下几个类型:1、伴随型病毒,这一类病毒并不改变文件本身,它们根据算法产生EXE文件的伴随体,具有同样的名字和不同的扩展名(COM),例如:XCOPY.EXE的伴随体是XCOPY.COM。病毒把自身写入…

    2022年6月6日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号