CentOS 7从零开始安装Nginx + PHP

Posted Rudon滨海渔村

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CentOS 7从零开始安装Nginx + PHP相关的知识,希望对你有一定的参考价值。

了解概念

nginx fastcgi php-fpm的关系梳理 - talk_is_cheap - 博客园CGI(Common Gateway Interface)CGI全称是“公共网关接口”(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行“交谈”的一种工具https://www.cnblogs.com/smallrookie/p/5634054.html

安装Nginx

## 更新yum
sudo yum update
sudo yum autoremove apache
sudo yum autoremove apache2
sudo yum autoremove apache-server

## nginx源码编译需要gcc支持
sudo yum -y install gcc
gcc -v

## 依赖包:nginx 的 http 模块使用 pcre 来解析正则表达式
## 依赖包:nginx 使用zlib对http包的内容进行gzip
## 依赖包:使用openssl开启https支持
sudo yum -y install pcre pcre-devel
sudo yum -y install zlib zlib-devel
sudo yum -y install openssl openssl-devel

## 安装wget工具
sudo yum -y install wget

## 接下来,要访问nginx官网 https://nginx.org/en/download.html
## 找到稳定版Stable version的	类似nginx-1.20.1的链接,复制好
## 例如 https://nginx.org/download/nginx-1.20.1.tar.gz
mkdir tmp
cd tmp
## 这里要修改为最新的下载链接
wget https://nginx.org/download/nginx-1.20.1.tar.gz
tar -zxvf nginx-1.20.1.tar.gz 
ls
cd nginx-1.20.1/
./configure
make
sudo make install

## 安装完毕,看看nginx放在哪
whereis  nginx


## 默认的启动、停止方式
启动) sudo /usr/local/nginx/sbin/nginx
停止) sudo /usr/local/nginx/sbin/nginx -s stop

启动后再检查) curl 'http://localhost'
## 即可看到Welcome to Nginx! 开启成功!


## 推荐以下更方便的管理方式 + Nginx自启动:
sudo /usr/local/nginx/sbin/nginx -s stop
sudo touch /etc/init.d/nginx
sudo vi /etc/init.d/nginx
===== 添加以下内容(共108行) ========================================
#!/bin/bash
#
# Startup script for Nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

start() {
   [ -x $nginx ] || exit 5
   [ -f $NGINX_CONF_FILE ] || exit 6
   echo -n $"Starting $prog: "
   daemon $nginx -c $NGINX_CONF_FILE
   retval=$?
   echo
   [ $retval -eq 0 ] && touch $lockfile
   return $retval
}

stop() {
   echo -n $"Stopping $prog: "
   killproc $prog -QUIT
   retval=$?
   echo
   [ $retval -eq 0 ] && rm -f $lockfile
   return $retval
}

restart() {
   configtest || return $?
   stop
   sleep 1
   start
}

reload() {
   configtest || return $?
   echo -n $"Reloading $prog: "
   killproc $nginx -HUP
   RETVAL=$?
   echo
}

force_reload() {
   restart
}

configtest() {
 $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
   status $prog
}

rh_status_q() {
   rh_status >/dev/null 2>&1
}

case "$1" in
   start)
       rh_status_q && exit 0
       $1
       ;;
   stop)
       rh_status_q || exit 0
       $1
       ;;
   restart|configtest)
       $1
       ;;
   reload)
       rh_status_q || exit 7
       $1
       ;;
   force-reload)
       force_reload
       ;;
   status)
       rh_status
       ;;
   condrestart|try-restart)
       rh_status_q || exit 0
           ;;
   *)
       echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
       exit 2
esac
===========================================================


## 设置脚本权限
sudo chmod 755 /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx

## 设置系统服务
sudo chkconfig --add nginx
sudo chkconfig nginx on

## 方便的nginx管理命令
sudo service nginx start
sudo service nginx stop
sudo service nginx status

## 再次检查是否ok
sudo service nginx start
curl 'http://localhost'
## 即可看到Welcome to Nginx!


感谢 Nginx启动脚本/etc/init.d/nginx_weixin_34144848的博客-CSDN博客

配置Nginx

cd /usr/local/nginx/conf/
sudo cp -p nginx.conf nginx.conf.origin-backup

## 配置nginx虚拟机列表
sudo vi nginx.conf

====== 在http{}里面为不同的网站添加不同的server ========
server {
  listen 80;
  server_name zzzzz.com;
  access_log  /var/log/nginx/access/zzzzz.com.log;
  location / {
    root /var/www/sites/zzzzz.com/;
    index index.php index.html index.htm;
  }
}
=====================================================

