• nginx的反向代理和负载均衡


    一、正向代理

    正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

    使用正向代理服务器的作用:

    1.1 访问本无法访问的服务器B。翻墙、VPN技术的应用

    1.2 加速访问服务器。代理服务器高带宽,可以加速访问服务器B

    1.3 缓存

    1.4 客户端访问权限

    1.5 隐藏访问者的行踪

    二、反向代理

      客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。

      反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

    反向代理的作用:

    1.1 保证内网的安全,隐藏原始服务器

    1.2 负载均衡。反向代理多个服务器

    2.1 反向代理的配置

    user  nginx; #使用者名称
    worker_processes  1; #进程数,一般设置和cup内核数一样
    
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
    
    #pid        logs/nginx.pid;
    
    
    events {
        worker_connections  1024;#并发数
    }
    
    
    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;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        #gzip  on;
    
        server {
            listen       80;
            server_name  www.myvick.cn; #域名
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
            # 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
            #
            location ~ .php$ {
                root           html;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
            location / {
           index index.html index.php #默认访问的文件
              root /usr/local/nginx/html #访问文件的目录
               #设置主机头和客户端真实地址,以便服务器获取客户端真实IP
    
                 proxy_set_header Host $host;  #默认情况下反向代理是不会转发请求中的Host头部的。如果需要转发,那么必须加上配置
                 proxy_set_header X-Real-IP $remote_addr; #获取web服务器端获得用户的真实ip
                 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #配置后,web服务器端通过request.getAttribute("X-Forwarded-For")
                                                 #获得的将会是客户端ip和第一台nginx的ip
                 proxy_method               POST #那么客户端发来的GET请求在转发时方法名也会改为POST
               client_max_body_size       10m; #允许客户端请求的最大单文件字节数
               client_body_buffer_size    128k; #缓冲区代理缓冲用户端请求的最大字节数
                proxy_connect_timeout      300; #nginx跟后端服务器连接超时时间(代理连接超时)
                proxy_send_timeout         300; #后端服务器数据回传时间(代理发送超时)
                proxy_read_timeout         300; #连接成功后,后端服务器响应时间(代理接收超时)
                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_buffering off;
    
                 #设置反向代理的地址
    
                 proxy_pass http://192.168.1.1;       
    
          ··}
            # deny access to .htaccess files, if Apache's document root
            # concurs with nginx's one
            #
            #location ~ /.ht {
            #    deny  all;
            #}
        }
    
    
        # 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 ssl;
        #    server_name  localhost;
    
        #    ssl_certificate      cert.pem;
        #    ssl_certificate_key  cert.key;
    
        #    ssl_session_cache    shared:SSL:1m;
        #    ssl_session_timeout  5m;
    
        #    ssl_ciphers  HIGH:!aNULL:!MD5;
        #    ssl_prefer_server_ciphers  on;
    
        #    location / {
        #        root   html;
        #        index  index.html index.htm;
        #    }
        #}
    
    }

    3.负载均衡

      nginx 的 upstream默认是以轮询的方式实现负载均衡,这种方式中,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    另外一种方式是ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 

    upstream myvic{
                 #ip_hash;
                 server 192.168.1.251 weight=1 fail_timeout=20s;
                 server 192.168.1.252 weight=2 fail_timeout=20s;;
                 server 192.168.1.247 weight=3 fail_timeout=20s;;#可以给服务器加权重
            }
    server {
    
            listen       80;
            server_name  www.myvick.cn;
            location / {
                 #反向代理的地址
                 proxy_pass http://myvic;     
            }
    }

     第二种配置:ip_hash轮询方法,不可给服务器加权重

    upstream myvic {
           server 192.168.196.130 fail_timeout=20s;
           server 192.168.196.132 fail_timeout=20s;
         ip_hash;
     }
     server {
             listen 80;
             server_name www.myvick.cn;
          index index.html index.htm index.php;
          location / {
                  proxy_pass http://myvic;
              proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header; #当其中一台返回错误码404,500...等错误时,
                        #可以分配到下一台服务器程序继续处理,提高平台访问成功率,多可运用于前台程序负载,设置proxy_next_upstream
            
             proxy_next_upstream off;#关闭请求下一个服务器
             include proxy.conf; 
          }
    } 方法二 nginx负载均衡基于ip_hash实现session粘帖

    4.Nginx服务器的rewrite功能

    地址转发后客户端浏览器地址栏中的地址显示是不变的,而地址重写后地址栏中的地址会变成正确的地址。
    在一次地址转发过程中只会产生一次网络请求,而一次地址重写产生两次请求。
    地址转发一般发生在同一站点项目内,而地址重写则没有限制。
    地址转发到的页面可以不用全路径名表示,而地址重写到的页面必须使用完全的路径名表示。
    地址转发过程中,可以将客户端请求的request范围内的属性传递给新的页面,但地址重写不可以。
    地址转发的速度比地址重写的速度快。

     rewrite指令:通过正则表达式的匹配来改变URI,可以同时存在一个或多个指令,按照顺序依次对URI进行匹配

     redirect:将重写后的URI返回给客户端,状态码为302,指明是临时重定向URI,主要用在replacement变量不是以http或https开头的情况下。

    三、透明代理

      透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了。

     参考文档:http://blief.blog.51cto.com/6170059/1739178

    http://www.cnblogs.com/jacktang/p/3669115.html

  • 相关阅读:
    海康、大华摄像头RTSP接入实现WEB端无插件流媒体服务EasyNVR实现海康大华宇视摄像头内容网页播放的方法
    【 D3.js 高级系列 — 6.0 】 值域和颜色
    物联网操作系统HelloX V1.78测试版正式发布
    【 D3.js 高级系列 — 5.1 】 颜色插值和线性渐变
    清华尹成老师主办的智锋互联
    【 随笔 】 D3 难吗?
    禅道,然之和蝉知入驻VM Depot
    【 D3.js 高级系列 — 5.0 】 颜色
    尹成老师主办培训教学机构 智锋互联 传播智慧我们用心,人生冲锋你们用心
    体验Azure的 Automation “自动化” 服务预览版
  • 原文地址:https://www.cnblogs.com/myvic/p/7708327.html
Copyright © 2020-2023  润新知