Nginx反向代理和负载均衡配置
服务器平台 CentOS 6
负载调度: 192.168.137.16 Nginx-1.5.2
服务器 1: 192.168.137.17 Nginx整合php
服务器 2: 192.168.137.18 Nginx整合php
mysql-代理: 192.168.137.26 mysql-代理
管理员: 192.168.137.27 管理员
mysqlslave1: 192.168.137.28 mysqlslave1
mysqlslave2: 192.168.137.29 mysqlslave2
WIN7客户端 192.168.137.1 IE内核浏览器
实现过程: 客户端发出请求,被解析到了负载调度服务器的IP,调度服务器根据均衡算法 将请求转发给
成员服务器server1或server2, 成员 服务器处理请求,通过直接找到静态数据或这查询后端的mysql主从
集群,将结果返回给负载调度服务器,最后客户端收到了来自负载调度服务器的结果。
1. 负载调度服务器安装nginx-1.5.2
(1)执行rpm -qa检查gcc , gcc-c ++ ,使 ,libtool等是否安装,如果没有请使用rpm或yum命令安装。
(2)安装openssl库
tar zxvf openssl-1.0.1c.tar.gz
./配置 (不需要添加自定义参数)
使 && 进行安装
(3)安装pcre
tar -zxvf pcre-8.34.tar.gz
./配置 –前缀= / usr / local / pcre
使 && 进行安装
(4)安装zlib最新库文件
tar zxvf zlib-1.2.8.tar.gz
./配置 –前缀= / usr / local / zlib
使 && 进行安装
(5)安装nginx-1.5.2
groupadd -r nginx
用户添加 -r -g nginx -s /bin/false -M nginx
nginx配置参数
./配置 –前缀= / usr / local / nginx \
–错误日志路径=/var/log/nginx/error.log \
–http-log-path=/var/log/nginx/access.log \
–pid-path=/var/run/nginx/nginx.pid \
–锁路径=/var/lock/nginx.lock \
–用户=nginx \
–组=nginx \
–与-http_ssl_module \
–with-http_stub_status_module \
–http-proxy-temp-path=/var/tmp/nginx/proxy \
–http-fastcgi-temp-path=/var/tmp/nginx/fcgi \
–用-pcre
编译安装
使 && 进行安装
启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
浏览器输入http://localhost 成功返回nginx页面。
(6)nginx配置
vim /usr/local/nginx/conf/nginx.conf
在http模块下,添加upstream部分,根据需要选择合适的算法,若成员服务器性能差异较大,
则可设置合适权重(weight), 权重越高的成员,得到请求的概率越大。
上游的 192.168.137.16 {
ip_hash;
服务器 192.168.137.17:80;
服务器 192.168.137.18:80;
}
修改location /部分,这部分表示接受任何请求,现在只需将接收的请求转发到http://192.168.137.16,
upstream按照某种均衡算法分配给server1和server2处理。
如下:
位置 / {
# 根 html;
# index index.html index.htm;
proxy_pass http://192.168.137.16;
proxy_set_header 主机 $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
最后保存退出,重启nginx,负载调度服务器配置完毕。
2. 成员服务器 server1和server2配置
由于成员服务器是真正执行请求处理的,要么直接返回静态查询结果,要么通过php连接mysql动态返回结果,
因此成员服务器需要安装nginx并整合php ,mysql可安装到同一台服务器上,也可安装在其他服务器上。这里
选择另外部署三台mysql服务器,并配置主从同步,实现读写分离。为高并发访问提供强有力支持。
server1和server2的配置可参考本站LNMP环境搭建
LNMP安装成功后,开放80和3306端口。编辑 nginx.conf ,修改域名为www.roamway.com
配置文件如下:
用户 nginx nginx;
worker_processes 自动;
error_log /var/log/nginx_error.log ;
pid /usr/local/nginx/logs/nginx.pid;
#指定此进程可以打开的最大文件描述符的值.
worker_rlimit_nofile 5120;
大事记
{
使用 epoll;
worker_connections 5120;
多接受;
}
http
{
包括 mime.types;
default_type 应用程序/八位字节流;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32ķ;
client_max_body_size 50m;
发送文件;
tcp_nopush 开启;
keepalive_timeout 60;
tcp_nodelay 开启;
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64ķ;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 256k;
gzip 上;
#limit_conn_zone $binary_remote_addr zone=perip:10米;
##如果启用limit_conn_zone,加 “limit_conn 周边 10;” 到服务器部分.
server_tokens 关闭;
#日志格式
log_format access ‘$remote_addr – $远程用户 [$时间_本地] “$要求” ‘
'$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” $http_x_forwarded_for';
access_log off;
服务器
{
听 80;
server_name www.roamway.com;
index index.html index.htm index.php;
根目录 /usr/local/nginx/html;
#错误页面 404 /404.html;
包括 enable-php.conf;
位置/nginx_status
{
stub_status 打开;
access_log off;
}
位置~ .*\.(gif|jpg|JPEG格式|PNG|bmp|瑞士法郎)$
{
到期 30 天;
}
位置~ .*\.(js|css)?$
{
过期 12 小时;
}
位置~ /\.
{
全部否认;
}
access_log /var/log/nginx/access.log 访问;
}
包括vhost / *。conf;
}
新建文件phpinfo.php,写入如下代码:
<?php
php信息();
?>
浏览器分别输入
http://192.168.137.17/phpinfo.php, http://192.168.137.18/phpinfo.php
可以看到server1和server2的php解析效果。
3. 导入网站
利用FTP客户端,将我的网站www.roamway.com和数据库下载至本地,如下:
再将其上传至server1的网页目录,/用户/本地/nginx/html
利用phpmyadmin工具,创建一个roamway数据库,然后上传roamway.sql,结果如下:
server2和server1操作相同,不再赘述。
4. 客户端测试
windows客户端在hosts文件中添加主服务器192.168.137.16和www.roamway.com的解析关系,
当然也可以配置DNS服务器,添加正反向解析,请参考:https://www.roamway.com/?p=993
ping www.roamway.com, 已成功解析到192.168.137.16
为了验证负载均衡是否真的实现,在server1和server2的网站目录新建首页index.html
里面写入service1: 192.168.137.17或server2: 192.168.137.18 保存退出。
浏览器测试一下,反复刷新,下面两个页面循环出现。
删除server1和server2网页目录下的index.html文件。浏览器键入www.roamway.com
结尾:以上Nginx负载均衡配置演示只是一个大概过程,实际操作会复杂很多。另外出现了一个小插曲,
在mysql编译过程中的突然停电,造成资料丢失和很多未知故障,在耐心坚持下,配置才得以继续。
这次配置以Nginx反向代理,集群为主。mysql主从同步和读写分离,会在时间允许情况下演示。
附:最新编译参数
nginx版本: nginx/1.15.3
由 gcc 构建 4.4.7 20120313 (红帽 4.4.7-4) (海湾合作委员会)
使用 OpenSSL 1.1.1-dev xx XXX xxxx 构建
启用TLS SNI支持
配置参数: –用户= www –组= www –前缀= / usr / local / nginx \
–with-http_stub_status_module –与-http_ssl_module –与-http_v2_module \
–与-http_gzip_static_module –与-http_sub_module –与-http_realip_module \
–with-openssl=/usr/local/openssl/ –with-openssl-opt='enable-tls1_3 enable-weak-ssl-ciphers’ \
–with-cc-opt=-DTCP_FASTOPEN=23 –with-file-aio \
–http-client-body-temp-path=/var/tmp/nginx/client/ \
–http-proxy-temp-path=/var/tmp/nginx/proxy \
–添加模块=/usr/local/nginx-ct/ –添加模块=/usr/local/nginx_upstream_check \
–不带-mail_pop3_module –不带-mail_imap_module –不带-mail_smtp_module \
–没有-http_uwsgi_module –没有-http_scgi_module
nginx上游模块示例