Nginx踩坑初体验

打算搭个自己的项目。前后端完全分离,前端文件都不放在后端的项目中,所以搭个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踩坑初体验)