완전한 PHP 환경(nginx 및 php)을 빠르고 정확하게 구성하는 방법
먼저 nginx 작동 방식을 이해해 보겠습니다. https://blog.csdn.net/hguisu/article/details/8930668
nginx는 고성능 http 서버이자 역방향 프록시 서버입니다. 즉, nginx는 웹사이트 게시 및 처리를 위한 HTTP 서버로 사용될 수 있으며 로드 밸런싱을 위한 역방향 프록시 서버로도 사용될 수 있습니다. 하지만 참고하세요: nginx 자체는 PHP 파일을 구문 분석하지 않습니다. PHP 페이지에 대한 요청은 nginx에 의해 FastCGI 프로세스가 모니터링하는 IP 주소 및 포트로 전달되며, 이는 동적 구문 분석 서버인 php-fpm(타사 fastcgi 프로세스 관리자)에 의해 처리되고 마지막으로 처리됩니다. 결과는 nginx로 반환됩니다. 즉, nginx는 역방향 프록시 기능을 통해 동적 요청을 백엔드 php-fpm으로 전달함으로써 PHP 구문 분석 지원을 실현합니다. 이것이 PHP 동적 구문 분석을 구현하는 Nginx의 기본 원칙입니다.
먼저 몇 가지 개념을 이해해야 합니다. (nginx + php-fpm +fastcgi)
비차단 IO 및 IO 다중화
모델입니다. 하나의 스레드에서. Nginx의 프로세스는 스레드입니다. 즉, 각 프로세스에는 하나의 스레드만 있지만 이 스레드는 여러 클라이언트에 서비스를 제공할 수 있습니다. 非阻塞IO & IO复用
模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。pm.max_children
指定的是最大的进程数量,pm.max_requests
pm.max_children
은 최대 프로세스 수를 지정하고, pm.max_requests
는 각 프로세스가 처리하는 요청 수를 지정합니다. (PHP에서는 가끔 메모리 누수가 발생하므로 다시 시작해야 합니다.) PHP-FPM의 각 프로세스에는 스레드가 하나만 있지만 하나의 프로세스는 동시에 하나의 클라이언트에만 서비스를 제공할 수 있습니다. 보충: 역방향 프록시 및 순방향 프록시에 대한 지식(간략히 말하면 클라이언트에 대한 순방향 프록시 작동, 서버에 대한 역방향 프록시 작동)2.nginx PHP 동적 파싱 구현. nginx 구성 방법역방향 프록시 사용: 역방향 프록시, 즉 "서버에 대한 프록시 역할을 합니다"는 주로 다음에서 사용됩니다. 서버 클러스터의 분산 배포는 서버 정보를 숨깁니다.
정방향 프록시 사용:
( 1) 원래 액세스할 수 없었던 리소스에 액세스 , Google과 같은
(2) 리소스에 대한 액세스 속도를 높이기 위해 캐싱을 수행할 수 있습니다. . 사용자 정보 숨기기)(1) 인트라넷의 보안을 보장하기 위해 일반적으로 역방향 프록시를 공용 네트워크 액세스 주소로 사용하고 웹 서버는 인트라넷입니다. 역방향 프록시 서버를 사용하여 로드를 최적화합니다. 웹사이트
(nginx.conf)nginx.conf 구성 및 기본 구성 구문은 다음과 같습니다. 여기서 분석할 다른 기사에 설명되어 있습니다. PHP 구성에 사용되는 여러 구문에 대한 간략한 소개:
try_files $uri $uri/ /index.php$is_args$args : (https://blog.51cto.com/ 13930997/2311716,,, Nginx try_files 함정 --- 구성 예 如上配置,当一个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 중국어 웹사이트의 기타 관련 기사를 참조하세요!