/ 中存储网

安装Nginx并配置负载均衡功能

2013-11-06 12:23:01 来源:itjs.cn

据说 Nginx 做负载均衡不错,恩拿来学习配置下。

先安装:

wget http://sysoev.ru/nginx/nginx-0.6.35.tar.gz

tar zxvf nginx-0.6.35.tar.gz

cd nginx-0.6.35

./configure

make

make install

安装时出现下面的错误:

Configuration summary

+ PCRE library is not found

+ OpenSSL library is not used

+ md5 library is not used

+ sha1 library is not used

+ using system zlib library

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

library.

You can either disable the module by using

--without-http_rewrite_module

option, or install the PCRE library into the system, or build the

PCRE library

statically from the source with nginx by using --with-pcre=

option.

说没有 PCRE 库,那安装它:

yum install pcre-devel

安装完后,修改配置vi conf/nginx.conf,修改后看起来像:

user  chenlb;

worker_processes  10;

#error_log  logs/error.log;

#error_log  logs/error.log  notice;

#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {

use epoll;

worker_connections  1024;

}

http {

include       mime.types;

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        on;

#tcp_nopush     on;

#keepalive_timeout  0;

keepalive_timeout  65;

#gzip  on;

upstream demo {

server 172.0.0.1:8080 weight=1;

server 192.168.1.100:8080 weight=1;

}

server {

listen       80;

server_name  nobody.chenlb.com;

#charset koi8-r;

log_format  nobody_chenlb_com  '$remote_addr - $remote_user [$time_local] $request '

'"$status" $body_bytes_sent "$http_referer" "$http_x_forwarded_for"';

access_log  logs/access.log  nobody_chenlb_com;

location / {

proxy_pass http://demo;

proxy_set_header   Host             $host;

proxy_set_header   X-Real-IP        $remote_addr;

proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;

}

}

}

修改浏览器所在机子hosts,nobody.chenlb.com 指向到nginx所在机子。

jsp的测试页面,nginx-test.jsp:

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ page import="java.util.LinkedHashMap" %>

<%@ page import="java.util.Enumeration" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>nginx demo</title>

</head>

<body>

<%

LinkedHashMap map = new LinkedHashMap();

map.put("getServerName", request.getServerName());

map.put("getServerPort", request.getServerPort());

map.put("getRemoteAddr", request.getRemoteAddr());

map.put("getRemoteHost", request.getRemoteHost());

map.put("getRemotePort", request.getRemotePort());

map.put("getLocalName", request.getLocalName());

map.put("getLocalAddr", request.getLocalAddr());

map.put("getLocalPort", request.getLocalPort());

//HttpServletRequest req = (HttpServletRequest)request;

for (Enumeration e = request.getHeaderNames() ; e.hasMoreElements() ;) {

Object obj = e.nextElement();

map.put(obj.toString(), request.getHeader(obj.toString()));

}

%>

<table border=1>

<tr><th>name</th><th>value</th></tr>

<%

for(Object key : map.keySet()) {

out.println("<tr><th>");

out.println(key+"</th><th>"+map.get(key)+"</th></tr>");

}

String str = request.getContextPath()+request.getServletPath()+(request.getPathInfo()==null?"":request.getPathInfo())+(request.getQueryString() == null ? "" : "?"+request.getQueryString());

System.out.println(str);

%>

</table>

</body>

</html>

分别在172.0.0.1:8080、192.168.1.100:8080的web实例(webapps/demo)下放入nginx-test.jsp。

启动nginx:

sbin/nginx

在浏览器中访问:http://nobody.chenlb.com/demo/nginx-test.jsp,出现了一个问题,一时快,一时很慢,看到nginx在域名查找,后来把upstream的demo在nginx那台机子的hosts配上IP就好。