NginxLNMP动态网站

  1. 安装LNMP架构
  2. 配置LNMP架构
  3. 检测LNMP架构
  4. Nginx与PHP原理
  5. PHP配置⽂件优化
    • php-ini优化
    • php-fpm优化

配置LNMP架构

  1. 配置 Nginx 实现动态请求转发⾄ php
1
2
3
4
5
6
7
8
9
10
11
12
server {
server_name _;
listen 80;
root /soft/code;
index index.php index.html;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /soft/code$fastcgi_script_name;
include fastcgi_params;
}
}
  1. 添加 php 测试⻚⾯
1
2
3
<?php
phpinfo();
?>

使⽤mysqli模块测试连接mysql

1
cat	/soft/code/mysqli.php
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$servername = "localhost";
$username = "root";
$password = "";

// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "连接成功";
?>

使⽤pdo模块测试连接mysql

1
cat	/soft/code/mysqlpdo.php
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$servername = "localhost";
$username = "root";
$password = "";
try {
$conn = new PDO("mysql:host=$servername;dbname=test", $username, $password);
echo "连接成功";
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
  1. 检测LNMP架构
  • 访问47.104.250169/info.php
  • 访问47.104.250169/mysqli.php
  • 访问47.104.250169/mysqli.php

Nginx与PHP原理

1575796929911

nginx fastcgi 访问 php

  1. ⽤户发送http请求报⽂给nginx服务器
  2. nginx会根据⽂件url和后缀来判断请求
  3. 如果请求的是静态内容,nginx会将结果直接返回给⽤户
  4. 如果请求的是动态内容,nginx会将请求交给fastcgi客户端,通过fastcgi_pass将这个请求发送给php-fpm
  5. php-fpm收到请求后会通过本地监听的socket交给wrapper
  6. wrapper收到请求会⽣成新的线程调⽤php动态程序解析服务器
  7. 如果⽤户请求的是博⽂、或者内容、PHP会请求MySQL查询结果
  8. 如果⽤户请求的是图⽚、附件、PHP会请求nfs存储查询结果
  9. php会将查询到的结果交给Nginx
  10. nginx会⽣成⼀个响应报⽂返还给⽤户

PHP配置⽂件优化

php-ini优化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 打开php的安全模式,控制php执⾏危险函数, 默认是Off,改为On
sql.safe_mode = Off
# 关闭php头部信息, 隐藏版本号, 默认是On,该为Off
expose_php = On
# 错误信息输出控制
display_error = Off
error_reporting = E_WARNING & E_ERROR
# 记录错误⽇志⾄后台, ⽅便追溯
log_errors = On
error_log = /var/log/php_error.log
# 每个脚本时间最⼤内存
memory_limit = 128M
# 上传⽂件最⼤许可,默认2M, 建议调整为16,32M
upload_max_filesize = 2M
# 禁⽌远程执⾏phpshell,默认On, 建议Off
allow_url_fopen = On
# 时区调整,默认PRC, 建议调整为Asia/Shanghai
date.timezone = PRC
# 整体优化后配置⽂件
sql.safe_mode = Off
expose_php = Off
display_error = Off
error_reporting = E_WARNING & E_ERROR
log_errors = On
error_log = /var/log/php_error.log
upload_max_filesize = 50M
allow_url_fopen = Off
date.timezone = Asia/Shanghai

php-fpm优化

PHP-FPM配置⽂件 4核16G、8核16G

1
cat /etc/php-fpm.d/www.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[global]
pid = /var/run/php-fpm.pid
#php-fpm程序错误⽇志
error_log = /var/log/php/php-fpm.log
log_level = warning
rlimit_files = 655350
events.mechanism = epoll
[www]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.owner = www
listen.group = www
listen.mode = 0660
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 512
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.process_idle_timeout = 15s;
pm.max_requests = 2048
#php-www模块错误⽇志
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/php/php-www.log
php_admin_flag[log_errors] = on
#php慢查询⽇志
request_slowlog_timeout = 5s
slowlog = /var/log/php/php-slow.log

PHP5-FPM配置详解释

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[global]
#pid设置, 记录程序启动后pid
pid = /var/run/php-fpm.pid
#php-fpm程序启动错误⽇志路径
error_log = /soft/log/php/php-fpm_error.log
# 错误级别. 可⽤级别为: alert (必须⽴即处理),error(错误情况), warning(警告情况),notice(⼀般重要信息), debug(调试信息). 默认: notice.
log_level = warning
#设置⽂件打开描述符的rlimit限制.
rlimit_files = 65535
events.mechanism = epoll
#启动进程的⽤户和组
[www]
user = www
group = www
# fpm监听端⼝
listen = 127.0.0.1:9000
# unix socket设置选项,如果使⽤tcp⽅式访问,这⾥注释即可。
listen.owner = www
listen.group = www
# 允许访问FastCGI进程的IP,any不限制
listen.allowed_clients = 127.0.0.1
# pm设置动态调度
pm = dynamic
# 同⼀时刻最⼤的php-fpm⼦进程数量
pm.max_children = 200
# 动态⽅式下的起始php-fpm进程数量
pm.start_servers = 20
# 动态⽅式下服务器空闲时最⼩php-fpm进程数量
pm.min_spare_servers = 10
# 动态⽅式下服务器空闲时最⼤php-fpm进程数量
pm.max_spare_servers = 30
# 最⼤请求
pm.max_requests = 1024
pm.process_idle_timeout = 15s;
# FPM状态⻚⾯,⽤于监控php-fpm状态使⽤
pm.status_path = /status
# 错误⽇志
php_flag[display_errors] = off
php_admin_value[error_log] = /soft/log/php/php-www_error.log
php_admin_flag[log_errors] = on
# 配置php慢查询, 以及慢查询记录⽇志位置
request_slowlog_timeout = 5s
slowlog = /soft/log/php/php-slow.log