参考地址:
http://www.chinanginx.cn/?page_id=227 nginx中文官网
http://www.nginx.cn/2181.html
http://cxshun.iteye.com/blog/1535188
http://ari.iteye.com/blog/833153
http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html
要求配置nginx主从关系可以参考:
http://www.server110.com/nginx/201309/1309.html
环境:Window + Nginx+Tomcat6
1、nginx简介:
Nginx (发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。
2、下载地址:http://nginx.org/ ,文章附件有下载。
3、本文主要基于Nginx下配置两台tomcat,结构如下图:
3、目录结构
Nginx-
|_ conf 配置目录
|_ contrib
|_ docs 文档目录
|_ logs 日志目录
|_ temp 临时文件目录
|_ html 静态页面目录
|_ nginx.exe 主程序
window下安装Nginx极其简单,解压缩到一个无空格的英文目录即可(个人习惯,担心中文出问题),双击nginx.exe启动。
也可以在dos目录下启动、跟新、停止,我的nginx是在D:\nginx-1.5.8路径下,dos下操作如下图:
启动:
停止:
重新加载文件:当修改了nginx文件,如配置文件。。。。。如果nginx开着不需要关闭服务器重启,直接执行该命令重新加载文件就可以了。
启动后我们打开任务管理器,可以看到两个nginx.exe在那里好好的。这说明我们已经启动了,至于为什么两个,我们这里不深究,在浏览器中输入:http://localhost可以看到如图,说明启动成功。
4、nginx.conf配置文件说明
Nginx配置文件默认在conf目录,主要配置文件为nginx.conf,我们安装在D:\nginx-1.5.8、默认主配置文件 为D:\nginx-1.5.8\conf\nginx.conf。下面是nginx作为前端反向代理服务器的配置。
dome里一个server的说明:
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
这段代码在server里面,相当于一个代理服务器,可以配置多个,但是端口listen必须配置不一样。
listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。
server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地;
location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里
root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。
index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。
下面的error_page是代表错误的页面,这里我们暂时不用,先不管它。
5、自己配置最简单的转发:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8013/nginxTest/index.jsp;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
server_name 在这里可以不配置;
proxy_pass,它表示代理路径,相当于转发,而不像之前说的root必须指定一个文件夹;
配置完成后输入:http://localhost 可以进入 proxy_pass指定的页面,表示成功;
6、自己配置一台负载均衡机器,负载两台服务器:
#Nginx所用用户和组,window下不指定
#user nobody;
#工作的子进程数量(通常等于CPU数量或者2倍于CPU)
worker_processes 2;
#错误日志存放路径
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#指定pid存放文件
#pid logs/nginx.pid;
events {
#使用网络IO模型linux建议epoll,FreeBSD建议采用kqueue,window下不指定。
#use epoll;
#允许最大连接数
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
charset utf-8;
#定义日志格式
#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 指定负载均衡的机器服务器地址,这里我们我们用没有多台机器,用不同的端口来区分;
upstream nginxTestUrl {
#weigth 参数表示权值,权值越高被分配到的几率越大,可以不配
server 192.168.3.189:8013 weight=1;
server 192.168.3.189:8023 weight=1;
#ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,不需要可以不配
#ip_hash;
}
server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;
location / {
#proxy_pass 随机转向到配置的服务器上,配置形式直接用http://+upstream的名称来使用
#upstream中的server元素必须要注意,不能加http://,但proxy_pass中必须加
proxy_pass http://nginxTestUrl;
#proxy_redirect proxy_set_header 必须配置,不然如果后端真是的服务器设置有类似防盗链或者根据http请求头中的host字段来进行路由或判断功能的话,
#如果反向代理层的nginx不重写请求头中的host字段,将会导致请求失败在查找项目的时候会找不到资源
#说明链接:http://zhidao.baidu.com/link?url=Ify6aPe0tTcOlLuO2zuYkLIH_ITT-aThzXVIFf3yTFOKpcF314SQyrcYY5j0Awk4xU6Qb0JSaDESLBoKKnIVuK
proxy_redirect off;
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 1; #nginx跟后端服务器连接超时时间(代理连接超时),时间设置短一些可以解决多台服务器突然出现的某一台down机器引起的链接超时
proxy_send_timeout 300; #后端服务器数据回传时间(代理发送超时)
proxy_read_timeout 300; #连接成功后,后端服务器响应时间(代理接收超时)
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服务器传
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
设置反向代理的时间可以解决因某台服务去down机而引起的链接超时问题:
proxy_connect_timeout 1;
proxy_send_timeout 30;
proxy_read_timeout 60;