架构图:
配置nginx.conf
#user nobody;
# 进程数,一般这个和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 {
# work 进程连接数
use epoll;
worker_connections 1024;
# 并发总数max_clients = worker_processes * worker_connections
# 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4 为什么
# 为什么上面反向代理要除以4,应该说是一个经验值
# 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000
# worker_connections 值的设置跟物理内存大小有关
# 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数
# 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右
# 我们来看看360M内存的VPS可以打开的文件句柄数是多少:
# $ cat /proc/sys/fs/file-max
# 输出 34336
# 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内
# 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件总数进行适当地进行设置
# 使得并发总数小于操作系统可以打开的最大文件数目
# 其实质也就是根据主机的物理CPU和内存进行配置
# 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。
# ulimit -SHn 65535
}
http {
#设定mime类型,类型由mime.type文件定义
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 进行文件的传输,但一般为了和网速的io进行平衡,
#sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
#对于普通应用,必须设为 on,
#如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
#以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
# 是否开启gzip压缩输出
#开启zip网页压缩
gzip on;
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css application/xml;
#设定请求缓冲
client_header_buffer_size 128k;
large_client_header_buffers 4 128k;
#负载均衡配置,nginx 是做反向代理的,访问nginx就是在访问负载均衡配置的这个server,这个可以通过log查看
# 查看的error log 从中可以清晰看到 负载均衡的地址:client: 127.0.0.1, server: localhost,request: "GET /index.jsp # HTTP/1.1", upstream: "http://127.0.0.1:18081/index.jsp", host: "localhost"
upstream sunny{
#ip_hash iphash 实现负载均衡,这里使用了轮回的方式实现
#ip_hash;
# nginx 转发的后台tomcat服务器配置,以及其权重的配置,权重越大要承载的量越大
#ip_hash; #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
server 192.168.10.150:8081 max_fails=1 fail_timeout=10s;
server 192.168.10.150:8082 max_fails=1 fail_timeout=10s;
server 192.168.10.150:8083 max_fails=1 fail_timeout=10s;
}
# 虚拟主机的配置
server {
# 就是nginx服务的端口
listen 80;
#这个就是访问域名
server_name localhost;
# 字符编码的设置
#charset utf-8;
#access_log logs/host.access.log main;
# 定义错误提示页面 /50x.html
error_page 500 502 503 504 /50x.html;
# 静态页面由 nginx处理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
#过期30天,静态文件不怎么更新,过期可以设大一点,
#如果频繁更新,则可以设置得小一点。
expires 30d;
}
# 动静分离,动态的反向到负载均衡的tomcat上
location / {
# nginx 的根目录,当发送静态请求时会默认到这个目录下去查找
root /usr/local/nginx/html;
#定义首页索引文件的名称
index index.html index.htm index.jsp index.do;
# 代理路径,和负载均衡的 upstream localhost 这个localhost路径是一致的,但http是不能忘!
proxy_pass http://sunny;
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_buffers 32 4k;
proxy_connect_timeout 3;
proxy_send_timeout 30;
proxy_read_timeout 30;
}
#禁止访问 .htxxx 文件
location ~ /.ht {
deny all;
}
}
}