Nginx系列之Nginx反向代理

518 阅读2分钟

Nginx反向代理

什么是反向代理

反向代理(Reverse Proxy)是指以代理服务器来接受用户的请求,然后将用户请求转发到真正的服务器中,真实服务器获得结果返回给代理服务器后,代理服务器把结果返回给用户。代理服务器就是对外表现的一个服务器。

image.png

反向代理的作用

  • 隐藏真实的服务器地址,除了可以防止外网对内网服务器的恶性攻击、缓存以减少服务器的压力和访问安全控制

  • 便于横向扩充后端的动态服务

  • 动静分离,提升系统的文件性

  • 进行负载均衡,将用户请求分配给多个服务器,减轻服务器的压力

配合Nginx反向代理代码

http {

    include mint.type;
    default^type application/octet-stream;
    frcharset utf-8;
    server_ncimes_hash_bucket:_si ze128;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    
    sendfile on;
    # tcp_nopushon;
    keepalive_timeout 65;
    tcp_nodelay on;
    
    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;
    
    #limit_zone crawler $binary_remote_addr 10m;
    #允许客户端请求的最大单个文件字节数
    client_max__body_size300m;
    #緩冲区代理缓冲用户端请求的最大字节数,可以理解为先保存到本地再传给用户
    c1ient_body_buffer_size 128k;
    #跟后端服务器连接的超时时间—发起握手等候响应超时时间
    proxy_connect_timeout 600;
    #连接成功后等候后端服务器响应时间一其实已经进入后端的排队之中等候处理
    proxy_reai_timeout 600;
    #后端服务器数据回传时间—就是在规定时间内后端服务器必须传完所有的数据
    proxy_send_timeout 600;
    
    #代理请求缓存区一这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可
    proxy_buffer_size 16k;
    
    #如果系统很忙的时候可以申请更大的proxy_buf fers官方推荐*2 
    proxy_busy_buffers_size 64k;
    
    #proxy缓存临时文件的大小,
    proxy_temp_fi1e_write_size 64k;

    upstream tomcatserver1 {  
        server 192.168.10.10:8080;  
    }  
    upstream tomcatserver2 {  
        server192.168.10.11:8080;  
    }  
    
    upstream php_server_pool {
        servers 192.168.1.10:80 weight-4  max_fails=2 fail_timeout=30s;
        servers 192.168.1.11:80 weight-4  max_fails=2 fail_timeout=30s;
        servers 192.168.1.12:80 weight-4  max_fails=2 fail_timeout=30s;
    }
    
    upstream message_server_pool {
        servers 192.168.1.13:80 weight-4  max_fails=2 fail_timeout=30s;
        servers 192.168.1.14:80 weight-4  max_fails=2 fail_timeout=30s;
        servers 192.168.1.15:80 weight-4  max_fails=2 fail_timeout=30s;
    }
    
    upstream message_server_pool {
        servers 192.168.1.16:80 weight-4  max_fails=2 fail_timeout=30s;
        servers 192.168.1.17:80 weight-4  max_fails=2 fail_timeout=30s;
        servers 192.168.1.18:80 weight-4  max_fails=2 fail_timeout=30s;
    }
    server {  
        listen       80;  
        server_name  ww.yourdomain.com;
        access_log /datal/logs/www.yourdomain.com_access.log;
        location / {
             #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
              proxy_next_upstream http_502 http_504 error timeout invalid_header;
              proxy_pass http: //php_server_pool;
              proxy_set_header Host www.yourdomain.com;
              proxy_set_header X-Forwarded-For $remote_addr;
        }
    }  
    server {  
        listen       80;  
        server_name  ww.yourdomain.com;
        access_log /datal/logs/www.yourdomain.com_access.log;
        location / {
             #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
              proxy_next_upstream http_502 http_504 error timeout invalid_header;
              proxy_pass http: //php_server_pool;
              proxy_set_header Host www.yourdomain.com;
              proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
    server {  
        listen       80;  
        server_name  ww.yourdomain.com;
        access_log /datal/logs/www.yourdomain.com_access.log;
        location / {
             #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
              proxy_next_upstream http_502 http_504 error timeout invalid_header;
              proxy_pass http: //php_server_pool;
              proxy_set_header Host www.yourdomain.com;
              proxy_set_header X-Forwarded-For $remote_addr;
        }
    }
}

动静分离

动静分离是在Web服务器架构中,将静态页面和动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提升整个服务访问性能和可维护性。

Web资源主要分为静态资源和动态资源,静态资源主要是jnpg、js、html等;动态资源主要是jsp、asp、php等

Nginx如何处理动静分离

image.png

Nginx支持的协议

image.png