nginx 负载均衡,缓存
本来想总结一份文档,看到netseek的nginx指南已经整理的很详细,没必要再整了。理论就不废话了,nginx主要配置都在nginx.conf配置文件中. 希望能给正学习ing的童鞋一个参考... 有误的还请指出..
一、nginx框架结构说明
- ....... 定义运行nginx worker进程的用户/组,worker进程数,可以打开的最大文件描述符数.Log/pid path
- events{ 事件模块,控制nginx处理连接的方式
- ……………….
- }
- http { nginx处理http的核心模块
- ……………….
- upstrearm 负载组名{ 负载均衡模块,可以有多个均衡组.
- ……………………. nginx作反向代理方式有:轮询,权重,ip_hash,url_hash,fair
- }
- Server{ 定义虚拟主机模块,可以有多个
- ………………
- }
- Server{
- ………………….
- Location ~ /purge(/.*) { location匹配访问目录/文件的控制模块
- ………..
- }
- Location ~ .*\.(ico\mp3\avi\jpg\jpeg\swf\.......) {
- ………..
- }
- Location ~ .*\.(thtml|thtm)$ {
- ………..
- }
- Location ./ {
- ………..
- }
- Location ~ .*\.(php|jsp|cgi)$ {
- ………..
- }
- Location /unlimit/ {
- ………..
- }
- ………………….
- }
- Server{
- ……………….
- Location ~ .*\.(ico\mp3\avi\jpg\jpeg\swf\.......) {
- ………..
- }
- Location ./ {
- ………..
- }
- …………………….
- }
- }
二、nginx作反向代理,利用upstream负载均衡模块说明参考:
-
- user nginx nginx;
-
- worker_processes 10; 工作进程数一般是cpu核数*2
- error_log /var/log/nginx/error.log crit;
- pid /var/run/nginx.pid;
- worker_rlimit_nofile 51200; 文件描述符,每个进程所能打开的最大文件数量/socket.
-
- events
- {
- use epoll; 使用的I/O网络模型
- worker_connections 51200;
- }
-
- http
- {
- includ mime.types;
- default_type application/octet-stream;
- #charset uft-8; 如果有多个字符类型,最好在程序中定义
- log_format main '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"' ' up_ip: $upstream_addr '
'up_type $upstream_http_content_type' ' gzip "$gzip_ratio"';
注:添加header头信息x_forwarded_for获取客户端真实IP。 $remote_addr.....nginx内部变量
access_log /var/log/nginx/access.log main;
-
- server_names_hash_bucket_size 128;
- client_header_buffer_size 32k;
- large_client_header_buffer 4 32k;
-
- sendfile on;
- tcp_nopush on;
- tcp_nodelay on;
- keepalive_timeout 65;
-
- gzip on; 开启gzip压缩
- gzip_min_length 1k;
- gzip_buffers 4 16k;
- gzip_http_version 1.1;
- gzip_comp_level 2;
-
- limit_zone myzone $binary_remote_addr 10m; nginx限制并发各速率。 将myzone区域分配10M,1M可含约16000个会话状态。
-
- client_max_body_size 50m; 允许客户端请求的最大单个字节数
- client_body_buffer_size 256k; 缓冲区代理缓冲客户端请求的最 大字节数
- proxy_connect_timeout 190; 后端server超时时间
- proxy_send_timeout 290; 后端server回传时间
- proxy_read_timeout 290; 后端server响应时间
- proxy_buffer_size 4k; 缓存区保护的用户头信息大小,供nginx进行规则处理.
- proxy_buffers 4 32k; 几个buffer最大用多大空间
- proxy_busy_buffers_size 64k; 忙时可申请更大的空间
- proxy_temp_file_write_size 64k; proxy缓存临时文件的大小
- proxy_next_upstream error timeout invalid_header http_500 http_503 http_404; 如遇500,503,404状态码转发到后端另一服务器。
- proxy_max_temp_file_size 128m;
-
- upstream mysvr { 定义负载均衡池,可以有多个,这里后端是squid-server组
- server 192.168.1.10;
- server 192.168.1.11;
- hash $http_host$request_uri;
- } 根据url来hash,后端为缓存server的如squid,可提高命中率
-
- upstream websvr{ 定义后端websrv的均衡池,这里后端是web-server组
- server 192.168.1.20;
- server 192.168.1.21;
- } 采用轮询
- 注:nginx负载均衡方式:轮询,权重,ip_hash,url_hash,fair.具体解释下面有说明。
-
- upstream message_server{ 定义后端message_server的均衡池
- server 192.168.1.30;
- server 192.168.1.31;
- }
-
- server { 定义虚拟主机,第一个虚拟主机,反向代理mysrv负载组
- listen 80;
- server_name www.domain.com
- location ~.*\.(ico|mp3|avi|wma|wmv|asf|mpg|mov|mid|js|css|jpg|ping|gif|swf|flv)$
- {
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwaded_for;自定义变量获取原客户端真实IP。
-
- proxy_pass http://mysrv; 反向代理到mysrv负载池。
- root html; 网页文件根目录,后端server 默认路径。
- }
- location ~.*\.(php|jsp|cgi)?${
- 动态可直接proxy_pass到后端web池.http://websrv;
- }
-
- location / 匹配以/开头的url
- {
- proxy_next_upstream http_502 http_504 error timeout invalid_header;
- 如果后端服务器返回502,504,执行超时错误,自动请求转发到后端另一台server,故障切换。
- proxy_pass http://mysrv;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- }
-
limit_conn myzone 100; 限制单个IP的100个并发访问数.
- access_log /var/log/nginx/access.log main;
- }
-
- server{ 第二个虚拟主机,反向代理websrv负载组
- listen 80;
- server_name www1.domain.com;
- 访问http://www1.domain.com/message/...地址,反向代理到message_server池
-
-
location /message/
- {
- proxy_pass http://message_server;
- proxy_set_header Host $host;
- }
-
- 访问除了/message/之外的http://www1.domain.com/.....地址,反向代理到websrv
-
location /
- {
- proxy_pass http://websrv;
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- }
- access_log /var/log/nginx/message.access;
- }
-
-
-
}
Nginx作为反向代理,利用upstream模块支持多组负载均衡,方式:
a) 轮询:每个请求按时间顺序依次分配到不同后端server.如何后端server down掉,能自动排除。b) 权重: 根据weight值越大的后端server优先。指定轮询机率。c) Ip_hash:如客户端IP第一次访问后端A-server,输入用户名密码后第二次可能分发到后端B-server,ip_hash利用hash_key值按访问ip的hash结果分配即进行哈希算法使其同一IP第二次会话保持访问至同一后端server. 此种方式能解决session问题,每个访客固定访问一个后端server.d) 利用hash算法此种方式无法进行负载均衡。e) url_hash:按访问url的hash结果分配,使每个url定向到同一后端server.如果后端是缓存server比较长有效,,如squid,可以增加squid命中率。f) Fair:按后端服务器响应时间来分配请,响应时间短的优先分配。Location 对url进行匹配,可以进行重定向或新的代理,负载均衡。三、nginx缓存模块proxy_cache说明参考(这里省去全局配置部分,只列http标签部分):
- http{
- ....
- proxy_temp_path /data/proxy_temp_path;
- proxy_cache_path /data/proxy_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d
max_size=30g;
- proxy_temp_path,proxy_cache_path路径须在同一分区下。
- 设置web缓存区名cache_one,内存缓存空间大小200M,自动清除超过1天没有访问的缓存数据,硬盘缓存空间大小30G。
- .....
- upstream my_srv{
- server ....
- server ....
- }
- server{
- ........
- location /
- {
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- proxy_pass http:mysrv;
-
- location ~.*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
- {
- proxy_cache cache_one; 使用缓存区
-
- proxy_cache_valid 200 304 12h;
- proxy_cache_valid 301 302 1m;
- proxy_cache_valid any 1m;
- 对不同状态码缓存时间不一样。
-
- proxy_cache_key $host$uri$is_args$args;
- nginx根据key值md5哈希存储缓存,一般根据域名,URL,参数组成key.
-
- proxy_set_header Host $host;
- proxy_set_header X-Forwarded-For $remote_addr;
- proxy_pass http:mysrv;
- 反向代理,访问后端.
-
- location ~/purge(/.*) 清除缓存http://.../purge/..
- {
- allow 127.0.0.1; 允许执行清除的IP段
- allow 192.168.1.0/16;
- deny all;
- proxy_cache_purge cache-one $host$1$is_args$args;
- }
- access_log /var/log/nginx/purge.access main;
-
- }
- }
四、nginx作web服务器,相关网上nginx+php(利用fastcgi技术)实现高性能WEB服务器的博文已经很多,不作总结了....
配置只是现学现卖,知其然,知其所以然,了其原理,有个清晰的思路才是最重要的...
如上只是个人博客总结文, 若有误,欢迎指正...
nginx相关模块可参考nginx官方或nginx中文手册,张宴的那本nginx书写的很不错,很详细可以参考....
分享到:
相关推荐
nginx 负载均衡与缓存服务器标准配置文件
nginx tomcat负载均衡缓存服务器集群
Maven Spring(IOC DI AOP 声明式事务处理) SpringMVC(支持Restful风格) ...Nginx静态加载、负载均衡 基于keepalived的nginx高可用方案 Tomcat集群(Redis共享Session) Sping Shiro权限控制(待完善)
nginx反向代理、负载均衡、缓存静态资源、URL重定向、读写分离.zip
Nginx 负载均衡和反向代理配置和优化 DNS 轮询方式: 介绍: DNS 轮询是指一个域名可以绑定到多个的 ip 服务器上, 用户在访问的时候 dns轮询访问这几个 ip 的服务器, 达到负载均衡的目的. 可以使用 linux 命令 dig ...
nginx+tomcat7负载均衡+redis缓存session
基于Redis缓存数据库和Nginx负载均衡技术的购物网站性能优化.docx
简单介绍Nginx,实现负载均衡的配置和使用缓存存储静态资源文件,并可以通过purge模块删除缓存
nginx-0.8.51下载 tomcat-6.0.20下载 pcre-8.12下载 2 环境描述 window7下运行的centos5.4的Vmware7虚拟机 nginx-0.8.51 tomcat-6.0.20 pcre-8.12 jdk-6u7-linux-i586 3 安装步骤 3.1 安装nginx所需的pcre ...
Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
Nginx作为动静分离、缓存与负载均衡初探1
文档非常详细介绍了linux下nginx+tomcat负载均衡配置 包括nginx安装 nginx配置 tomcat配置 验证配置与测试负载均衡 nginx与tomcat动静态请求分离配置 nginx缓存配置。
注,操作系统为 CentOS ...主要的知识点有nginx的理论详解、nginx作为web服务器的操作讲解、nginx作为LNMP架构的讲解,不清楚的博友可以回头看看,在这一篇博客中我们主要讲解, nginx的反向代理、负载均衡、缓存、URL
【Nginx】 大名鼎鼎,麻雀虽小五脏俱全,它拥有小而稳且高效的特性。为目前大多数中小企业所使用。...反向代理、负载均衡、动静分离、网页、图片缓存。 本篇介绍Linux下Nginx+多Tomcat负载均衡实现详解,亲测。
Nginx相较于 Apache、lighttpd 具有占有内存少,稳定性高等优势,并且Nginx有反向代理、负载均衡和缓存数据的功能。 反向代理:其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求...
Nginx_反向代理、负载均衡、页面缓存、URL重写及读写分离详解
nginx(engine x) 是一个 高性能 的 HTTP 和 反向代理 服务器、邮件代理服务器以及通用的 TCP/UDP 代理服务器。...此外,nginx 还可以用于代理、反向代理、负载均衡、缓存等服务器功能,在集群环境中改善网络负载
第2.6篇-Nginx部分-反向代理和负载均衡-负载均衡配置 共9页 第2.7篇-Nginx部分-Rewrite功能 共29页 第2.8篇-Nginx部分-Nginx工作原理 共15页 第2.9篇-Nginx部分-与Tomcat整合配置 共14页 第3篇-Memcached缓存篇 共30...