sudo mkdir -p /var/log/nginx/access/
sudo touch /var/log/nginx/access/zzzzz.com.log

## 重启nginx
sudo service nginx restart

## 修改HOSTS
sudo vi /etc/hosts
========= 把zzzzz.com追加到"127.0.0.1"那行 ============
127.0.0.1   localhost localhost.localdomain zzzzz.com
======================================================

## 测试内容
sudo mkdir -p /var/www/sites/zzzzz.com/
sudo vi /var/www/sites/zzzzz.com/index.html
## 随便插入点内容
## 访问浏览器,检查zzzzz.com是否可用

安装配置FastCGI

感谢 centos7下的基于nginx的fastcgi环境搭建及样例测试_chuanglan的专栏-CSDN博客_centos7 fastcgi1. 下载nginx安装包wgethttp://nginx.org/download/nginx-1.11.12.tar.gz2.解压,gunzipnginx-1.11.12.tar.gztar -xfnginx-1.11.12.tar.gz3.进入nginx-1.11.12文件夹cd nginx-1.11.124. 执行命令 ./configurehttps://blog.csdn.net/chuanglan/article/details/69063624

cd ~
mkdir tmp
cd tmp/

## 部署fastcgi
## 1. 安装fastcgi进程管理器spawn-cgi
wget http://good-good-study.rudon.cn/download/spawn-fcgi-1.6.3.tar.bz2
tar -jxf spawn-fcgi-1.6.3.tar.bz2
cd spawn-fcgi-1.6.3
./configure 
make
sudo make install
spawn-fcgi -v 
## 进行检测是否安装成功

## 2. 安装fcgi库
wget http://good-good-study.rudon.cn/download/fcgi-2.4.0.tar.gz
tar -xf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
./configure
make
sudo make install


## 查看9000端口(FastCGI、php-npm)
sudo netstat -anp | grep 9000

题外话:lighttpd.net上面找不到spawn-fcgi下载链接了

安装PHP

默认的yum -y install php会安装老版本的php5,需要用以下命令


## 参考 https://www.jianshu.com/p/1e23aba0a164

## 清空
php -v
sudo yum -y remove php*

## 设置php的源
## Remi 软件源:主要提供最新版的 PHP 软件包和其他一些 PHP 扩展工具包,它是针对 Fedora 和 RHEL 系分支变体 (包括:RHEL、CentOS、Oracle Linux 等等) 要安装 PHP,推荐使用 Remi 软件源。Remi 对 PHP 的支持和更新都很积极,可以在第一时间获得新版本的支持。
sudo yum install epel-release -y
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm



## 查看有什么版本可用
yum list php*
yum list php* | grep php7

## 目标PHP 7.4
sudo yum --enablerepo=remi-php74 -y install php php-fpm


## ======= 自动安装的依赖 ========
## Dependencies Resolved
##--- Installing:
## php                         x86_64                 7.4.25-1.el7.remi
## php-fpm                     x86_64                 7.4.25-1.el7.remi
##--- Installing for dependencies:
## apr                         x86_64                 1.4.8-7.el7      
## apr-util                    x86_64                 1.5.2-6.el7      
## httpd                       x86_64                 2.4.6-97.el7.centos.1
## httpd-tools                 x86_64                 2.4.6-97.el7.centos.1
## libsodium                   x86_64                 1.0.18-1.el7     
## mailcap                     noarch                 2.1.41-2.el7     
## php-cli                     x86_64                 7.4.25-1.el7.remi
## php-common                  x86_64                 7.4.25-1.el7.remi
## php-json                    x86_64                 7.4.25-1.el7.remi
## php-sodium                  x86_64                 7.4.25-1.el7.remi
## 

php -v
## PHP 7.4.25 (cli) (built: Oct 19 2021 15:18:10) ( NTS )
## Copyright (c) The PHP Group
## Zend Engine v3.4.0, Copyright (c) Zend Technologies

激活php-fpm(大坑)

