목차
三.nginx实现php动态解析.之配置过程中常见错误
五.php依赖管理工具-composer
六.其他
백엔드 개발 PHP 튜토리얼 전체 PHP 환경(nginx 및 php)을 빠르고 정확하게 구성하는 방법

전체 PHP 환경(nginx 및 php)을 빠르고 정확하게 구성하는 방법

May 20, 2021 pm 03:12 PM

완전한 PHP 환경(nginx 및 php)을 빠르고 정확하게 구성하는 방법

전체 PHP 환경(nginx 및 php)을 빠르고 정확하게 구성하는 방법

먼저 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 구문 분석 지원을 실현합니다. 이것이 PHP 동적 구문 분석을 구현하는 Nginx의 기본 원칙입니다.

먼저 몇 가지 개념을 이해해야 합니다. (nginx + php-fpm +fastcgi)

  • Nginx는 운영 체제에서 제공하는 epoll과 유사한 기능을 통해 비차단 IO 및 IO 다중화 모델입니다. 하나의 스레드에서. Nginx의 프로세스는 스레드입니다. 즉, 각 프로세스에는 하나의 스레드만 있지만 이 스레드는 여러 클라이언트에 서비스를 제공할 수 있습니다. 非阻塞IO & IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。
  • PHP-FPM 是阻塞的单线程模型,pm.max_children 指定的是最大的进程数量,pm.max_requests
  • PHP-FPM은 차단 단일 스레드 모델입니다. pm.max_children은 최대 프로세스 수를 지정하고, pm.max_requests는 각 프로세스가 처리하는 요청 수를 지정합니다. (PHP에서는 가끔 메모리 누수가 발생하므로 다시 시작해야 합니다.) PHP-FPM의 각 프로세스에는 스레드가 하나만 있지만 하나의 프로세스는 동시에 하나의 클라이언트에만 서비스를 제공할 수 있습니다.
  • fastCGI: 서로 다른 언어 해석기(PHP, Python 해석기 등)와 웹 서버 간의 통신 문제를 해결하기 위해 CGI 프로토콜이 등장했습니다. CGI 프로토콜에 따라 프로그램을 작성하면 언어 해석기와 웹서버 간의 통신이 가능합니다. php-cgi 프로그램과 같은 것입니다. 그러나 웹서버가 요청을 받을 때마다 cgi 프로세스를 분기하고 요청이 완료된 후 프로세스를 종료합니다. 요청이 10,000개라면 php-cgi 프로세스를 10,000번 포크하고 종료해야 합니다. fastcgi는 cgi의 향상된 버전입니다. fast-cgi는 각 요청을 처리한 후 프로세스를 종료하지 않지만 프로세스가 한 번에 여러 요청을 처리할 수 있도록 프로세스를 유지합니다. 효율성이 크게 향상되었습니다.

보충: 역방향 프록시 및 순방향 프록시에 대한 지식(간략히 말하면 클라이언트에 대한 순방향 프록시 작동, 서버에 대한 역방향 프록시 작동)


정방향 프록시 사용:
              ( 1) 원래 액세스할 수 없었던 리소스에 액세스 , Google과 같은
                    (2) 리소스에 대한 액세스 속도를 높이기 위해 캐싱을 수행할 수 있습니다.         . 사용자 정보 숨기기)

역방향 프록시 사용: 역방향 프록시, 즉 "서버에 대한 프록시 역할을 합니다"는 주로 다음에서 사용됩니다. 서버 클러스터의 분산 배포는 서버 정보를 숨깁니다.

                    (1) 인트라넷의 보안을 보장하기 위해 일반적으로 역방향 프록시를 공용 네트워크 액세스 주소로 사용하고 웹 서버는 인트라넷입니다. 역방향 프록시 서버를 사용하여 로드를 최적화합니다. 웹사이트

2.nginx PHP 동적 파싱 구현. nginx 구성 방법

1. nginx 구성 관련 상식을 이해합니다

(nginx.conf)nginx.conf 구성 및 기본 구성 구문은 다음과 같습니다. 여기서 분석할 다른 기사에 설명되어 있습니다. PHP 구성에 사용되는 여러 구문에 대한 간략한 소개:

