• nginx实现反向代理和负载均衡


    利用nginx做反向代理和负载均衡是减轻服务器压力的有效方式。nginx代理服务器接收多个客户端请求,

    根据配置的参数均衡到每个tomcat服务器上,tomcat处理请求,返回响应结果给nginx,nginx再返回给指定客户端。

    而一些静态的资源可以由nginx直接返回给客户端。这样减轻了tomcat服务器的压力,如下图。

    反向代理:代理服务器,利用代理服务器接收请求及返回响应内容

    正向代理:代理客户端,如VPN,是改变客户端的节点

    利用nginx做反向代理需要在nginx.conf的server中添加proxy_pass,并且远程访问的ip会变成

    nginx代理服务器的ip,需要在请求头中原客户端的ip地址:

    proxy_set_header X-real-ip $remote_addr;
    proxy_pass http://myupstream;

    这里myupstream是upstream流的名称,upstream是用来做负载均衡的,在http的配置内容下定义upstream

    #负载均衡配置
    upstream myupstream {
    server 192.168.18.128:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.18.128:8081 weight=1 max_fails=2 fail_timeout=30s;
    }

    负载均衡有下面几个参数:

      weight:基于权重,weight值越高被访问的频率越高,这里8080和8081的访问频率相等,采用轮询,一次8080,一次8081

     server 192.168.18.128:8080 weight=1 ;
    server 192.168.18.128:8081 weight=1;

      ip hash:同一ip访问同一服务器,当同一个客户端ip访问时,会使用上次处理的服务器,

              不会造成上一次访问存在另一台服务器上的会话信息丢失问题 。

    upstream myupstream {
    server 192.168.18.128:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.18.128:8081 weight=1 max_fails=2 fail_timeout=30s;
    ip hash; }

      fair:基于响应时间,每次都会将请求转发给响应时间更短的服务器处理

    upstream myupstream {
    server 192.168.18.128:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.18.128:8081 weight=1 max_fails=2 fail_timeout=30s;
    fair; }

    下面是nginx代理服务器的全部配置:

    worker_processes 1;
    
    events {
    worker_connections 1024;
    }
    
    http {
    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/test1.log main;
    include mime.types;
    default_type application/octet-stream;
    fastcgi_intercept_errors on;
    charset utf-8;
    server_names_hash_bucket_size 128;
    client_header_buffer_size 4k;
    large_client_header_buffers 4 32k;
    client_max_body_size 300m;
    sendfile on;
    tcp_nopush on;
    keepalive_timeout 60;
    
    tcp_nodelay on;
    client_body_buffer_size 512k;
    proxy_connect_timeout 5;
    proxy_read_timeout 60;
    proxy_send_timeout 5;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;
    
    #负载均衡配置
    upstream myupstream {
    server 192.168.18.128:8080 weight=1 max_fails=2 fail_timeout=30s;
    server 192.168.18.128:8081 weight=1 max_fails=2 fail_timeout=30s;
    }
    server{
    listen 80;
    server_name nginx.test.com;
    access_log logs/test1.log main;
    location /{
    proxy_set_header X-real-ip $remote_addr;
    proxy_pass http://myupstream;
    root html;
    
    index index.html index.htm;
    }
    }
    
    server{
    listen 81;
    server_name nginx.test1.com;
    location /{
    root html;
    index index.html index.htm;
    }
    }
    
    server {
    listen 82;
    server_name nginx.test2.com;
    
    location / {
    root html;
    index index.html index.htm;
    }
    
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    
    root html;
    }
    }
    } 
  • 相关阅读:
    Javascript中Promise对象的实现
    SQL 问题记录
    转:十步完全理解SQL
    转:SQL Server 动态行转列
    SQL in、not in、exists和not exists的区别:
    SQL之left join、right join、inner join的区别
    转 .NET4.5之初识async与await
    macOS USB连接iPhone反复重连解决方法
    MacOS: 找到被占用的端口并释放
    解决rust编译包含diesel类库时,cannot find -lmysqlclient的错误
  • 原文地址:https://www.cnblogs.com/coder-lichao/p/10951620.html
Copyright © 2020-2023  润新知