FreeBSD为Nginx安装带有FPM的PHP 7.2
如何在FreeBSD操作系统上为Nginx Web服务器安装FPM安装PHP 7.2?
说明:PHP是PHP的缩写:超文本预处理器。
它是一种开源通用脚本语言。
PHP可方便地进行Web开发和运行流行的软件,例如MediaWiki,WordPress等。
PHP易于学习,并允许您动态编写动态生成的网页。
该页面显示了如何在FreeBSD v11.x Unix机器上以及Nginx Web服务器上安装PHP 7.2。
FreeBSD为Nginx安装带有FPM的PHP 7.2
在FreeBSD上安装PHP 7.2的过程如下:
- 更新FreeBSD端口树
- 安装PHP 7.2二进制软件包:pkg install nginx
- 安装Nginx二进制包
- 配置Nginx和PHP 7.2
- 在FreeBSD上打开PHP-fpm服务
- 测试设置
让我们详细了解所有步骤。
1.更新FreeBSD端口树
您必须使用portsnap命令
# portsnap fetch update
2.在FreeBSD上安装PHP 7.2
您可以使用端口或二进制软件包方法安装PHP 7.2。
使用以下任何一种方法。
端口方法
# cd /usr/ports/lang/php72/ # make install clean
二进制打包方法
运行pkg命令进行安装:
# pkg install php72
3.在FreeBSD上安装PHP 7.2扩展
同样,可以使用ports或pkg方法安装PHP扩展。
使用以下任何一种方法。
要安装端口,请运行以下命令并选择所需的扩展名:
# cd /usr/ports/lang/php72-extensions/ && make install clean
或添加二进制包:
# pkg install php72-extensions
另一个选择是根据您的Web应用程序或软件项目需求安装单个PHP扩展。
可以使用pkg命令和grep命令/egrep命令搜索PHP 7.2扩展
# pkg search php72 | grep gd # pkg search php72 | egrep -i --color 'gd|mysqli|openssl' # pkg search php72 | egrep --color -i -- '-(gd|mysqli|openssl|memcached|opcache|json|mbstring|imagick|xml|zip|composer|igbinary)-'
只需安装:
# pkg install php72-composer php72-gd php72-json ### OR ### # pkg install php72-composer-1.6.5 php72-gd-7.2.10 php72-json-7.2.10 php72-mbstring-7.2.10 php72-mysqli-7.2.10 php72-opcache-7.2.10 php72-openssl-7.2.10 php72-pecl-imagick-3.4.3_2 php72-pecl-memcached-3.0.4 php72-xml-7.2.10 php72-zip-7.2.10 php72-pecl-igbinary-2.0.7
4.配置PHP-FPM
编辑文件/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/php72-fpm.sock
取消注释以下行:
listen.owner = www listen.group = www listen.mode = 0660
保存并关闭文件。
启用php-fpm服务:sysrc php_fpm_enable = YES在FreeBSD服务器上启动,停止,重新启动php-fpm服务的命令:
# service php-fpm stop # service php-fpm start # service php-fpm restart # service php-fpm status
关于PHP 7配置的注意事项
您需要使用php命令安装php.ini文件:
# cp -v /usr/local/etc/php.ini-production /usr/local/etc/php.ini `/usr/local/etc/php.ini-production -> /usr/local/etc/php.ini`
接下来,我们将保护PHP并对其进行自定义:
# vi /usr/local/etc/php/99-custom.ini
添加以下配置:
display_errors=Off safe_mode=Off safe_mode_exec_dir= safe_mode_allowed_env_vars=PHP_ expose_php=Off log_errors=On 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
5.配置Nginx以使用PHP 7.2(PHP-FPM)
最后一步是通过FCGI协议将Nginx连接到PHP-FPM服务。
如下编辑您的虚拟域或nginx.conf文件:
# cd /usr/local/etc/nginx # vi nginx.conf
或者
# vi vdomains/http.192.168.2.31.conf
这是一个更新的示例配置文件:
server { server_name 192.168.2.31; # use domain name if you have here access_log /var/log/nginx/192.168.2.31.access.log; error_log /var/log/nginx/192.168.2.31.error.log; root /wwwwiki; # php config let nginx talk to php socket location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } # Mitigate https://httpoxy.org/ vulnerabilities fastcgi_param HTTP_PROXY ""; fastcgi_pass unix:/var/run/php72-fpm.sock; fastcgi_index index.php; # include the fastcgi_param setting include fastcgi_params; # SCRIPT_FILENAME parameter is used for PHP FPM determining # the script name. 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服务器根目录)上设置严格的文件许可权:
# chown -R wwwwiki:wwwwiki /wwwwiki/ # chmod -R 0555 /wwwwiki/
打开浏览器并对其进行测试:
http://192.168.2.31/test.php http://your-domain-name-here/test.php
在那里,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