nginx是一款高性能的Web服务器,同时也是一款流行的反向代理服务器。在实际应用中,nginx经常被用来扮演Web应用程序的中介,将客户端请求转发到后端服务器或负载均衡器。对于PHP开发人员而言,nginx能够快速而稳定地转发来自Web应用程序的请求,这使得Web应用程序能够更加快速、可靠地响应客户端请求。
当我们使用nginx作为Web应用程序转发器时,我们需要保证nginx能够正确转发请求到后端PHP服务器。幸运的是,nginx能够很容易地识别PHP响应,并使用适当的配置将这些响应转发到应用程序的相应处理程序中。以下是一些关于nginx转发PHP请求的最佳实践:
一、站点配置
站点配置是nginx转发PHP请求的开始。假设您要将客户端请求发送到站点根目录的index.php脚本,您可以使用以下内容来配置站点:
```
server {
listen 80;
listen [::]:80;
root /var/www/html;
index index.php;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
}
}
```
在此配置中,location / 段用于指定需要转发到PHP解释器的CLI脚本文件的位置。location ~ \.php$ 部分是正则表达式匹配,用于指示任何以.php结尾的请求都应该被转发到PHP解释器。
二、FastCGI缓存
FastCGI缓存是nginx转发PHP请求的重要组成部分。它可以显著减少响应时间,并减轻后端服务器的负载。开启FastCGI缓存的方法非常简单。在您的站点配置中,在location段中添加以下配置:
```
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
server {
# your normal server configuration
location ~ \.php$ {
# cache setting
fastcgi_cache_bypass $http_pragma;
fastcgi_cache_revalidate on;
fastcgi_cache_valid 200 60m;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_cache my_cache;
fastcgi_cache_min_uses 1;
fastcgi_cache_lock on;
fastcgi_cache_use_stale update;
}
}
```
上面的代码块描述了如何设置FastCGI缓存。建立文件缓存并在基于uri的缓存指令中使用keys_zone指定名称及其大小,定义了缓存路径和级别以及其他基本设置。注意,不要将/fastcgi_cache_path指令设置在相关指令之后,否则您可能会遇到“共享密钥XXX已经创建”之类的错误。
三、禁用不必要的PHP模块
禁用PHP响应中未使用的模块可以减轻服务器的负载。对于大型PHP应用程序的维护,这尤其重要。在您的php.ini文件中,将不需要的扩展程序设置为disabled,即可达到此目的:
```
;extension=ldap.so
;extension=mysql.so
;extension=sqlite.so
```
建议您定期检查php.ini文件以查找未使用的扩展程序。
四、配置PHP-FPM
PHP-FPM(FastCGI Process Manager)是一个高性能的FastCGI处理程序,专门用于解释PHP脚本。在安全和性能上都非常出色。可以使用以下指令启用PHP-FPM:
```
sudo apt install php-fpm
```
可以使用以下指令重启为配置文件的更改生效:
```
sudo systemctl restart php7.0-fpm
```
配置PHP-FPM以正确设置起始孵化器数和最大孵化器数也非常重要。如果您的应用程序定期需要同时处理大量的流量,则可以对这些选项进行调整。以下是一些基本设置:
```
pm.start_servers=10
pm.min_spare_servers=5
pm.max_spare_servers=10
pm.max_children=100
```
这将启动10个php-fpm处理程序作为孵化器,并允许最多100个活跃的子进程。注意,确保您的PHP-FPM配置启用了一个适当的代理,您的站点将实际使用PHP-FPM解释器。
结论
nginx是一个出色的反向代理服务器,它可以使您的Web应用程序变得更快、更稳定。在这篇文章中,我们介绍了一些关于如何使用nginx为Web应用程序转发请求的最佳实践。如果您想确保您的Web应用程序以最快的速度响应客户端请求,则请遵循上述建议。