try_files $uri $uri/ /index.php$is_args$args : (https://blog.51cto.com/ 13930997/2311716,,, Nginx try_files 함정 ---
    try_files 마지막 위치(대체)는 특별합니다. 파일 시스템에서 파일을 직접 찾는 대신 내부 "하위 요청"을 발행합니다!!!
  • ) nginx 위치 ~ .php$ 구성에 대한 질문 (https://segmentfault.com/q/1010000012298020)
  • rewrite (https://segmentfault.com/a/1190000002797606)
  • 부록: nginx 구성 관련 구문 (nginx에는 사용 가능한 일부 전역 변수도 포함되어 있습니다. 자세한 내용은 링크를 참조하세요. 또한 nginx 공식 문서 http://www.nginx.org/ https://www.cnblogs.com/knowledgesea/p/를 볼 수도 있습니다. 5175711.html)
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时会用到。内容见下:

  • 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)

  • php-fpm.conf
  • php.ini 使用php --ini查看php加载的配置文件路径(https://www.jianshu.com/p/a118f10d738c)

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

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

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

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

切换到该目录下查看拓展

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

  • fastcgi_pass:该参数设置的是nginx与php-fpm的通信方式,nginx和php-fpm的通信方式有两种,一种是socket形式,一种是tcp形式。配置两种方式都可以,但是必须保证nginx配置的监听方式,和php-fpm.conf配置的监听方式保持一致性!(https://segmentfault.com/q/1010000004854045、https://www.jianshu.com/p/eab11cd1bb28)

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

<br/>
로그인 후 복사

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.conf,php-fpm.conf,php.ini)需要进行的操作(修改配置的时候通过 find / -name php-fpm.conf命令来查找),另外重启php-fpm(mac重启php-fpm)和nginx (nginx -s reload     https://www.jianshu.com/p/2726ca520f4a 、  https://www.jianshu.com/p/9bae5c49a163)

三.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

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

五.php依赖管理工具-composer

 

六.其他

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

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

推荐学习:《PHP视频教程 

위 내용은 전체 PHP 환경(nginx 및 php)을 빠르고 정확하게 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

PHP의 다른 오류 유형을 설명하십시오 (통지, 경고, 치명적인 오류, 구문 분석 오류). PHP의 다른 오류 유형을 설명하십시오 (통지, 경고, 치명적인 오류, 구문 분석 오류). Apr 08, 2025 am 12:03 AM

PHP에는 4 가지 주요 오류 유형이 있습니다. 1. NOTICE : 가장 작은 것은 정의되지 않은 변수에 액세스하는 것과 같이 프로그램을 방해하지 않습니다. 2. 경고 : 심각한 통지는 파일을 포함하지 않는 것과 같은 프로그램을 종료하지 않습니다. 3. FatalError : 가장 심각한 것은 기능을 부르는 것과 같은 프로그램을 종료합니다. 4. parseerror : 구문 오류는 엔드 태그를 추가하는 것을 잊어 버리는 것과 같이 프로그램이 실행되는 것을 방지합니다.

PHP 및 Python : 두 가지 인기있는 프로그래밍 언어를 비교합니다 PHP 및 Python : 두 가지 인기있는 프로그래밍 언어를 비교합니다 Apr 14, 2025 am 12:13 AM

PHP와 Python은 각각 고유 한 장점이 있으며 프로젝트 요구 사항에 따라 선택합니다. 1.PHP는 웹 개발, 특히 웹 사이트의 빠른 개발 및 유지 보수에 적합합니다. 2. Python은 간결한 구문을 가진 데이터 과학, 기계 학습 및 인공 지능에 적합하며 초보자에게 적합합니다.

PHP에서 보안 비밀번호 해싱을 설명하십시오 (예 : Password_hash, Password_Verify). 왜 MD5 또는 SHA1을 사용하지 않습니까? PHP에서 보안 비밀번호 해싱을 설명하십시오 (예 : Password_hash, Password_Verify). 왜 MD5 또는 SHA1을 사용하지 않습니까? Apr 17, 2025 am 12:06 AM

PHP에서 Password_hash 및 Password_Verify 기능을 사용하여 보안 비밀번호 해싱을 구현해야하며 MD5 또는 SHA1을 사용해서는 안됩니다. 1) Password_hash는 보안을 향상시키기 위해 소금 값이 포함 된 해시를 생성합니다. 2) Password_verify 암호를 확인하고 해시 값을 비교하여 보안을 보장합니다. 3) MD5 및 SHA1은 취약하고 소금 값이 부족하며 현대 암호 보안에는 적합하지 않습니다.

PHP 실행 : 실제 예제 및 응용 프로그램 PHP 실행 : 실제 예제 및 응용 프로그램 Apr 14, 2025 am 12:19 AM

PHP는 전자 상거래, 컨텐츠 관리 시스템 및 API 개발에 널리 사용됩니다. 1) 전자 상거래 : 쇼핑 카트 기능 및 지불 처리에 사용됩니다. 2) 컨텐츠 관리 시스템 : 동적 컨텐츠 생성 및 사용자 관리에 사용됩니다. 3) API 개발 : 편안한 API 개발 및 API 보안에 사용됩니다. 성능 최적화 및 모범 사례를 통해 PHP 애플리케이션의 효율성과 유지 보수 성이 향상됩니다.

