• nginx 负载均衡详解


    配置文件

    upstream abc {
    server 192.168.2.188:8080 weight=1 max_fails=3 fail_timeout=30;
    定义集群,weight=权重轮询,max_fails=请求失败次数,fail_timeout=失败超时时间
    }
    
    server {
    listen 8000;
    server_name web1.abc.com;
    
    location / {
    proxy_read_timeout 300;                          #连接成功后,等候后端服务器响应时间(后端服务器处理请求的时间)
    proxy_connect_timeout;                           #后端服务器连接的超时时间
    proxy_send_timeout;                              #后端服务器数据回传时间,在规定时间内后端服务器必须传完所有的数据
    proxy_set_header Host $host;                     #代理服务器发送请求头部中加入host字段信息,用于后端多个虚拟主机。
    proxy_set_header X-Real-IP $remote_addr;         #远端真实ip,多级代理中正向代理记录真实ip,反向代理记录连接的客户端ip
    proxy_set_header X-Forwarded-For $remote_addr;   #远端真实ip,多级代理会追加记录
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   #在原有请求头X-Forwarded-For字段的基础上增加了连接nginx的服务器ip地址
    proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr"; #相当于上面的命令
    proxy_next_upstream error timeout http_404 http_502 non_idemponent(请求方法POST,LOCK,PATCH);   #访问错误,允许转发到其他服务器 } } server { listen
    8000; server_name aaa.com access_log logs/aaa.access.log; #访问日志 error_log logs/aaa.error.log; #错误日志 location ^~ /.well-known { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://www.weixin.com; }
    location
    /tomcat { proxy_read_timeout 300; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass abc; }
    location
    /solr { proxy_read_timeout 300; proxy_pass abc
    } server { listen
    8000; server_name images.abc.com; access_log logs/image.access.log; error_log logs/image.error.log;
    location
    / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 150; proxy_send_timeout 100; proxy_read_timeout 100; proxy_buffers 4 32k; #缓冲区的数量和大小 client_max_body_size 1m; #上传文件最大值 client_body_buffer_size 64k; #请求体缓存区大小 root /home/tom/data/images/; #图片目录 } location /images.abc.com { rewrite '^/images.abc.com/(.*)$' http://images.abc.com/$1; } } server { listen 8001; server_name api.tt.com; access_log logs/proxy.access.log; error_log logs/proxy.error.log;
    location
    / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://www.tt.com; } } log_format mainAccess '$remote_addr - $remote_user [$time_local] $http_host $request_method "$uri" "$query_string" $status "$http_x_forwarded_for" [$request_body] [$ssl_client_s_dn]'; 日志格式 $remote_addr #客户端地址 211.28.65.253 $remote_user #客户端用户名称 -- $time_local #访问时间和时区 18/Jul/2012:17:00:01 +0800 $http_host #请求地址,即浏览器中你输入的地址(IP或域名) www.abc.com 192.168.100.100 $request_method #访问页面的请求方法 get $uri #请求的文件和路径,不包含”?”或者”#”之类的东西 $query_string #GET请求中的参数 foo=123&bar=blahblah;这个变量只可以被修改 $status HTTP #请求状态 200 $http_x_forwarded_for #真实IP地址 $request_body #记录POST请求 $ssl_client_s_dn     #返回建立的SSL连接中客户端证书的DN主题字段 ------------------------------------------------------------------------------------------------------- $upstream_status #upstream状态 200 $body_bytes_sent #发送给客户端文件内容大小 1547 $http_referer #url跳转来源 https://www.baidu.com/ $http_user_agent #用户终端浏览器等信息 $upstream_addr #后台upstream的地址,即真正提供服务的主机地址 10.10.10.100:80 $request_time #整个请求的总时间 0.205 $upstream_response_time #请求过程中,upstream响应时间 0.002日志格式 客户端地址 客户端用户 访问时间和时区 $request #请求的URI和HTTP协议 GET /article-10000.html HTTP/1.1 $request_uri #请求的整个字符串,包含了后面请求的东西 $ssl_cipher #返回SSL连接中使用的密码字段的算法。 RC4-SHA $ssl_client_serial #返回SSL连接中客户端证书的序列号。 $ssl_client_s_dn #返回SSL连接中客户端证书的DN主题字段。 $ssl_client_i_dn #返回SSL连接中客户端证书的DN发行者字段。 $ssl_protocol #返回SSL连接中使用的协议。 TLSv1 $ssl_session_id #需要0.8.20以上版本。 $ssl_client_verify #如果客户端证书审核通过,这个变量为“SUCCESS”。 $ssl_client_raw_cert #返回SSL连接的PEM格式客户端证书; server { listen 9001; server_name api.tt.com; access_log logs/proxy.access.log mainAccess; error_log logs/proxy.error.log;
    location / {
    proxy_set_header Host 'api.tt.com';
    proxy_set_header X-SSL-CERT $ssl_client_raw_cert;                 #通过X-SSL-Cert包头向服务器提供证书信息
    proxy_ssl_certificate     /home/tom/data/cert/apiclient_cert.pem;
    proxy_ssl_certificate_key /home/tom/data/cert/apiclient_cert.key;
    proxy_pass https://123.123.123.123;
    }
    }
    
    server { 
    listen 9002;
    access_log logs/proxy.access.log;
    error_log logs/proxy.error.log;
    
    location
    / { resolver 8.8.8.8; #正向代理,DNS 解析 IP 地址 proxy_pass $scheme://$http_host$request_uri;
    #
    $scheme: 所用的协议,http或https #$http_host: 始终等于HTTP_HOST请求标题 #$host :等于$http_host,小写且无端口号,若HTTP_HOST不存在或空值,等于server_name的值 #$request_uri: 完整url中去最前面$host的部分,如:www.qq.com/a/b?c=6,$request_uri== /a/b?c=6 proxy_buffers 256 4k; #缓冲区的数量和大小 proxy_max_temp_file_size 0k; #关闭临时文件缓冲 } } server { listen 9003; server_name 192.168.2.2; access_log logs/proxy.access.log; error_log logs/proxy.error.log;
    location
    / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.2.100:9000; } } server { listen 9004; server_name 192.168.2.2; access_log logs/file.access.log; error_log logs/file.error.log;
    location
    / { root /home/tom/data/files; } } server { listen 9000; server_name 192.168.2.2 down.abc.com; access_log logs/file.access.log; error_log logs/file.error.log;
    location
    / { root /home/tom/data/files; } } server { listen 9443; server_name 192.168.2.2 down.abc.com; access_log logs/file.access.log; error_log logs/file.error.log;
    location
    / { root /home/tom/data/files; } } 第一版配置: proxy_set_header X-Forwarded-For $remote_addr; #如上配置只能增加负载均衡ip地址,丢失了客户端真实ip和任意中间代理ip 第二版配置 proxy_set_header X-Forwarded-For "$http_x_forwarded_for, $remote_addr"; #如上配置在原有请求头X-Forwarded-For字段的基础上增加了连接nginx的服务器ip地址 第三版配置(最为简单) proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #$proxy_add_x_forwarded_for已经实现了第二版的功能,直接使用该内置变量即可

    最常用的配置

  • 相关阅读:
    启动 Appium 自带模拟器
    Android的一些常用命令提示符(cmd)指令
    Eclipse中没有andriod问题解决方法
    selenium键盘操作
    鼠标事件
    appium运行from appium import webdriver 提示most recent call last
    appium for windows 环境搭建
    python+Eclipse+pydev环境搭建
    nmon和nmon analyser的下载和使用
    Linux下使用NMON监控、分析系统性能
  • 原文地址:https://www.cnblogs.com/wuhg/p/9487268.html
Copyright © 2020-2023  润新知