CentOS 7 | Yum安装lanmp(Linux+Apache+Nginx+MySQL+PHP)

写在前边

最近一直在做毕业设计,基于Nginx的高可用大并发微信电子商城系统设计与实现,这个架构是采用nginx为代理服务器,apacheweb服务器,这么做的原因是因为nginx适合处理静态,简单,效率高,apache 适合处理动态,稳定,功能强。apache和nginx的区别
网上的教程实在太老了,所以决定自己在安装的过程中也记录下,以便于以后查看。
这里为了描述方便,在同一台机器上安装了lanmp,实际应用中代理服务器和web服务器一定要分开,而且web服务器一定要有多台以便于负载均衡。

环境概述

解析一个域名指向本服务器
快速添加域名解析

本教程以blog.yiranzai.cn为例

查看系统版本

1
2
3
4
5
6
$ lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: CentOS
Description: CentOS Linux release 7.4.1708 (Core)
Release: 7.4.1708
Codename: Core

软件版本

  • apache 2.4
  • nginx 1.12.2
  • MySQL 5.6
  • PHP 7.1.11

开始安装

安装epel源

Epel,Extra Packages for Enterprise Linux 的简称,企业版 Linux 附加软件包(以下简称 EPEL)是一个 Fedora 特别兴趣小组,用以创建、维护以及管理针对企业版 Linux 的一个高质量附加软件包集,面向的对象包括但不限于 红帽企业版 Linux (RHEL)、 CentOS、Scientific Linux (SL)、Oracle Linux (OL) 。
EPEL 的软件包通常不会与企业版 Linux 官方源中的软件包发生冲突,或者互相替换文件。EPEL 项目与 Fedora 基本一致,包含完整的构建系统、升级管理器、镜像管理器等等。

rpm 安装

1
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum 安装

1
yum -y install epel-release

直接下载repo

1
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

更新系统

1
yum -y update

安装依赖库

1
yum -y install gcc automake autoconf libtool make gcc-c++ glibc libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel pcre pcre-devel libmcrypt libmcrypt-devel

安装Nginx

安装Nginx官方库

官方源地址

1
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum安装Nginx

1
yum install -y nginx

nginx将安装到/etc/nginx/目录

配置nginx

查看nginx目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cd /etc/nginx/
$ tree .
.
|-- conf.d
| `-- default.conf #默认主机配置
|-- fastcgi_params
|-- koi-utf
|-- koi-win
|-- mime.types
|-- modules -> ../../usr/lib64/nginx/modules
|-- nginx.conf #nginx配置文件
|-- scgi_params
|-- uwsgi_params
`-- win-utf
修改nginx配置
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
$ mkdir vhosts          #创建一个专门的主机配置文件存放目录
$ vim nginx.conf

user nginx; #定义Nginx运行的用户和用户组
worker_processes 1; #nginx进程数,建议设置为等于CPU总核心数。

#全局错误日志位置及定义类型,[ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;


events {
worker_connections 1024;
}


http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

#通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
#tcp_nopush on;

keepalive_timeout 65;

gzip on; #默认不开启,建议开启gzip压缩输出

