美文网首页
Nginx踩坑初体验

Nginx踩坑初体验

作者: idelo | 来源:发表于2018-08-16 19:46 被阅读0次

    打算搭个自己的项目。前后端完全分离,前端文件都不放在后端的项目中,所以搭个Nginx进行请求的转发。也就是传说中的反向代理了。后面再折腾一下负载均衡功能,毕竟Nginx两大功能,不能不体验啊。

    环境 window10 + springboot + Nginx-1.14.0。

    常用命令:
    1、启动:
    C:\server\nginx-1.0.2>start nginx或
    C:\server\nginx-1.0.2>nginx.exe
    
    2、停止:
    C:\server\nginx-1.0.2>nginx.exe -s stop或
    C:\server\nginx-1.0.2>nginx.exe -s quit
    注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息。
    
    3、重新载入Nginx:
    C:\server\nginx-1.0.2>nginx.exe -s reload
    当配置信息修改,需要重新载入这些配置时使用此命令。
    
    4、重新打开日志文件:
    C:\server\nginx-1.0.2>nginx.exe -s reopen
    
    5、查看Nginx版本:
    C:\server\nginx-1.0.2>nginx -v
    
    反向代理:

    先起一个8889端口。暴露一个api接口:http://localhost:8889/hello
    然后我们配置一下配置文件,隐藏一下真正的地址。

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
    
        server {
            listen          80;
            server_name     localhost;
            index           index.html index.htm;
            root            D:\Devs\simple\src\main;
            
            location /test/ {
                   proxy_pass http:// localhost:8889/;
            }   
        }
    }
    

    然后访问localhost/test/hello的请求会被映射到http://localhost:8889/hello。由于80端口是默认端口,所以可以不写,其中server_name主要用来匹配url地址。其中proxy_pass属性可以有很多种配法。推荐一个nginx 之 proxy_pass详解。到目前为止,方向代理成功了。

    负载均衡:

    起4个服务,分别部署在8889端口-8892端口。然后写配置文件->

    
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        
        upstream tomcatserver {
            server localhost:8889 down;  #不参加负载
                    server localhost:8890 weight=2;  #权重为2
                    server localhost:8891  max_fails=3 fail_timeout=30s;  #在30秒内最多失败3次
            server localhost:8892 backup;  #备用服务,负载最轻
        }
    
        server {
            listen          80;
            server_name     localhost;
            index           index.html index.htm;
            root            D:\Devs\simple\src\main;
            
            location /test/ {
                  proxy_pass http://tomcatserver/;
            }
            
            location /api/ {
                  proxy_pass http://localhost:8889/blog/;
            }
            
            location /hub/ {
                proxy_pass http://127.0.0.1:9090/sso/;
            }
        }
    }
    
    

    至此负载均衡也简单的实现了。这时我们来关注一下Nginx的负载均衡策略,他有5种:

    1、轮询(默认)
    每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
    upstream backserver {
    server 192.168.0.14;
    server 192.168.0.15;
    }

    2、指定权重
    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
    upstream backserver {
    server 192.168.0.14 weight=10;
    server 192.168.0.15 weight=10;
    }

    3、IP绑定 ip_hash
    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
    upstream backserver {
    ip_hash;
    server 192.168.0.14:88;
    server 192.168.0.15:80;
    }

    4、fair(第三方)
    按后端服务器的响应时间来分配请求,响应时间短的优先分配。
    upstream backserver {
    server server1;
    server server2;
    fair;
    }

    5、url_hash(第三方)
    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
    upstream backserver {
    server squid1:3128;
    server squid2:3128;
    hash $request_uri;
    hash_method crc32;
    }

    具体实现,请参见源码。实在是看不太懂。。

    结束

    nginx实现反向代理及负载均衡
    nginx 配置详解(新手必看)
    一张脑图说清 Nginx 的主流程

    相关文章

      网友评论

          本文标题:Nginx踩坑初体验

          本文链接:https://www.haomeiwen.com/subject/flwobftx.html