文档章节

nginx负载均衡配置

五大三粗
 五大三粗
发布于 2015/04/25 14:50
字数 1911
阅读 28
收藏 2
#user  nobody;
worker_processes  1;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
pid /var/run/nginx/nginx.pid;


events {
    worker_connections  1024;
    multi_accept on;
    use epoll;
}


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;
    tcp_nopush on; #防止网络阻塞
    tcp_nodelay on; #防止网络阻塞
    #keepalive_timeout  0;
    keepalive_timeout  10;
    client_header_timeout 10;
    client_body_timeout 10;
    reset_timedout_connection on;
    send_timeout 10;
    #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k; 
    #gzip  on;
    gzip_http_version 1.0;
    gzip_min_length 1000; 
    gzip_comp_level 4; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; 
    upstream webservers{
        #负载均衡模块
    #   server 10.10.21.23 max_fails=3 fail_timeout=5s weight=1;
    #   server 10.10.21.133 max_fails=3 fail_timeout=5s  weight=1;
       #使同一ip定向到同一后端服务器,以共享会话session
      # ip_hash;
      # server 10.10.21.135 weight=1;
      # server 10.10.21.138 weight=1;
        server 10.10.21.135 max_fails=3 fail_timeout=5s weight=1;
        server 10.10.21.138  max_fails=3 fail_timeout=5s weight=1;
       #备用服务器,这里指本机的8080端口上 
        server 127.0.0.1:8080 backup;          
                      }
     #定义缓存路径,级别,缓存区域大小,和最大缓存大小
     proxy_cache_path /nginx/cache/first levels=1:2:1 keys_zone=a:20m max_size=1g;
   # proxy_connect_timeout 300;
   #proxy_read_timeout 300;
    #proxy_send_timeout 300;
      #对所以server都生效
    server {
        listen       80;
        server_name  localhost;
large_client_header_buffers 4 16k;
client_max_body_size 30m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_read_timeout 300;
proxy_send_timeout 300;
proxy_buffer_size 64k;
proxy_buffers   4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        #location / {
        #    root   /web/htdocs;
        #    index  index.php index.html;
        #}
        add_header x-via $server_addr;
        #添加首部信息,是否缓存命中,在浏览器中F12可查看
        add_header x-cache $upstream_cache_status;
        

        #nginx服务器的状态
        location /nginx_status{
             stub_status on;
        }
        #error_page  404              /404.html;
	#location ~*^/forum {
	#proxy_pass http://10.10.21.133;
        #proxy_set_header X-Real-IP $remote_addr;
	#}
        
# redirect server error pages to the static page /50x.html        #

	location / {
	#proxy_pass http://10.10.21.133/;
        #将所以请求都转发到上面定义的upstream
	proxy_pass http://webservers/;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
#    proxy_connect_timeout 10;
#proxy_read_timeout 10;
#proxy_send_timeout 10;
#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服务器传
	proxy_cache a;
        #关闭缓存功能
    #    proxy_cache off;
    #    proxy_cache_valid 200 10m;
                   }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        location ~.*\.(gif|jpg|jpeg|png|bmp|swf|css|js)$
        {
#        root /var/www/qa-theme/Candy;
        #proxy_pass http://10.10.21.135/var/www/question2answer/qa-theme;
        proxy_pass http://10.10.21.135;
      #  if (-f $request_filename){
      #     expires 1d;
      #     break;   
      #     }
        }
        #location ~.*\.js$
        #{
        #root /var/www/qa-content;
        #proxy_pass http://10.10.21.135;
        #if (-f $request_filename){
         #  expires 1d;
         #  break;   
          # }
          #}        


# proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #   proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #所有PHP页面都转发到本地的PHP服务器上
#        location ~ \.php$ {
#	    index index.php index.html;
#            root           /web/htdocs;
#            fastcgi_pass   127.0.0.1:9000;
#            fastcgi_index  index.php;
#            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#            include        fastcgi_params;
#        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    #错误页面
    server{
        listen 8080;
        server_name localhost;
        root /web/errorpages;
        index index.html;
          }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}


    # HTTPS server
    #
    #server {
    #    listen       443;
    #    server_name  localhost;

    #    ssl                  on;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_timeout  5m;

    #    ssl_protocols  SSLv2 SSLv3 TLSv1;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers   on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}