include /etc/nginx/conf.d/*.conf; #包含主机配置
include /etc/nginx/vhosts/*.conf; #新增一行,让nginx.conf包含我们自己设置的vhost目录中的配置
}

详细nginx配置教程请看这里

修改主机配置

禁止空主机头和未授权域名访问

1
2
3
4
5
6
$ vim conf.d/default.conf
server {
listen 80 default;
server_name _;
return 500;
}

添加域名主机

1
2
3
4
5
6
7
8
9
$ vim vhosts/blog.yiranzai.cn.conf
server {
listen 80;
server_name blog.yiranzai.cn;
location / {
proxy_pass http://127.0.0.1:88;
include /etc/nginx/proxy.conf; #代理配置
}
}

代理配置

1
2
3
4
$ vim proxy.conf
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

配置防火墙开放80端口

1
2
3
4
$ firewall-cmd --zone=public --add-port=80/tcp --permanent
success
$ firewall-cmd --reload
success

nginx服务操作

1
2
3
4
5
systemctl start nginx.service           #启动nginx
systemctl enable nginx.service #将nginx开机启动
systemctl stop nginx.service #停止nginx服务
systemctl reload nginx.service #重新加载nginx配置(推荐)
systemctl restart nginx.service #重启nginx服务(不推荐,会关闭所有进程)

安装apache

yum安装apache

1
yum install -y httpd

apache将被安装到/etc/httpd/目录

配置apache

查看apache目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cd /etc/httpd/
$ tree .
.
├── conf
│ ├── httpd.conf #主配置文件
│ └── magic
├── conf.d
│ ├── autoindex.conf
│ ├── README
│ ├── userdir.conf
│ └── welcome.conf
├── conf.modules.d #组件支持配置
│ ├── 00-base.conf
│ ├── 00-dav.conf
│ ├── 00-lua.conf
│ ├── 00-mpm.conf
│ ├── 00-proxy.conf
│ ├── 00-systemd.conf
│ └── 01-cgi.conf
├── logs -> ../../var/log/httpd #日志目录
├── modules -> ../../usr/lib64/httpd/modules #组件目录
└── run -> /run/httpd
配置apache
1
2
3
4
5
6
7
8
9
10
11
$ mkdir vhosts          #创建一个虚拟主机配置文件存放目录
$ vim conf/httpd.conf
ServerRoot "/etc/httpd"
Listen 88 #默认80,改为88
Include conf.modules.d/*.conf
User www #apache运行的用户,默认apache,改为wwww(也可以不改)
Group www #apache运行的用户组,默认apache,改为wwww(也可以不改)
ServerAdmin root@localhost
...
IncludeOptional vhosts/*.conf #最后一行添加这一句,使主文件包含我们的主机配置
...
添加虚拟主机

创建配置

1
2
3
4
5
6
7
8
9
10
11
12
13
$ vim vhosts/bolg.yiranzai.cn.conf
<VirtualHost *:88>
DocumentRoot "/var/www/html/blog_yiranzai_cn"
ServerName blog.yiranzai.cn
DirectoryIndex index.html
<Directory "/var/www/html/blog_yiranzai_cn">
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>

创建目录

1
2
3
$ mkdir /var/www/html/blog_yiranzai_cn
$ vim /var/www/html/blog_yiranzai_cn/index.html
Hello,World!

配置防火墙开放88端口

1
2
3
4
$ firewall-cmd --zone=public --add-port=88/tcp --permanent
success
$ firewall-cmd --reload
success

apache服务操作

1
2
3
4
5
systemctl start httpd.service           #启动httpd
systemctl enable httpd.service #将httpd开机启动
systemctl stop httpd.service #停止httpd服务
systemctl reload httpd.service #重新加载httpd配置(推荐)
systemctl restart httpd.service #重启httpd服务(不推荐,会关闭所有进程)

浏览器输入blog.yiranzai.cn,页面输出一句Hello,World!


安装MySQL

下载源

官网选择对应的包下载
例如

1
wget https://dev.mysql.com/get/MySQL57-community-release-el7-11.noarch.rpm

安装源

1
rpm -Uvh MySQL57-community-release-el7-11.noarch.rpm

检查当前仓库

1
yum repolist all | grep MySQL

默认激活的为MySQL57-community,对应MySQL 5.7
如需安装MySQL5.6版本,则需要修改

1
2
yum-config-manager --disable MySQL57-community
yum-config-manager --enable MySQL56-community

安装MySQL

1
yum install MySQL-community-server

启动MySQL服务 & MySQL初始化

1
systemctl start mysqld.service
MySQL 5.7

超级用户帐户'root'@'localhost'被创建。超级用户的密码被设置并存储在错误日志文件中。要显示它,请使用以下命令

1
grep 'temporary password' /var/log/mysqld.log

登陆 并尽快修改密码 (密码至少包含一个大写字母,一个小写字母,一个数字和一个特殊字符,并且总密码长度至少为8个字符。)

1
2
MySQL -u root -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

MySQL 5.6
1
MySQL_secure_installation

安装PHP(mod_php或者php-fpm

yum安装

1
2
3
4
5
yum search php71w
# 跳过php71w-MySQL,与php71w-MySQLnd冲突
yum install -y php71w* --skip-broken php71w-MySQL
# apache模块
yum install -y mod_php71w

查看apache目录

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
tree /etc/httpd/
.
├── conf
│ ├── httpd.conf
│ ├── httpd.conf.rpmsave
│ └── magic
├── conf.d
│ ├── autoindex.conf
│ ├── php.conf #多了一个
│ ├── README
│ ├── userdir.conf
│ └── welcome.conf
├── conf.modules.d
│ ├── 00-base.conf
│ ├── 00-dav.conf
│ ├── 00-lua.conf
│ ├── 00-mpm.conf
│ ├── 00-proxy.conf
│ ├── 00-systemd.conf
│ ├── 01-cgi.conf
│ └── 10-php.conf #多了一个
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
├── run -> /run/httpd
└── vhosts
└── blog.yiranzai.cn.conf

7 directories, 17 files

可以看到多了两个文件,这是用于apache支持phpmod_php,有兴趣的也可以自行更换为php-fpm(看文章末)

添加支持

修改虚拟主机配置

1
2
3
4
5
6
7
8
9
10
11
12
13
$ vim vhosts/blog.yiranzai.cn.conf
<VirtualHost *:88>
DocumentRoot "/var/www/html/blog_yiranzai_cn"
ServerName blog.yiranzai.cn
DirectoryIndex index.html index.php
<Directory "/var/www/html/blog_yiranzai_cn">
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>

创建index.php

1
2
3
4
$ vim /var/www/html/blog_yiranzai_cn/index.php
<?php
phpinfo();
?>

删除index.html

1
$ rm -rf /var/www/html/blog_yiranzai_cn/index.html

使配置生效

1
systemctl reload httpd.service

浏览器输入blog.yiranzai.cn,页面输出phpinfo的相关信息


配置php-fpm

FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的。
它的功能包括:

  • 支持平滑停止/启动的高级进程管理功能;
  • 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置);
  • stdout 和 stderr 日志记录;
  • 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode;
  • 文件上传优化支持;
  • “慢日志” - 记录脚本(不仅记录文件名,还记录 PHP backtrace 信息,可以使用 ptrace或者类似工具读取和分析远程进程的运行数据)运行所导致的异常缓慢;
  • fastcgi_finish_request() - 特殊功能:用于在请求完成和刷新数据后,继续在后台执行耗时的工作(录入视频转换、统计处理等);
  • 动态/静态子进程产生;
  • 基本 SAPI 运行状态信息(类似Apache的 mod_status);
  • 基于 php.ini 的配置文件。

    php-fpm操作

    1
    2
    3
    4
    5
    systemctl start php-fpm.service           #启动php-fpm
    systemctl enable php-fpm.service #将php-fpm开机启动
    systemctl stop php-fpm.service #停止php-fpm服务
    systemctl reload php-fpm.service #重新加载php-fpm配置(推荐)
    systemctl restart php-fpm.service #重启php-fpm服务(不推荐,会关闭所有进程)

【Fpm配置方法】

apache支持

配置虚拟主机

详情请看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<VirtualHost *:88>
DocumentRoot "/var/www/html/blog_yiranzai_cn"
ServerName blog.yiranzai.cn
DirectoryIndex /index.php index.php
<Directory "/var/www/html/blog_yiranzai_cn">
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Require all granted
</Directory>
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/blog_yiranzai_cn/$1
</VirtualHost>
配置php-fpm
1
2
3
4
5
6
$ vim /etc/php-fpm.d/www.conf
user = www
group = www
listen.owner = www
listen.group = www
pm = static
重载启用
1
2
systemctl start php-fpm.service
systemctl reload httpd.service

浏览器输入blog.yiranzai.cn,正常访问
phpinfo中有

配置成功的话
记得卸载mod_php

1
yum remove mod_php71w

nginx支持

tips:

  • php-fpm只能被apache或者nginx中的一个代理
  • 如果采用nginx代理apache,那么apache可以代理php-fpm
  • 如果nginx代理了php-fpm,那么不能再代理apache
    配置虚拟主机
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    server {
    listen 80;
    server_name blog.yiranzai.cn;
    #error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    root /usr/share/nginx/html;
    }
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
    root /var/www/html/blog_yiranzai_cn;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    include fastcgi_params;
    }
    }
配置php-fpm
1
2
3
4
5
6
$ vim /etc/php-fpm.d/www.conf
user = nginx
group = nginx
listen.owner = nginx
listen.group = nginx
pm = static
重载启用
1
2
systemctl reload php-fpm.service
systemctl reload nginx.service

浏览器输入blog.yiranzai.cn,正常访问
phpinfo中有

文章不错,你都不请我喝杯茶,就是说你呀!
0%
upyun