安装 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
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
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;
- }
- }
- }
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>
<%@ 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实例下放入nginx-test.jsp。
启动nginx:
- sbin/nginx
sbin/nginx
在浏览器中访问:http://nobody.chenlb.com/demo/nginx-test.jsp,出现了一个问题,一时快,一时很慢,看到nginx在域名查找,后来把upstream的demo在nginx那台机子的hosts配上IP就好。
参考:http://blog.s135.com/post/306/ ,http://wiki.nginx.org/NginxChsLoadBalanceExample