nginx_tomcat负载均衡环境

Nginx+Tomcat搭建

版本

操作系统版本

Centos 6.4

Nginx版本

nginx-1.3.15.tar.gz

JDK版本

jdk-7u71-linux-i586 //jdk1.7

Tomcat版本

apache-tomcat-7.0.41.tar.gz

前置准备

可能要用到的包、工具

1.yum y install lrzsz //上传下载工具,高大上的工具,再次鄙视那些用ftp工具的

2.yum y install gcc gcc-c++ //两个包gccgcc-c++ 为了pcre的编译

3.yum y install openssl* //ssl的支持

要是编译报错看错误提示,有的可能是少包的支持,没啥yum

关闭防火墙

首先把防火墙关闭:service iptables stop

再设置为永久关闭:chkconfig iptables off

一定要关,不然本地可能访问不了虚拟机上的apache

JDK安装

oracle官网下载jdk1.7 jdk-7u71-linux-i586.rpm

/opt下创建文件夹jdk

jdk-7u71-linux-i586.rpm上传到/opt/jdk

rpm -ivh jdk-7u71-linux-i586.rpm

之后修改配置文件

vi /etc/profile

在最后加上:

# jdk

export JAVA_HOME=/usr/java/jdk1.7.0_71

export ANDROID_JAVA_HOME=$JAVA_HOME

export JRE_HOME=/usr/java/jdk1.7.0_71/jre

export CLASSPATH=/usr/java/jdk1.7.0_71/lib

export PATH=$JAVA_HOME/bin:$PATH

保存退出之后执行

source /etc/profile //使更改的配置立即生效

然后输入

java version查看jdk是否安装成功,出现版本信息表示安装完成

[root@localhost conf]# java -version

java version "1.7.0_71"

Java(TM) SE Runtime Environment (build 1.7.0_71-b14)

Java HotSpot(TM) Client VM (build 24.71-b01, mixed mode, sharing)

Tomcat安装

/opt下创建文件夹tomcat

apache-tomcat-6.0.37.tar.gz上传到/opt/tomcat

  1. apache-tomcat-7.0.41.tar.gz
  2. mv apache-tomcat-7.0.41 tomcat1
  3. mv tomcat1 /usr/local/
  4. cp –r tomcat1 tomcat2
  5. vi /etc/profile修改配置文件

加入:

#tomcat

export TOMCAT_HOME=/usr/local/tomcat1

export TOMCAT_HOME=/usr/local/tomcat2

  1. 启动tomcat

/usr/local/tomcat1/bin/startup.sh

/usr/local/tomcat2/bin/startup.sh

显示

Using CATALINA_BASE: /usr/local/tomcat1

Using CATALINA_HOME: /usr/local/tomcat1

Using CATALINA_TMPDIR: /usr/local/tomcat1/temp

Using JRE_HOME: /usr/java/jdk1.7.0_71/jre

Using CLASSPATH: /usr/local/tomcat1/bin/bootstrap.jar

然后ps ef|grep tomcat查看进程

最后IE中输入http://ip:端口看到如下页面证明tomcat安装成功

Nginx安装

opt下创建文件夹nginx,将nginx-1.3.15.tar.gz上传到nginx文件夹下

tat xzvf nginx-1.3.15.tar.gz

进入nginx-1.3.15

执行

./configure --with-http_stub_status_module --with-http_ssl_module

执行make && make install

查看配置

cd /usr/local/nginx/sbin/

./nginx –t

./nginx –v

如果屏幕显示以下两行信息,说明配置文件正确:

the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

启动nginx

cd /usr/local/nginx/sbin

./nginx

nginx –s reload 重启

修改nginx端口:

vi /usr/local/nginx/conf/nginx.conf

listen 80 改成83

IE输入IP:端口,出现如下表示安装nginx成功

Nginx负载配置

修改nginx.conf,配置文件内容如下

#user nobody;

#启动进程数,通常设置成和CPU的数量相等。

worker_processes 1;

#全局错误日志及PID文件

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

#工作模式及连接数上限

events {

use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能

worker_connections 1024;#单个后台worker process进程的最大并发链接数

}

#设定http服务器,利用它的反向代理功能提供负载均衡支持

