CentOS7下搭建Nginx+PHP7的安装配置

一、安装编译工具及库文件:

yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel

环境要求

安装nginx需要先将官网下载的源码进行编译,nginx是C语言开发,编译依赖gcc环境,如果没有gcc环境,需要安装gcc:yum install gcc-c++

zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库。

OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。

二、首先要安装 PCRE

PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要安装pcre库。

注:pcre-devel是使用pcre开发的一个二次开发库。nginx也需要此库。

1、PCRE 作用是让 Nginx 支持 Rewrite 功能。

cd /usr/local/src/   # 进入目录

下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

 

下载命令使用方法:

 

在Linux命令行下面下载文件,通过wget是比较普遍简单的,比如在CentOS7 里面也一样。
我们先来看下自己的CentOS7 系统有没有安装wget:

[root@test redis]# rpm -qa|grep wget
如果安装了会提示当前安装的版本:

wget-1.14-15.el7_4.1.x86_64

没安装的话可以通过以下命令安装:

yum install -y wget
1
安装好wget,我们要下载文件,一般是wget http://wwww.xxxxx 这种格式下载到默认的download目录。

那如果我们要下载到指定目录呢?通过 -P 参数:

命令:wget -P /保存文件的目录 文件下载地址
 

2、解压安装包:

tar -zxvf pcre-8.35.tar.gz

3、进入安装包目录

cd pcre-8.35/

4、编译安装 

./configure

make && make install

5、查看pcre版本

 pcre-config --version

三、安装 Nginx

1、下载 Nginx,下载地址:http://nginx.org/download/nginx-1.14.1.tar.gz

生产环境中建议使用Stable version(稳定版)

注意各版本的区别:Nginx官网提供了三个类型的版本

(1)Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
(2)Stable version:最新稳定版,生产环境上建议使用的版本
(3)Legacy versions:老版本的稳定版

cd /usr/local/src/

wget http://nginx.org/download/nginx-1.14.1.tar.gz

2、解压安装包:

tar -zxvf nginx-1.14.1.tar.gz

3、进入安装包目录

cd nginx-1.14.1/

4、编译安装

./configure --prefix=/usr/local/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35      # 编译源码包代码,追加--prefix参数,指定稍后源码包程序的安装路径

make      # 生成二进制安装程序

make install     # 运行二进制安装程序

5、查看nginx版本

/usr/local/webserver/nginx/sbin/nginx -v

到此,nginx安装完成。

四、Nginx 配置

创建 Nginx 运行使用的用户和组 www

groupadd www
useradd -g www www

配置nginx.conf ,将 /usr/local/webserver/nginx/conf/nginx.conf 替换为以下内容

mv nginx.conf nginx.conf-backup     # 备份nginx的配置文件

vim nginx.conf     # 新建nginx的配置文件,写入以下内容

user www www;
worker_processes 2;   # 设置值和系统CPU核心数一致,可自定义
error_log /usr/local/webserver/nginx/logs/nginx_error.log crit;  # 日志位置和日志级别
pid /usr/local/webserver/nginx/nginx.pid;
#Specifies the value for maximum file descriptors that can be opened by this process.
worker_rlimit_nofile 65535;
events
{
use epoll;
worker_connections 65535;
}
http
{
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';

#charset gb2312;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;

sendfile on;
tcp_nopush on;
keepalive_timeout 60;
tcp_nodelay on;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;

#limit_zone crawler $binary_remote_addr 10m;
# 下面是server虚拟主机的配置
server
{

listen 8000;   # 监听端口(根据自己的需求更改)
server_name localhost;   # 域名
index index.html index.htm index.php;
root /usr/local/webserver/nginx/html;   # 站点目录(也就是以后存放php文件的根目录)
location ~ .*\.(php|php5)?$
{
#fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_pass 127.0.0.1:9000;   # 需要特别注意这个配置,这里是用来连接Nginx和PHP的php-fpm服务的默认端口9000,php-fpm服务后面会安装,可以根据自己的需求更改
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico)$
{
expires 30d;
# access_log off;
}
location ~ .*\.(js|css)?$
{
expires 15d;
# access_log off;
}
access_log off;
}

}

检查配置文件nginx.conf的正确性命令:

/usr/local/webserver/nginx/sbin/nginx -t

五、启动 Nginx

Nginx 启动命令如下:

/usr/local/webserver/nginx/sbin/nginx
ps -ef | grep nginx

六、访问Nginx

从浏览器访问我们配置的站点IP,如果出现Welcome to nginx!那么nginx就安装成功了!

Nginx 其他命令

以下包含了 Nginx 常用的几个命令:

/usr/local/webserver/nginx/sbin/nginx -s reload      # 重新载入配置文件

/usr/local/webserver/nginx/sbin/nginx -s reopen     # 重启nginx

