写在前边
最近一直在做毕业设计,基于Nginx的高可用大并发微信电子商城系统设计与实现,这个架构是采用nginx
为代理服务器,apache
为web
服务器,这么做的原因是因为nginx
适合处理静态,简单,效率高,apache
适合处理动态,稳定,功能强。apache和nginx的区别
网上的教程实在太老了,所以决定自己在安装的过程中也记录下,以便于以后查看。
这里为了描述方便,在同一台机器上安装了lanmp
,实际应用中代理服务器和web
服务器一定要分开,而且web
服务器一定要有多台以便于负载均衡。
环境概述
解析一个域名指向本服务器
快速添加域名解析
本教程以blog.yiranzai.top为例
查看系统版本
1 | $ lsb_release -a |
软件版本
- 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 | $ cd /etc/nginx/ |
修改nginx配置
1 | $ mkdir vhosts #创建一个专门的主机配置文件存放目录 |
修改主机配置
禁止空主机头和未授权域名访问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.top.conf
server {
listen 80;
server_name blog.yiranzai.top;
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 | $ firewall-cmd --zone=public --add-port=80/tcp --permanent |
nginx服务操作
1 | systemctl start nginx.service #启动nginx |
安装apache
yum安装apache
1 | yum install -y httpd |
apache
将被安装到/etc/httpd/
目录
配置apache
查看apache目录
1 | $ cd /etc/httpd/ |
配置apache
1 | $ mkdir vhosts #创建一个虚拟主机配置文件存放目录 |
添加虚拟主机
创建配置1
2
3
4
5
6
7
8
9
10
11
12
13$ vim vhosts/bolg.yiranzai.top.conf
<VirtualHost *:88>
DocumentRoot "/var/www/html/blog_yiranzai_cn"
ServerName blog.yiranzai.top
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 | $ firewall-cmd --zone=public --add-port=88/tcp --permanent |
apache服务操作
1 | systemctl start httpd.service #启动httpd |
浏览器输入blog.yiranzai.top
,页面输出一句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
2yum-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
2MySQL -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 | yum search php71w |
查看apache目录
1 | tree /etc/httpd/ |
可以看到多了两个文件,这是用于apache
支持php
。mod_php
,有兴趣的也可以自行更换为php-fpm
(看文章末)
添加支持
修改虚拟主机配置1
2
3
4
5
6
7
8
9
10
11
12
13$ vim vhosts/blog.yiranzai.top.conf
<VirtualHost *:88>
DocumentRoot "/var/www/html/blog_yiranzai_cn"
ServerName blog.yiranzai.top
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.php1
2
3
4$ vim /var/www/html/blog_yiranzai_cn/index.php
phpinfo();
删除index.html1
$ rm -rf /var/www/html/blog_yiranzai_cn/index.html
使配置生效
1 | systemctl reload httpd.service |
浏览器输入blog.yiranzai.top
,页面输出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
5systemctl 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服务(不推荐,会关闭所有进程)
apache支持
配置虚拟主机
1 | <VirtualHost *:88> |
配置php-fpm
1 | $ vim /etc/php-fpm.d/www.conf |
重载启用
1 | systemctl start php-fpm.service |
浏览器输入blog.yiranzai.top
,正常访问
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
18server {
listen 80;
server_name blog.yiranzai.top;
#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 | $ vim /etc/php-fpm.d/www.conf |
重载启用
1 | systemctl reload php-fpm.service |
浏览器输入blog.yiranzai.top
,正常访问
phpinfo中有