http {

include mime.types; #设定mime类型,类型由mime.type文件定义

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"';

#access_log logs/access.log main;

#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.

sendfile on;

#tcp_nopush on;

#连接超时时间

#keepalive_timeout 0;

keepalive_timeout 65;

#开启gzip压缩

#gzip on;

#设定请求缓冲
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

 

## 配置反向代理的后端tomcat集群,weigth参数表示权值,权值越高被分配到的几率越大

upstream web_server {

server localhost:8080 weight=1 max_fails=2 fail_timeout=30s;

server localhost:9090 weight=1 max_fails=2 fail_timeout=30s;

}

server {

listen 80; #侦听80端口

server_name localhost; #定义使用www.xx.com访问

## 网页、视频、图片文件从本地读取,且定义在浏览器中缓存30

location ~ .*.(htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$

{

expires 30d;

}

## jscss文件从本地读取,且定义在浏览器中缓存1小时

location ~ .*.(js|css)?$

{

expires 1h;

}

## 动态文件转发到后端的tomcat集群

location ~ .*.(php|jsp|cgi|jhtml)?$ {

proxy_pass http://web_server;

proxy_set_header Host $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

}

#charset koi8-r;

#access_log logs/host.access.log main;

location / {

root html;

index index.html index.htm;

}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html

# 定义错误提示页面

error_page 500 502 503 504 /50x.html;

location = /50x.html {

root html;

}

#静态文件,nginx自己处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
expires 30d;
}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

}

}

修改Tomcat配置文件server.xml

<Server port="8005" shutdown="SHUTDOWN"> //指定一个端口,这个端口负责监听关闭tomcat的请求

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"redirectPort="8443"/> //tomcat端口号

测试负载

在两个tomcat下加入工程test

mkdir /usr/local/tomcat1/webapps/test

mkdir /usr/local/tomcat2/webapps/test

在两个test工程下分别创建test.jsp,内容如下

<%@ page contentType="text/html;charset=UTF-8"%>

<html>

<head>

<title> Tomcat_test3</title>

</head>

<body>

<font color = "red" size = "20" >

<% out.print( "test3333" ); %>

</font>

</body>

</html>

<%@ page contentType="text/html;charset=UTF-8"%>

<html>

<head>

<title> Tomcat_test2</title>

</head>

<body>

<font color = "red" size = "20" >

<% out.print( "test222" ); %>

</font>

</body>

</html>

启动tomcat+nginx

启动nginx/usr/local/nginx/sbin/nginx

启动tomcat

/usr/local/tomcat1/bin/startup.sh

/usr/local/tomcat2/bin/startup.sh

查看进程

在两个IE中输入ipnginx端口/工程/jsp页面,最好是不同浏览器,出现如下表示搭建成功

注意:这么做只是测试,正常情况下后端的工程必须一致,不然相当于客户端发出了请求俩系统来响应,就出大事了

 
 
问题1:
make && make install
make: *** 没有规则可以创建“default”需要的目标“build”。 停止
可以到 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 下载最新的 PCRE 源码包,使用下面命令下载编译和安装 PCRE 包:

# tar zxvf pcre2-10.20.tar.gz

# cd pcre2-10.20

# ./configure

# make

# sudo make install

问题2:

安装Nginx时报错

./configure: error: the HTTP rewrite module requires the PCRE library.

安装pcre-devel解决问题
yum -y install pcre-devel

错误提示:./configure: error: the HTTP cache module requires md5 functions
from OpenSSL library. You can either disable the module by using
--without-http-cache option, or install the OpenSSL library into the system,
or build the OpenSSL library statically from the source with nginx by using
--with-http_ssl_module --with-openssl=<path> options.

解决办法:

yum -y install openssl openssl-devel

问题3
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
问题描述:地址已被使用。可能nginx服务卡死了,导致端口占用,出现此错误。
解决方法:首先用lsof:80看下80端口被什么程序占用。lsof返回结果如下:
修改nginx端口:
vi /usr/local/nginx/conf/nginx.conf
listen 80 改成83
 
 
---------------------------------------------------------------------------------------------------------

如果要使用负载均衡的话,可以修改配置http节点如下:

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include /etc/nginx/mime.types;
default_type application/octet-stream;
#设定日志格式
access_log /var/log/nginx/access.log;

#省略上文有的一些配置节点

#。。。。。。。。。。

#设定负载均衡的服务器列表
upstream mysvr {
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.8.1x:3128 weight=5;#本机上的Squid开启3128端口
server 192.168.8.2x:80 weight=1;
server 192.168.8.3x:80 weight=6;
}

upstream mysvr2 {
#weigth参数表示权值,权值越高被分配到的几率越大

server 192.168.8.x:80 weight=1;
server 192.168.8.x:80 weight=6;
}

#第一个虚拟服务器
server {
#侦听192.168.8.x的80端口
listen 80;
server_name 192.168.8.x;

#对aspx后缀的进行负载均衡请求
location ~ .*.aspx$ {

root /root; #定义服务器的默认网站根目录位置
index index.php index.html index.htm; #定义首页索引文件的名称

proxy_pass http://mysvr ;#请求转向mysvr 定义的服务器列表

#以下是一些反向代理的配置可删除.

proxy_redirect off;

#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允许客户端请求的最大单文件字节数
client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的话,这样设置
proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从upstream服务器传

}

}
}



 
 
原文地址:https://www.cnblogs.com/xiaojinniu425/p/6037720.html