/usr/local/webserver/nginx/sbin/nginx -s stop         # 停止nginx

七、安装PHP7

(1)安装php7

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64

安装完成后键入php -v会显示出php的版本,代表php安装完成了,接着往下看。

Nginx和PHP都安装完成了,此时还得配置php-fpm服务。让nginx与php连接起来,才能使用。

(2)安装php-fpm

yum install php70w-fpm php70w-opcache

打开php-fpm配置文件

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

修改以下内容(这里查找配置项时,可以在末行模式下使用斜杠加要查找的关键字回车查找,如下图所示)

将listen.owner与listen.group参数分别修改为www

(3)最后,把三个参数修改完成后:wq退出,然后启动 php-fpm 服务

systemctl start php-fpm

注意:/var/log/php-fpm/error.log文件是php-fpm服务的错误日志文件,要是有什么错误可以去查看,我遇到了php-fpm服务默认9000端口被占用,导致php-fpm服务启动不了,要是你也遇到,更改冲突端口。

(4)开机启动设置

systemctl enable php-fpm
systemctl daemon-reload

PHP-FPM 即 PHP FastCGI 进程管理器,要了解 PHP-FPM ,首先要看看 CGI 与 FastCGI 的关系。

CGI 的英文全名是 Common Gateway Interface,即通用网关接口,是 Web 服务器调用外部程序时所使用的一种服务端应用的规范。

早期的 Web 通信只是按照客户端请求将保存在 Web 服务器硬盘中的数据转发过去而已,这种情况下客户端每次获取的信息也是同样的内容(即静态请求,比如图片、样式文件、HTML文档),而随着 Web 的发展,Web 所能呈现的内容更加丰富,与用户的交互日益频繁,比如博客、论坛、电商网站、社交网络等。

这个时候仅仅通过静态资源已经无法满足 Web 通信的需求,所以引入 CGI 以便客户端请求能够触发 Web 服务器运行另一个外部程序,客户端所输入的数据也会传给这个外部程序,该程序运行结束后会将生成的 HTML 和其他数据通过 Web 服务器再返回给客户端(即动态请求,比如基于 PHP、Python、Java 实现的应用)。利用 CGI 可以针对用户请求动态返回给客户端各种各样动态变化的信息。

 

FastCGI 顾名思义,是 CGI 的升级版本,为了提升 CGI 的性能而生,CGI 针对每个 HTTP 请求都会 fork 一个新进程来进行处理(解析配置文件、初始化执行环境、处理请求),然后把这个进程处理完的结果通过 Web 服务器转发给用户,刚刚 fork 的新进程也随之退出,如果下次用户再请求动态资源,那么 Web 服务器又再次 fork 一个新进程,如此周而复始循环往复。

而 FastCGI 则会先 fork 一个 master 进程,解析配置文件,初始化执行环境,然后再 fork 多个 worker 进程(与 Nginx 有点像),当 HTTP 请求过来时,master 进程将其会传递给一个 worker 进程,然后立即可以接受下一个请求,这样就避免了重复的初始化操作,效率自然也就提高了。而且当 worker 进程不够用时,master 进程还可以根据配置预先启动几个 worker 进程等着;当空闲 worker 进程太多时,也会关掉一些,这样不仅提高了性能,还节约了系统资源。

这样一来,PHP-FPM 就好理解了,FastCGI 只是一个协议规范,需要每个语言具体去实现,PHP-FPM 就是 PHP 版本的 FastCGI 协议实现,有了它,就是实现 PHP 脚本与 Web 服务器(通常是 Nginx)之间的通信,同时它也是一个 PHP SAPI,从而构建起 PHP 解释器与 Web 服务器之间的桥梁。

PHP-FPM 负责管理一个进程池来处理来自 Web 服务器的 HTTP 动态请求,在 PHP-FPM 中,master 进程负责与 Web 服务器进行通信,接收 HTTP 请求,再将请求转发给 worker 进程进行处理,worker 进程主要负责动态执行 PHP 代码,处理完成后,将处理结果返回给 Web 服务器,再由 Web 服务器将结果发送给客户端。这就是 PHP-FPM 的基本工作原理

(5)在之前设置的php目录下,新建一个php文件用于测试。

在 /usr/local/webserver/nginx/html 目录下建立 index.php 文件

cd /usr/local/webserver/nginx/html

vim index.php

(6)输入以下内容:

<?php
 phpinfo();
?>

退出保存

(7)重启Nginx

/usr/local/webserver/nginx/sbin/nginx -s reopen     # 重启nginx

/usr/local/webserver/nginx/sbin/nginx    # 启动nginx

ps -ef | grep nginx    # 以全格式查看所有nginx服务的进程信息

 

(8)然后,在浏览器上访问你的IP地址:端口号/index.php如果看到以下画面,则说明我们的 nginx + php 成功关联上了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章