[rudon@localhost ~]$ 
[rudon@localhost ~]$ sudo netstat -anp | grep 9000
[rudon@localhost ~]$ 
[rudon@localhost ~]$ sudo systemctl status php-fpm.service
[sudo] password for rudon: 
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[rudon@localhost ~]$ locate php-fpm
locate: can not stat () `/var/lib/mlocate/mlocate.db`: No such file or directory
[rudon@localhost ~]$ 
[rudon@localhost ~]$ sudo updatedb
[rudon@localhost ~]$ locate php-fpm
/etc/php-fpm.conf
/etc/php-fpm.d
/etc/logrotate.d/php-fpm
/etc/php-fpm.d/www.conf
/etc/sysconfig/php-fpm
/etc/systemd/system/php-fpm.service.d
/usr/lib/systemd/system/php-fpm.service
/usr/sbin/php-fpm
/usr/share/doc/php-fpm-7.4.25
/usr/share/doc/php-fpm-7.4.25/README
/usr/share/doc/php-fpm-7.4.25/httpd-php.conf
/usr/share/doc/php-fpm-7.4.25/nginx-fpm.conf
/usr/share/doc/php-fpm-7.4.25/nginx-php.conf
/usr/share/doc/php-fpm-7.4.25/php-fpm.conf.default
/usr/share/doc/php-fpm-7.4.25/www.conf.default
/usr/share/licenses/php-fpm-7.4.25
/usr/share/licenses/php-fpm-7.4.25/fpm_LICENSE
/usr/share/man/man8/php-fpm.8.gz
/var/log/php-fpm
[rudon@localhost ~]$ 
[rudon@localhost ~]$ 
[rudon@localhost ~]$ sudo /usr/sbin/php-fpm
[04-Nov-2021 08:12:06] ERROR: Unable to create the PID file (/run/php-fpm/php-fpm.pid).: No such file or directory (2)
[04-Nov-2021 08:12:06] ERROR: FPM initialization failed
[rudon@localhost ~]$ 
[rudon@localhost ~]$ 
[rudon@localhost ~]$ sudo touch /run/php-fpm/php-fpm.pid
touch: cannot touch ‘/run/php-fpm/php-fpm.pid’: No such file or directory
[rudon@localhost ~]$ 
[rudon@localhost ~]$ ll /run/php-fpm/php-fpm.pid
ls: cannot access /run/php-fpm/php-fpm.pid: No such file or directory
[rudon@localhost ~]$ ll /run/php-fpm/
ls: cannot access /run/php-fpm/: No such file or directory
[rudon@localhost ~]$ ll /run/
total 56
drwxr-xr-x.  2 root           root            100 Nov  4 08:09 abrt
-rw-------.  1 root           root             11 Nov  4 08:09 alsactl.pid
.....
.....
[rudon@localhost ~]$ sudo mkdir -p /run/php-fpm/
[rudon@localhost ~]$ 
[rudon@localhost ~]$ sudo /usr/sbin/php-fpm
[rudon@localhost ~]$ 
[rudon@localhost ~]$ sudo systemctl status php-fpm.service
[sudo] password for rudon: 
● php-fpm.service - The PHP FastCGI Process Manager
   Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[rudon@localhost ~]$ 
[rudon@localhost ~]$ 
[rudon@localhost ~]$ sudo netstat -anp | grep 9000
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      13772/php-fpm: mast 
[rudon@localhost ~]$ 



没有报错就先这样吧。

配置PHP + Nginx

php -r 'phpinfo();' | grep 'php.ini'
## 查看php.ini的位置

sudo vi /etc/php.ini
## 该修改的修改,例如短标签的支持,内存大小等

## 开始修改nginx配置,使其支持php
cd /usr/local/nginx/conf/
sudo vi nginx.conf

## 每个站点的server{}配置,都要增加一段 location ~ \\.php$ {}设置,如下:
================  例子 ================
server {
  listen 80;
  server_name zzzzz.com;
  access_log  /var/log/nginx/access/zzzzz.com.log;
  location / {
    root /var/www/sites/zzzzz.com/;
    index index.php index.html index.htm;
  }
  location ~ \\.php$ {
    root           /var/www/sites/zzzzz.com/;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}
=======================================

## 修改完毕,保存,重启nginx
sudo service nginx restart


## 访问 http://zzzzz.com/index.php(其内容为<?php phpinfo(); )
## OK!
sudo mkdir -p /var/www/sites/zzzzz.com/
sudo vi /var/www/sites/zzzzz.com/index.php
============
<?php
    phpinfo();
============
curl 'http://zzzzz.com/index.php'
## OK~


## 如果错误,请看nginx错误日志
tail -f /usr/local/nginx/logs/error.log








特别鸣谢

https://segmentfault.com/a/1190000017789890https://segmentfault.com/a/1190000017789890

 

以上是关于CentOS 7从零开始安装Nginx + PHP的主要内容,如果未能解决你的问题,请参考以下文章

转载:Centos7 从零编译Nginx+PHP+MySql 序言 一

转载:Centos7 从零编译Nginx+PHP+MySql 二

centos 7 安装nginx,mysql以及php的过程

如何在CentOS 7中使用Nginx和PHP7-FPM安装Nextcloud

如何在CentOS 7中使用Nginx和PHP7-FPM安装Nextcloud

[原创]Centos7 从零编译配置PHP