nginx使用

创建虚拟主机

    在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 它是最牛逼的负载均衡,是硬件层面,需要几十万来购买
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,957评论 19 139
  • 名词延伸 通俗的说,域名就相当于一个家庭的门牌号码,别人通过这个号码可以很容易的找到你。如果把IP地址比作一间房子...
    杨大虾阅读 20,641评论 2 56
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,773评论 0 10
  • 难道我们真的需要接纳一个人的出现,再接纳 一个人的从此不见吗? 时过三年我的生活又恢复了平静,依旧的卑微...
    忆首思云阅读 275评论 0 1
  • 功利是个中性词。一指功名利禄;二指功业所带来的利益;三指眼前物质上的收益。 所谓功利性阅读就是指能够解决眼前的、当...
    马行万里008阅读 476评论 1 0