FreeBSD 安装PHP7.4 和 Nginx
FreeBSD 为 Nginx 安装带有 FPM 的 PHP 7.4
在 FreeBSD 上安装 PHP 7.4 的过程如下:
- 更新 FreeBSD
您必须使用portsnap 命令
portsnap fetch update
- 在 FreeBSD 上安装 PHP 7.4
您可以使用编译或二进制包方法安装 PHP 7.4。
使用以下任何一种方法。
端口方法
1
2
# cd /usr/ports/lang/php74/
# make install clean
在 FreeBSD 上安装 PHP 7.4
二进制打包方式 运行 pkg 命令来安装它:
# pkg install php74
FreeBSD 使用 pkg 命令为 Nginx 安装带有 FPM 的 PHP 7.4
出于验证目的,请检查 PHP version,键入:
1
2
php -v
php --version
- 在 FreeBSD 上安装 PHP 7.4 扩展 可以再次使用ports 或pkg 方法安装PHP 扩展。使用以下任一方式。
要编译安装,请运行以下命令并选择所需的扩展:
cd /usr/ports/lang/php74-extensions/ && make install clean
或添加二进制包:
pkg install php74-extensions
如何在 FreeBSD Unix 机器上安装带有扩展的 PHP 7.4
另一种选择是根据您的 Web 应用程序或软件项目需要安装单独的 PHP 扩展。
可以使用 pkg 命令和grep 命令/ egrep 命令搜索 PHP 7.4 扩展
1
2
3
# pkg search php74 | grep gd
# pkg search php74 | egrep -i --color 'gd|mysqli|openssl'
# pkg search php74 | egrep --color -i -- '-(gd|mysqli|openssl|memcached|opcache|json|mbstring|imagick|xml|zip|composer|igbinary)-'
FreeBSD 安装所需的 PHP 扩展
只需安装它:
1
2
3
# pkg install php74-composer php74-gd php74-json
### OR ###
# pkg install php74-composer-1.6.5 php74-gd-7.4.10 php74-json-7.4.10 php74-mbstring-7.4.10 php74-mysqli-7.4.10 php74-opcache-7.4.10 php74-openssl-7.4.10 php74-pecl-imagick-3.4.3_2 php74-pecl-memcached-3.0.4 php74-xml-7.4.10 php74-zip-7.4.10 php74-pecl-igbinary-2.0.7
4.配置PHP-FPM
1
2
编辑文件 /usr/local/etc/php-fpm.d/www.conf
# vi /usr/local/etc/php-fpm.d/www.conf
listen = 127.0.0.1:9000
更新如下:
listen = /var/run/php74-fpm.sock
取消注释以下行: 保存并关闭文件。
启用 php-fpm 服务:
# sysrc php_fpm_enable=YES在 FreeBSD
服务器上启动、停止、重启 php-fpm服务的命令:
1
2
3
4
5
6
7
8
9
10
11
12
listen.owner = www
listen.group = www
listen.mode = 0660
# service php-fpm stop
# service php-fpm start
# service php-fpm restart
# service php-fpm status
关于 PHP 7 配置的说明 您需要使用 php 命令安装 php.ini 文件: 接下来,我们将保护 PHP 并对其进行自定义:
添加以下配置:
1
2
3
4
5
# cp -v /usr/local/etc/php.ini-production /usr/local/etc/php.ini
/usr/local/etc/php.ini-production -> /usr/local/etc/php.ini
# vi /usr/local/etc/php/99-custom.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
display_errors =off
safe_mode =off
safe_mode_exec_dir之=
safe_mode_allowed_env_vars = PHP_
expose_php =off
log_errors =off
error_log = /var/log/nginx/php.scripts.log
register_globals =off
cgi.force_redirect = 0
file_uploads =on
了allow_url_fopen =off
sql.safe_mode =off
disable_functions = show_source, system, shell_exec, passthru, proc_open, proc_nice, exec
max_execution_time= 60
memory_limit = 60M
upload_max_filesize = 2M
post_max_size = 2M
cgi.fix_pathinfo = 0
sendmail_path = /usr/sbin/sendmail [email protected] -t
保存并关闭文件。在 FreeBSD 上重启 PHP:
# service php-fpm restart
最后一步是通过 FCGI 协议将 Nginx 连接到 PHP-FPM 服务。
按如下方式编辑您的虚拟域或 nginx.conf 文件: 或 这是更新的示例配置文件:
1
2
3
4
5
# cd /usr/local/etc/nginx
# vi nginx.conf
# vi vdomains/http.192.168.2.31.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
server {
server_name 192.168.2.31; # 使用域名如果你这里有
access_log /var/log/nginx/192.168.2.31.access.log;
error_log /var/log/nginx/192.168.2.31.error.log;
根 /wwwwiki;
# php 配置让 nginx 与 php 套接字
location ~ [ ^/ ] \.php ( /|$ ) {
fastcgi_split_path_info ^ ( .+?\.php ) ( /.* ) $;
if ( !-f $document_root$fastcgi_script_name ) {
返回404 ;
}
# 缓解 https://httpoxy.org/ 漏洞
fastcgi_param HTTP_PROXY "" ;
fastcgi_pass unix:/var/run/php74-fpm.sock;
fastcgi_index index.php;
# 包括 fastcgi_param 设置
include fastcgi_params;
# SCRIPT_FILENAME 参数用于 PHP FPM 确定
# 脚本名称。
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
```
重新加载或重启 Nginx 服务器:
`# service nginx reload`
6. 测试设置
在 /wwwwiki/ 中创建一个名为 test.php 的 PHP 脚本
`# vi /wwwwiki/test.php`
附加以下代码,使用phpinfo显示有关 PHP 配置的信息:
<?php
phpinfo();
?>
保存并关闭文件。在 DocumentRoot(Web 服务器根)上设置严格的文件权限:启动 Web 浏览器并对其进行测试:
http://192.168.2.31/test.php
http://your-domain-name-here/test.php
在 FreeBSD 上运行的 Nginx PHP-7.4-fpm
并且 PHP 按预期工作,Nginx 正在通过 Unix 套接字与 PHP-FPM 对话。
如何验证 PHP-fpm 正在运行
在 FreeBSD 上使用sockstat 命令列出正在运行的服务、打开的端口和 unix 套接字:
`sockstat -46lu | egrep --color 'www|nginx|php'`
如果在运行 PHP 时遇到任何问题,请检查日志文件:
`ls -l /var/log/nginx/`
` tail -f /var/log/nginx/192.168.2.31.error.log`