简介:Nginx+php-fpm+MySQL配置详解
在讲解之前请大家安装Nginx与PHP,还没有安装的可以看我之前的安装教程。
PHP5.3.3开始已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置。
Nginx收到客户端的HTTP请求后将请求转发到php-fpm,php-fpm解析请求、执行PHP代码并将执行结果返回给Nginx,最后Nginx再将结果返回给客户端。这就是整个HTTP请求执行流程。
下面我们来看看php-fpm的启动、关闭、重启:
# 启动php-fpm
/usr/local/php/sbin/php-fpm
#查看php-fpm进程号
ps -aux|grep php-fpm
#关闭php-fpm
kill -INT php-fpm主进程pid
#重启php-fpm
kill -USR2 php-fpm主进程pid
在启动的过程如果发现php-fpm.conf相关错误,可以进入/usr/local/php/etc目录下,将php-fpm.conf.default 拷贝一份并改名为 php-fpm.conf。命令如下:
cp php-fpm.conf.default php-fpm.conf
在php8之后,php-fpm.conf文件末尾加载了php-fpm.d目录下的.conf结尾的文件,所以还需要进入php-fpm.d目录下将www.conf.default拷贝并重命名为www.conf。命令如下:
cp www.conf.default www.conf
php-fpm的启动和关闭比较复杂,我们可以自己配置systemctl命令来启动、关闭及重启等操作。
在/usr/lib/systemd/system 目录下新建一个 php-fpm.service 文件,添加如下内容
[Unit]
Description=The PHP FastCGI Process Manager
Documentation=http://php.net/docs.php
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
LimitNOFILE=1000000
LimitNPROC=1000000
LimitCORE=1000000
[Install]
WantedBy=multi-user.target
使用 systemctl daemon-reload 命令使其生效,现在可以使用systemctl启动php-fpm了。
现在可以配置Nginx,将HTTP请求转发到php-fpm中了
server {
listen 80;
server_name test.cn;
root /data/www/test;
# 静态文件开启http缓存及压缩
location ~ .*\.(html|js|css|woff){
access_log off;
expires 168h;
gzip on;
gzip_comp_level 5;
gzip_types text/plain application/javascript text/css font/woff;
}
#图片开启http缓存及防盗链
location ~ .*\.(png|jpg|jpeg|gif){
access_log off;
valid_referers *.test.cn servicewechat.com none;
if ($invalid_referer) {
return 403;
}
expires 168h;
}
location / {
index index.html index.htm index.php;
#找不到文件时转发index.php及php-fpm
if ( !-e $request_filename ) {
rewrite ^/(.*)$ /index.php/$1 last;
break;
}
}
# 将PHP请求的请求转发给php-fpm
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
}
到此nginx与php-fpm之间的转发通信配置就此完成。
php-fpm.conf有很多配置参数,例如:php-fpm监听的端口号、php-fpm启动的worker进程数、php-fpm错误日志文件目录配置及每个进程处理的请求数等。worker进程数一定程度上可以优化请求的并发问题
nginx配置yii框架路由:
server {
listen 80;
root "D:/www/blog/public";
location / {
index index.php index.html error/index.html;
autoindex off;
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php(.*)$ {
fastcgi_pass 127.0.0.1:9003;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}
详细的配置优化问题,日后有时间会单独写一遍文章说明,想第一时间获取最新文章的可以关注公众号