美文网首页
nginx使用

nginx使用

作者: xiang205012 | 来源:发表于2018-06-12 22:30 被阅读6次
    创建虚拟主机

        在nginx.conf配置文件中,一个server就是一个虚拟主机,虚拟主机的访问可以通过端口和域名两种方式。


    相同端口不同域名.png

    不同端口的访问很简单,只要在输入浏览器地址后加上端口号即可。下面模拟不同域名的访问。如上图。
        首先在本机hosts文件中配置好IP地址对应的域名(一个域名只能对应一个IP地址,但是一个IP地址可以对应多个域名),然后在浏览器中直接输入域名进行访问。


    hosts配置.png
    nginx反向代理

        客户机发送请求,nginx接收请求然后分发给tomcat,tomcat响应并返回数据,nginx接收数据并返回给客户机。在客户机看来只是一个服务器。这种服务器端的代理称为反向代理。

    反向代理.png
    注意:location匹配是一种正则表达式的模糊匹配。如下例:
    location /user/home {
        proxy_pass http://example.com;
        # proxy_pass定义的末尾没有指定URI,意味着客户端发送的URI请求会被原样发送给上游(就是upstream中的定义)。
        # 比如,如果客户端发来的请求是/user/home/please,则发送给example.com服务器的请求会是
        # http://example.com/user/home/please。
    }
    
    location /user/home {
        proxy_pass http://example.com/new/prefix;
        #proxy_pass末尾定义了URI的部分(/new/prefix),意味着匹配该location定义的请求将在转发时被替换为此处定义的URI。
        #比如,当一个/user/home/please请求到来时,Nginx转发给上游的请求则是http://example.com/new/prefix/please
        #/user/home被替换成了/new/prefix,这点需要注意。
        
        #有时候,此类替换无法完成,则proxy_pass处定义的URI会被忽略,Nginx会把原始请求的URI或其他地方定义的URI发送给上游。
        #比如,对于一个使用正则表达式定义的location,Nginx无法决定哪部分URI匹配该表达式,所以会把原始请求的URI发送给上游。
        #而如果在同一location下还定义了一个rewrite条目改写了该请求的URI,则改写的URI会被发送给上游。
    }
    
    URL结尾处是否有/的区别:
    以http://192.168.157.4/proxy/test.html 
    
    第一种:
    location  /proxy/ {
        proxy_pass http://192.168.157.4:80/;
    }
    结果:会被代理到http://192.168.157.4:80/test.html 这个url
    
    
    第二种(相对于第一种,最后少一个 /)
    location  /proxy/ {
        proxy_pass http://192.168.157.4:80;
    }
    结果:会被代理到http://192.168.157.4:80/proxy/test.html 这个url
    
    第三种:
    location  /proxy/ {
        proxy_pass http://192.168.157.4:80/abcd/;
    }
    结果:会被代理到http://192.168.157.4:80/abcd/test.html 这个url。
    
    第四种(相对于第三种,最后少一个 / ):
    location  /proxy/ {
        proxy_pass http://192.168.157.4:80/abcd;
    }
    结果:会被代理到http://192.168.157.4:80/abcdtest.html 这个url
    
    nginx负载均衡

        负载均衡就是多个服务器同时跑一样的程序,当客户机发送请求时,nginx轮询服务器,看哪台比较闲然后将请求发给哪台。来测试一把,启动两个tomcat(当然实际上大公司肯定有很多台服务器,但原理是一样的)跑相同的程序(注意修改tomcat的端口,也将index.html的内容修改一下好看效果),然后修改nginx.conf。

    负载均衡.png
    nginx刷新:nginx -s reload 。然后在浏览器中输入www.gorodn.com回车,然后不断按F5刷新页面,看看是不是出现你自己修改index.html的内容。显示结果应该第一次到8080这台服务器,第二次到8081这台服务器,如此循环。当有更多台服务器时也是这样轮询。但是可以控制某台服务器接收频率(比如某台服务器性能比其他的都好,那这台应该处理更多的请求),通过调整weight的值(不写,默认都是1),数值越大接收频率越高。来试试,将8081的weight调整为2 。然后访问,在F5刷新,注意这次一定快速按F5才有可能到8080这台服务器,因为大部分到8081这台了。这就是负载均衡。
    负载均衡2.png
    负载均衡还是另外两种高效的方式:
    • lvs+nginx,lvs是四层负载均衡(就是网络传输的第四层),而nginx是7层负载均衡,客户机请求先到lvs,lvs代理发给nginx,nginx代理发给tomcat(当然这里也可以不nginx,直接有lvs发给tomcat),lvs能达到F5的60%性能,可以说已经是相当牛逼了。
    • F5 它是最牛逼的负载均衡,是硬件层面,需要几十万来购买
    nginx高可用

        因为入口只有一个,那就是nginx,如果nginx挂了那就无法访问了,为了让nginx不宕机(或当高并发时不那么容易宕机)有三种方式:

    • 可以使用一台备用的nginx服务器实现,就是当主nginx服务器宕机时备用nginx服务器起来替代主nginx服务器。可以使用keepalived+nginx实现主备,两台机器上都安装nginx和keepalived,备用服务器中keepalived会一直给主服务器发送心跳包看主服务器挂了没好自己上(主服务器没挂它就没表现的机会)。
    • lvs+nginx+keepalived,lvs是四层负载均衡(就是网络传输的第四层),而nginx是7层负载均衡,lvs能达到F5的60%性能,可以说已经是相当牛逼了。
    • F5 它是最牛逼的负载均衡,是硬件层面,需要几十万来购买

    相关文章

      网友评论

          本文标题:nginx使用

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