nginx负载均衡的实现过程
在配置文件中加入:
upstream php_server_pool{
    server 192.168.4.178:80 weight=4 max_fails=2 fail_timeout=30s;
    server 192.168.4.179:80 weight=2 max_fails=2 fail_timeout=30s;
    server 192.168.4.180:80 weight=2 max_fails=2 fail_timeout=30s;
    /*
    weight设置服务器的权重,权重数越高,被分配到的客户端请求就越多,如果没有设置,权重为1
    max_fails--在参数fail_timeout指定的时间内对后端服务器请求失败的次数
    fail_timeout 在经历参数max_fails设置的失败次数后,暂停的时间
    down 标记服务器为永久离线状态,用于ip_hash指令
    backup 仅仅在非backup服务器全部宕机或繁忙的时候才启用
    */
}
设置一个虚拟主机反向代理上面的群组服务器
server
{
    listen 80;
    server_name 192.168.4.177;
    location /
    {
        proxy_next_upstream http_502 http_504 error timeout invalid_header;
        proxy_pass http://php_server_pool;
        proxy_set_header Host 192.168.4.177;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
    access_log /usr/local/nginx/logs/php_server_pool.log
}
    注意:       upstream 指令用于设置一组可以在proxy_pass和fastcgi_pass指令中使用的代理服务器,默认的负载均衡方式为轮询.upstream模块中的 server指令用于指定后端服务器的名称和参数,服务器的名称可以是一个域名,一个ip地址,端口号或者UNIX Socket.
       而在server{..}虚拟主机内,可以通过proxy_pass和fastcgi_pass指令设置进行反向代理的upstream服务器集群
       proxy_set_header指令用于在向反向代理的后端WEB服务器发起请求时添加指定的header头信息
       当后端WEB服务器上有多个基于域名的虚拟主机时,要通过添加header头信息Host,用于指定请求的域名,这样后端服务器才能识别该反向代理访问请求是由那一个虚拟主机来处理  
       使 用反向代理之后,后端web服务器就不能直接$_SERVER['REMOTE_ADDR']变量来获取用户的真实ip了,通 过$_SERVER['REMOTE_ADDR']获得的将是负载均衡器的ip.这时,就要通过Nginx反向代理时添加Header头信息X- Forwarded-For,让后端web服务器能够通过$_SERVER['HTTP_X_FORWARDED_FOR']获取到用户的真实ip
   
nginx的proxy_cache相关指令集
     1.proxy_cache:该指令用于设置那个缓存区将被使用
     2.proxy_cache_path:该指令用于设置缓存文件的存放路径
   示例:proxy_cache_path /web/server1 levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g
   该指令只能在http标签内配置,levels指定该缓存空间有两层hash目录,第一层为1个字母,第二层为2个字母;
   keys_zone参数用来为这个缓存区起名,500m指内存缓存空间大小为500MB;inactive的1d指如果缓存数据在1天内没有被访问,将被删除;max_size的30g是指硬盘缓存空间为30GB
     3.proxy_cache_methods:该指令用于设置缓存那些http方法,默认缓存get和head,不缓存post
     4.proxy_cache_min_uses:该指令用于设置缓存的最小使用次数,默认为1
     5.proxy_cache_valid:该指令用于对不同返回状态码的url设置不同的缓存时间
   例如:
    proxy_cache_valid 200 302 10m
    proxy_cache_valid 404 1m
   设置 200,302的状态码缓存10分钟,404的状态码url缓存1分钟 
    proxy_cache_valid 5m
   如果不指定状态码,直接指定缓存时间,则只有200,301,302状态的url缓存5分钟
   6.proxy_cache_key:该指令用来设置web缓存的key值,nginx根据key值md5哈希存储缓存。一般使用$host(域名),$request_uri(请求的路径)等变量组合成proxy_cache_key.
   例如:
     proxy_cache_key "$host:$server_port$uri$is_args$args";   
    
以下是一个完整的缓存服务的配置:
      在/usr/local/nginx下面创建一个cache目录,在里面创建2个目录proxy_temp_path和proxy_cache_path
      在nginx的配置文件中设置相关参数:
   proxy_temp_path /usr/local/nginx/cache/proxy_temp_path;
   proxy_cache_path /usr/local/nginx/cache/proxy_cache_path levels=1:2 keys_zone=cache_one:200m 
   inactive=1d max_size=30g;

upstream my_server_pool{
    server 192.168.4.179:80 weight=2 max_fails=2 fail_timeout=30s;
    server 192.168.4.180:80 weight=2 max_fails=2 fail_timeout=30s;
}

server
{
    listen 80;
    server_name 192.168.4.178;
    location /
    {
        proxy_set_header Host 192.168.4.178
        proxy_set_header X-Forwarded-For $remote_addr
        proxy_pass http://my_server_pool
    }
    
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$
    {
        #使用web缓存区cache_one
        proxy_cache cache_one;
        #对不同http状态码缓存设置不同的缓存时间
        proxy_cache_valid 200 304 12h;
        proxy_cache_valid 301 302 1m;
        proxy_cache_valid any 1m;
        #设置web缓存的key值,nginx根据key值md5哈希存储缓存,这里根据'域名,URI,参数'组合成key
        proxy_cache_key $host$uri$is_args$args;
        #反向代理,访问后端内容源服务器
        proxy_set_header Host 192.168.4.178;
        proxy_set_header X-Forwarded-For $remote_addr
        proxy_pass http://my_server_pool;
    }
    #用于清除缓存,假设一个URL为http://192.168.4.178/test.gif,通过访问
    #http://192.168.4.178/purge/test.gif可以清楚该url的缓存
    location ~ /purge(/.*)
    {
        #设置值允许指定的ip或ip段才可以清除URL缓存
        allow 127.0.0.1
        allow 192.168.0.0/16;
        deny all;
        proxy_cache_purge cache_one $host$1$is_args$args
    }
    access_log off;
}

© 著作权归作者所有

五大三粗
粉丝 163
博文 2290
码字总数 4763735
作品 0
广州
程序员
私信 提问
Nginx 配置实践

nginx 一般用作请求转发,用作服务器集群的负载均衡 典型的高并发集群是 nginx+tomcat(多个) nginx可以高效处理对静态文件的请求,tomcat 负责动态请求 配置范例: #user nobody;worker_pr...

HZCoder
2016/03/29
49
0
Nginx安装负载均衡配置 fair check扩展

Nginx安装负载均衡配置 fair check扩展 前言 本文主要是针对Nginx安装、负载均衡配置,以及fair智能选举、check后端节点检查扩展功能如何扩展,进行讲解说明。 fair模块: upstream-fair,“...

linjin200
2018/07/19
0
0
分布式学习(3) ---- 初识Nginx

Nginx两大作用:1.轻量web容器 2.反向代理服务器。 在Java领域中,Nginx更多的被用作在前端提供负载均衡的反向代理服务。 所以本文仅简要介绍下反向代理概念和负载均衡的实现。 . 反向代理 ...

KKys
2017/02/06
0
0
Nginx系列-11.配置Nginx反向代理和负载均衡

Nginx系列-11.配置Nginx反向代理和负载均衡 目录 - Nginx系列 Nginx系列-1.Linux下安装Nginx Nginx系列-2.配置LNMP(Linux、Nginx、MySQL、PHP)架构 Nginx系列-3.配置Nginx虚拟主机 Nginx系...

ngle
2018/06/10
0
0
Keepalived高可用集群应用场景与配置

1.Keepalived单实例主备模式集群方案 这是最简单的模式,不只考虑高可用集群,先不考虑后方的Nginx负载均衡集群,即后端的服务器集群,参考下面的图示: 其对应的Keepalived核心配置如下: ...

xpleaf
2017/03/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【AI实战】手把手教你深度学习文字识别(文字检测篇:基于MSER, CTPN, SegLink, EAST等方法)

文字检测是文字识别过程中的一个非常重要的环节,文字检测的主要目标是将图片中的文字区域位置检测出来,以便于进行后面的文字识别,只有找到了文本所在区域,才能对其内容进行识别。 文字检...

雪饼
今天
6
0
思维导图XMind 8 Pro 绿化方法(附序列号)

按部就班: Step 1 -全新下载最新版本的 Xmind 8(注必须是英文官方的版本,中文代{过}{滤}理网站的版本修改过,无法使用pj); Step 2 -安装完毕后,点击文末的下载按钮下载pj补丁文件包,将...

一只小青蛙
今天
10
0
数据结构(ER数据库)设计规范

表命名规范 表命名的规则分为3个层级,层级之间通过_分割,例如b_r_identity、d_l_identity。规约为: [leavel]_[type]_[name] [leavel] 表示数据库表的层级和功能,分为: s:业务无关的系统...

随风溜达的向日葵
今天
5
0
阿里Sentinel控制台源码修改-对接Apollo规则持久化

https://github.com/alibaba/Sentinel/wiki/%E5%9C%A8%E7%94%9F%E4%BA%A7%E7%8E%AF%E5%A2%83%E4%B8%AD%E4%BD%BF%E7%94%A8-Sentinel 动态规则扩展 https://github.com/alibaba/Sentinel/wiki......

jxlgzwh
昨天
8
0
在Linux系统中创建SSH服务器别名

如果你经常通过 SSH 访问许多不同的远程系统,这个技巧将为你节省一些时间。你可以通过 SSH 为频繁访问的系统创建 SSH 别名,这样你就不必记住所有不同的用户名、主机名、SSH 端口号和 IP 地...

老孟的Linux私房菜
昨天
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部