nginx简介(二)常用功能

一、静态资源服务器

使用nginx实现静态资源服务器,我们可以通过nginx来访问静态资源。修改nginx配置(conf/nginx.conf)文件为:

  server {
        listen       80;
        server_name  www.tuesdayma.com;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
  • listen: 这个参数大家应该都不陌生,就是监听的端口号。
  • server_name: 浏览器上输入的域名。
  • location: 表示url匹配,/表示全部匹。
  • root: 表示匹配成功之后进入的目录。
  • index: 表示默认的页面。

二、根据域名访问不同路径

本地测试的话,可以修改host文件,我准备了两个域名:www.tuesdayma.com和static.tuesdayma.com。修改nginx配置文件为:

   server {
        listen       80;
        server_name  static.Tuesdayma.com;
        location / {
            root   extend/static;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
   server {
        listen       80;
        server_name  www.Tuesdayma.com;
        location / {
            root   extend/www;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

三、反向代理

概述:

Nginx 不仅可以做反向代理,还能用作正向代理来进行上网等功能,正向代理:如果把局域网外的 Internet 想象成一个巨大的资源库,则局域网中的客户端要访问 Internet,则需要通过代理服务器来访问,这种代理服务就称为正向代理。对于反向代理,客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP 地址。


配置文件修改:

     server {
        listen       80;
        server_name  www.tuesdayma.com;
        location / {
            proxy_pass   http://127.0.0.1:8090;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
  • proxy_pass: 127.0.0.1可以换成任何一个通的内网地址,这个ip表示你要真实访问的tomcat所在的位置,proxy_pass的值就表示你真正访问的域名是什么(站在公网服务器角度来说)。

四、动静分离

概述:
Nginx 动静分离简单来说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离。严格意义上说应该是动态请求跟静态请求分开,可以理解成使用 Nginx 处理静态页面,Tomcat 处理动态页面。动静分离从目前实现角度来讲大致分为两种,一种是纯粹把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推崇的方案;另外一种方法就是动态跟静态文件混合在一起发布,通过 Nginx 来分开。

不同域名来拦截: 用大白话来说就是,动态请求和静态请求使用不同的域名。比如所有的静态资源都使用static.tuesdayma.com域名来访问,所有的接口都使用www.tuesdayma.com来请求。

  #动态请求拦截
  server {
        listen       80;
        server_name  www.Tuesdayma.com;
        location / {
           # proxy_redirect off;  
           # proxy_set_header Host $host;  
           # proxy_set_header X-Real-IP $remote_addr;  
           # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
            proxy_pass   http://127.0.0.1:8080;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
   #静态请求拦截
   server {
        listen       80;
        server_name  static.Tuesdayma.com;
        location /nginx_static{
            root   F:/;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }  
    }

  • 优点:扩展性比较强,静态资源是什么都可以。
  • 缺点:存在跨域问题,所有的html全靠ajax请求来请求接口,后端域名和前端不一致导致跨域问题。
  • 解决:1、在nginx中把注释掉的放开;

            2、将tomcat的所有接口配置成域名跨域访问(这个东西个人建议可以在tomcat中写个拦截 器进行拦截,然后统一处理)。

 response.setHeader("Access-Control-Allow-Origin", "*");
 response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
 response.setHeader("Access-Control-Max-Age", "3600");
 response.addHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

location来拦截: 这个只配置一个server,然后配置两个location,一个通过正则表达式拦截静态资源,还有一个拦截.do结尾的接口请求。

优点:不存在跨域问题。

缺点:扩展性太差,静态资源的类型不可确定,每增加一种类型都需要重新修改配置文件并且重启nginx。

五、负载均衡

定义: 为了解决高并发问题,负载均衡服务器拦截所有的请求,采用负载均衡算法,分配到不同的tomcat上。

作用: 减少单台tomcat的压力

三种基本的负载均衡算法: 轮询、权重、ip绑定。

1.轮询: 这是nginx默认的负载均衡算法,简单来说就是从上到下按顺序轮流(127.0.0.1:8082轮完就轮到127.0.0.1:8081,127.0.0.1:8081轮完就轮到127.0.0.1:8082)。注意:mzd的地方需要保持一致。。。

 upstream  mzd {
       server 127.0.0.1:8082;
       server 127.0.0.1:8081;
    }
    server {
        listen       80;
        server_name  www.tuesdayma.com;
        location / {
            proxy_pass  http://mzd;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

2.权重: 我的理解就是哪台服务器配置好就多轮几次,或者你就想某个服务器多轮几次。简单来说就是轮到次数的比例,数字越大表示轮到的概率越大。

 upstream  mzd {
       server 127.0.0.1:8082 weight=2;
       server 127.0.0.1:8081 weight=3;
    }
    server {
        listen       80;
        server_name  www.tuesdayma.com;
        location / {
            proxy_pass  http://mzd;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

3.ip绑定: 我的理解就是你第一次访问的时候,nginx会根据你的ip通过哈希算法,算出某个值,然后取分配哪个tomcat,当你第二次访问,第三次访问。。。之后的任何一次访问都是去请求那个第一次访问的tomcat。

 upstream  mzd {
	
       server 127.0.0.1:8082 ;
       server 127.0.0.1:8081 ;
       ip_hash;
    }
    server {
        listen       80;
        server_name  www.tuesdayma.com;
        location / {
            proxy_pass  http://mzd;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

注意:修改如下几个参数

    server {
        listen       80;
        server_name  www.tuesdayma.com;
        location / {
            proxy_pass  http://mzd;
            proxy_connect_timeout 3s;
            proxy_read_timeout 5s;
            proxy_send_timeout 3s;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

    }

proxy_connect_timeout: nginx向tomcat发起连接,即第一次握手等待tomcat回应的超时时间,tomcat的这次回应只是说明能正常连接,并没有响应具体请求的内容。

proxy_send_timeout: nginx将请求发送给tomcat的超时时间,应该是确认能正常连接之后向tomcat发送真正的业务请求。

proxy_read_timeout: tomcat接受到真正业务请求之后,nginx等待tomcat响应具体请求的内容的超时时间。差不多可以理解tomcat处理具体请求时间的最大值,也就是tomcat必须在这个时间内做完业务逻辑处理。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trouble-Solver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值