Nginx+Apache+PHP 服务安装

一. 安装 Nginx

yum install -y nginx
systemctl enable nginx
systemctl start nginx
systemctl stop nginx
systemctl restart nginx

nginx.conf 文件中设置允许发布内容的最大许可(即上传文件大小限制)

client_max_body_size 2M

二. 安装 Apache

yum install -y httpd
systemctl enable httpd
systemctl start httpd
systemctl stop httpd
systemctl restart httpd

httpd.conf 中设置设置文件上传限制:

<IfModule mod_fcgid.c>
MaxRequestLen 10485760 # 10M = 10 * 1024 * 1024
LimitRequestBody 10485760
</IfModule>

三. 安装 PHP

查看当前已安装的 PHP 包,如果存在则先卸载:

yum list installed | grep php
yum remove php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-fpm.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysqlnd.x86_64 php56w-pdo.x86_64 php56w-pear.noarch php56w-pecl-memcache.x86_64 php56w-process.x86_64 php56w-xml.x86_64

查看可安装的 PHP 包(以 PHP7 为例),如果没有则先更换rpm源:

yum list php7*
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

安装 PHP7 及其扩展:

yum install php72w-fpm.x86_64 php72w-common.x86_64 php72w-gd.x86_64 php72w-mbstring.x86_64 php72w-pdo.x86_64 php72w-mysqlnd.x86_64 php72w-pecl-memcached.x86_64
# 单独卸载某php扩展
yum remove php72w-mysql.x86_64
# 单独安装某php扩展(mysqlnd是mysql的原生驱动,官方推荐)
yum install php72w-mysqlnd.x86_64
# 查看已安装的php版本
php -v
# 查看已安装的php扩展
php -m

php.ini 文件中可能有用的配置

max_execution_time = 150 # 每个脚本运行最长时间(秒)
max_input_time = 60 # 每个脚本可以消耗的时间(秒)
memory_limit = 128M # 脚本最大消耗内存
post_max_size = 8M # 表单提交的最大数据
upload_max_filesize = 10M # 上传文件的最大许可
always_populate_raw_post_data = -1
extension = php_openssl.dll

设置开机启动及日常启停

systemctl enable php-fpm
systemctl start php-fpm
systemctl stop php-fpm
systemctl restart php-fpm

1. 修改启动权限

在某些特殊情况下,例如 PHP 代码调用较高权限的 Shell 命令时,需要以 root 身份启动 php-fpm,打开配置文件:

vi /etc/php-fpm.d/www.conf

将以下内容中的 apache 改为 root

user = apache
group = apache

由于 php 默认不允许以 root 身份运行,此时重启 php-fpm 应该会报错,所以还需修改启动脚本:

vi /usr/lib/systemd/system/php-fpm.service

将其中 ExecStart 行增加 -R 参数,如下:

ExecStart=/usr/sbin/php-fpm --nodaemonize -R --fpm-config /etc/php-fpm.conf

2. 与 Nginx 集成

查看 php-fpm 默认配置cat /etc/php-fpm.d/www.conf | grep -i 'listen =',若返回结果为listen = 127.0.0.1:9000,表明监听端口为9000,Nginx配置中的PHP解析请求转发到 127.0.0.0:9000 处理即可,通常无需特别处理。

3. 多个 php-fpm 主进程

找到php-fpm.d/www.conf,复制一份改名为例如api.conf,将其中[www]listen = 127.0.0.1:9000改为[api]listen = 127.0.0.1:9001,配置 nginx 中 proxy_pass 的端口为9001,重启 php-fpm 和 nginx。

在 Windows 下,同一 Nginx 的不同 Server 之间通过 curl 请求时会阻塞超时,原因是各 Server 共享 php-fpm 的 9000 端口,解决方法就是上述开启新端口供 Server 使用,但 CentOS 下不会出现这种情况,所以无需启动多个端口。