CentOS系统配置Nginx+PHP负载均衡

本教程采用1台转发服务器和2台应用服务器(硬件配置相同)作为示例,系统均为CentOS7.4,网址为https://blog.yufuping.com,转发服务器为443端口,内网转发到应用服务器的80端口。本教程采用权重策略,其他策略可参考网络资料。

第一步,安装转发Nginx

安装gcc
1
yum install gcc gcc-c++
安装pcre
1
yum install -y pcre pcre-devel
安装zlib
1
yum install -y zlib zlib-devel
安装openssl
1
yum install -y openssl openssl-devel
下载
1
wget https://nginx.org/download/nginx-1.15.3.tar.gz
解压
1
tar -zxvf nginx-1.15.3.tar.gz
进入目录
1
cd nginx-1.15.3

编译nginx

1
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-stream

这里的--with-stream stream模块是为了配置负载均衡转发,应用服务器安装nginx可以不加。

安装nginx

1
make && make install

第二步,配置转发Nginx

在nginx.conf中http内配置upstream,此处以blog.yupoxiong.com域名为示例。

1
2
3
4
upstream blog.yupoxiong.com {
server 172.20.20.2:80 weight=1; #第一个服务器
server 172.20.20.3:80 weight=1; #第二个服务器
}

weight为权重,如果机器配置不均衡,可以调整weight参数。例如第2台机器的配置为第1台机器的2倍,那就可以把第2台的weight改成2。

server内配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
server {

listen 443 ssl;
server_name blog.yupoxiong.com;
ssl_certificate cert/blog.yupoxiong.crt;
ssl_certificate_key cert/blog.yupoxiong.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://blog.yupoxiong.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

第三步,正常安装配置应用服务器Nginx和PHP即可

应用服务器nginx可以和转发服务器使用相同的命令,然后正常配置nginx.conf即可,以下为PHP的安装教程。

安装php依赖

1
yum install -y gcc gcc-c++  make zlib zlib-devel pcre pcre-devel  libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers

下载php7.2

1
http://cn2.php.net/get/php-7.2.10.tar.gz/from/this/mirror

解压
1
tar -zxvf mirror

进入目录

1
cd mirror

编译php

1
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --with-openssl --enable-mbstring --enable-ftp --with-gd --with-jpeg-dir=/usr --with-png-dir=/usr --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pear --enable-sockets --with-freetype-dir=/usr --with-zlib --with-libxml-dir=/usr --with-xmlrpc --enable-zip --enable-fpm --enable-xml --enable-sockets --with-gd --with-zlib --with-iconv --enable-zip --with-freetype-dir=/usr/lib/ --enable-soap --enable-pcntl --enable-cli --with-curl --enable-bcmath

安装

1
make && make install

配置文件

1
cp php.ini-production /usr/local/php/php.ini

php.ini开启错误显示

1
display_errors = On

复制启动脚本:

1
2
cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm

修改php-fpm配置文件:

1
2
3
cd /usr/local/php/etc
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf

去掉 pid = run/php-fpm.pid 前面的分号

1
2
3
cd php-fpm.d
cp www.conf.default www.conf
vim www.conf

修改user和group的用户为当前用户(也可以不改,默认会添加nobody这个用户和用户组)

【启动PHP】

1
2
3
4
/etc/init.d/php-fpm start        #php-fpm启动命令
/etc/init.d/php-fpm stop #php-fpm停止命令
/etc/init.d/php-fpm restart #php-fpm重启命令
ps -ef | grep php 或者 ps -A | grep -i php #查看是否已经成功启动PHP