HTTP 요청 방법 (Get, Post, Put, Delete 등)이란 무엇이며 언제 각각을 사용해야합니까? HTTP 요청 방법 (Get, Post, Put, Delete 등)이란 무엇이며 언제 각각을 사용해야합니까? Apr 09, 2025 am 12:09 AM

HTTP 요청 방법에는 각각 리소스를 확보, 제출, 업데이트 및 삭제하는 데 사용되는 Get, Post, Put and Delete가 포함됩니다. 1. GET 방법은 리소스를 얻는 데 사용되며 읽기 작업에 적합합니다. 2. 게시물은 데이터를 제출하는 데 사용되며 종종 새로운 리소스를 만드는 데 사용됩니다. 3. PUT 방법은 리소스를 업데이트하는 데 사용되며 완전한 업데이트에 적합합니다. 4. 삭제 방법은 자원을 삭제하는 데 사용되며 삭제 작업에 적합합니다.

PHP : 웹 개발의 핵심 언어 PHP : 웹 개발의 핵심 언어 Apr 13, 2025 am 12:08 AM

PHP는 서버 측에서 널리 사용되는 스크립팅 언어이며 특히 웹 개발에 적합합니다. 1.PHP는 HTML을 포함하고 HTTP 요청 및 응답을 처리 할 수 ​​있으며 다양한 데이터베이스를 지원할 수 있습니다. 2.PHP는 강력한 커뮤니티 지원 및 오픈 소스 리소스를 통해 동적 웹 컨텐츠, 프로세스 양식 데이터, 액세스 데이터베이스 등을 생성하는 데 사용됩니다. 3. PHP는 해석 된 언어이며, 실행 프로세스에는 어휘 분석, 문법 분석, 편집 및 실행이 포함됩니다. 4. PHP는 사용자 등록 시스템과 같은 고급 응용 프로그램을 위해 MySQL과 결합 할 수 있습니다. 5. PHP를 디버깅 할 때 error_reporting () 및 var_dump ()와 같은 함수를 사용할 수 있습니다. 6. 캐싱 메커니즘을 사용하여 PHP 코드를 최적화하고 데이터베이스 쿼리를 최적화하며 내장 기능을 사용하십시오. 7

PHP는 파일 업로드를 어떻게 단단히 처리합니까? PHP는 파일 업로드를 어떻게 단단히 처리합니까? Apr 10, 2025 am 09:37 AM

PHP는 $ \ _ 파일 변수를 통해 파일 업로드를 처리합니다. 보안을 보장하는 방법에는 다음이 포함됩니다. 1. 오류 확인 확인, 2. 파일 유형 및 크기 확인, 3 파일 덮어 쓰기 방지, 4. 파일을 영구 저장소 위치로 이동하십시오.

self ::, parent ::, 그리고 static :: php oop의 차이점을 설명하십시오. self ::, parent ::, 그리고 static :: php oop의 차이점을 설명하십시오. Apr 09, 2025 am 12:04 AM

phpoop에서 self ::는 현재 클래스를 말하며, Parent ::는 부모 클래스를 말하며, static ::는 늦은 static 바인딩에 사용됩니다. 1. self :: 정적 방법과 일정한 호출에 사용되지만 늦은 정적 바인딩을 지원하지는 않습니다. 2.parent :: 하위 클래스가 상위 클래스 방법을 호출하는 데 사용되며 개인 방법에 액세스 할 수 없습니다. 3. Static ::는 상속 및 다형성에 적합한 후기 정적 결합을 지원하지만 코드의 가독성에 영향을 줄 수 있습니다.

See all articles