전체 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은 차단 단일 스레드 모델입니다. - fastCGI: 서로 다른 언어 해석기(PHP, Python 해석기 등)와 웹 서버 간의 통신 문제를 해결하기 위해 CGI 프로토콜이 등장했습니다. CGI 프로토콜에 따라 프로그램을 작성하면 언어 해석기와 웹서버 간의 통신이 가능합니다. php-cgi 프로그램과 같은 것입니다. 그러나 웹서버가 요청을 받을 때마다 cgi 프로세스를 분기하고 요청이 완료된 후 프로세스를 종료합니다. 요청이 10,000개라면 php-cgi 프로세스를 10,000번 포크하고 종료해야 합니다. fastcgi는 cgi의 향상된 버전입니다. fast-cgi는 각 요청을 처리한 후 프로세스를 종료하지 않지만 프로세스가 한 번에 여러 요청을 처리할 수 있도록 프로세스를 유지합니다. 효율성이 크게 향상되었습니다.
pm.max_children
은 최대 프로세스 수를 지정하고, pm.max_requests
는 각 프로세스가 처리하는 요청 수를 지정합니다. (PHP에서는 가끔 메모리 누수가 발생하므로 다시 시작해야 합니다.) PHP-FPM의 각 프로세스에는 스레드가 하나만 있지만 하나의 프로세스는 동시에 하나의 클라이언트에만 서비스를 제공할 수 있습니다. 보충: 역방향 프록시 및 순방향 프록시에 대한 지식(간략히 말하면 클라이언트에 대한 순방향 프록시 작동, 서버에 대한 역방향 프록시 작동)2.nginx PHP 동적 파싱 구현. nginx 구성 방법역방향 프록시 사용: 역방향 프록시, 즉 "서버에 대한 프록시 역할을 합니다"는 주로 다음에서 사용됩니다. 서버 클러스터의 분산 배포는 서버 정보를 숨깁니다.
정방향 프록시 사용:
( 1) 원래 액세스할 수 없었던 리소스에 액세스 , Google과 같은
(2) 리소스에 대한 액세스 속도를 높이기 위해 캐싱을 수행할 수 있습니다. . 사용자 정보 숨기기)(1) 인트라넷의 보안을 보장하기 위해 일반적으로 역방향 프록시를 공용 네트워크 액세스 주소로 사용하고 웹 서버는 인트라넷입니다. 역방향 프록시 서버를 사용하여 로드를 최적화합니다. 웹사이트
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)
구성 예 如上配置,当一个http请求到来时,被处理的过程如下: 以http://10.94.120.124:8000/A/B?c=1&d=4为例: 3. Nginx配置.之PHP FastCGI 首先需要了解一些文件。(nginx.conf + fastcgi_params + php-fpm.conf + php.ini) (https://www.jianshu.com/p/9bae5c49a163) 查看发现配置文件目录在/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配置的含义 其中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- fpm.sock; 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和php-fpm,修改的内容才能生效: https://blog.csdn.net/tfy_2425482491/article/details/79377672 点击debug报如下错误:安装debug扩展 redis(https://www.jianshu.com/p/018bbf5ff42a) php call_user_func_array(https://www.jianshu.com/p/1c0f30d8722d) 推荐学习:《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;
}
}
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;
}
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;
}
<br/>
其中php-fpm.sock是一个文件,由php-fpm生成,类型是srw-rw----.
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
三.nginx实现php动态解析.之配置过程中常见错误
四.Mac下配置神器PhpStrom开发环境
五.php依赖管理工具-composer
六.其他
위 내용은 전체 PHP 환경(nginx 및 php)을 빠르고 정확하게 구성하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

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

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

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

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

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

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

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

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