• nginx使用经验


    1.下载并解压

    官网:http://nginx.org/

    2.启动方式-直接双击

    直接双击nginx.exe会有个屏幕一闪而过,这个时候,其实已经启动成功了。 只需要打开访问地址,就可以看到效果:

    http://127.0.0.1

    关闭方式,与此配合的方式就是用任务管理器关闭了~
    注: nginx启动之后,在任务管理里有两个nginx进程,这个是正常的,一个是1个守护进程 1个工作进程,得手动分别关闭。

    3.启动方式-命令行

    cmd
    cd d:/server/nginx
    start nginx

    关闭方式也是与之对应的

    nginx -s stop

    重启方法

    nginx -s reload 

    4.端口号修改

    如果启动之后,无法访问,或者访问的是其他的页面,通常都是因为端口被占用了。

    可以修改为其他端口号,打开nginx目录下的conf/nginx.conf文件,然后找到listen 80,修改为9000,

    server {
            listen       9000;
            server_name  localhost;
    
            #charset koi8-r;

    关闭nginx再启动,就可以通过如下地址访问了:

    http://127.0.0.1:9000/

    5.nginx.conf配置文件

    location / {
                root   html;#指定网页根目录nginx的html目录下
                index  index.html index.htm;#设定默认首页
            }

    6.代理概念

    正向代理的至少一个功能(俗称FQ),也即:

      用户A无法访问facebook,但是能访问服务器B,而服务器B可以访问facebook。于是用户A访问服务器B,通过服务器B去访问facebook,,服务器B收到请求后,去访问facebook,facebook把响应信息返回给服务器B,服务器B再把响应信息返回给A。这样,通过代理服务器B,就实现了FQ。

    反向代理的至少一个功能(比如负载均衡),也即:

      假设用户A访问http://www.xxxx.com/something.html但www.xxxx.com上并不存在something.html页面,于是接收用户请求的该(nginx)服务器就偷偷从另外一台(tomcat)服务器上取回来,然后返回给用户,而用户并不知道something.html页面究竟位于哪台机器上。

    7.反向代理

    首先启动中端口号是8088的tomcat,确保访问成功。

    http://127.0.0.1:8088/something.html

    然后修改nginx.conf,主要是30-42行

    location / {
                proxy_pass   http://127.0.0.1:8088;
            }

    表示把请求都交给http://127.0.0.1:8088来处理

    重启nginx并访问

    http://127.0.0.1:9000/something.html

    就会观察到已经反向代理到tomcat了

    因为nginx在处理静态文件的吞吐量上面比tomcat好很多,通常他们俩配合,不会把所有的请求都如本例所示的交给tomcat,而是把静态请求交给nginx,动态请求,如jsp, servlet,ssm, struts等请求交给tomcat,从而达到动静分离的效果。 

    8.动静分离概念

    所谓的动静分离就是指图片,css, js之类的都交给nginx来处理,nginx处理不了的,比如jsp 就交给tomcat来处理~
    好处是nginx处理静态内容的吞吐量很高,比tomcat高多了,这样无形中提升了性能。

    在locaction下面添加一个新的location:

    location ~.(css|js|png)$ {
                root E:/Apache/apache-tomcat-8.5.54/webapps/ROOT;
            }

    这表示所有的css js png访问都由nginx来做,访问的地址是:E:/Apache/apache-tomcat-8.5.54/webapps/ROOT;

    这里要注意,填写本地地址的时候,要用正斜杠 / 不要用反斜杠  

    9.负载均衡的概念

    负载均衡的概念就是当访问量很大的时候,一个 Tomcat 吃不消了,这时候就准备多个 Tomcat,由Nginx按照权重来对请求进行分配,从而缓解单独一个Tomcat受到的压力。

    Nginx能够配置代理多台服务器。当一台服务器宕机之后。仍能保持系统可用。

    9.1. 在http节点下,server节点上,加入upstream节点。
    upstream mywebs {
        #ip_hash;
        server 127.0.0.1:8088  weight=1  max_fails=1 fail_timeout=3s;
        server 127.0.0.1:8089  weight=1  max_fails=1 fail_timeout=3s;
        server 127.0.0.1:8080  backup;
        }

    down 表示单前的server临时不參与负载。

    weight 默觉得1.weight越大,负载的权重就越大。

    max_fails :同意请求失败的次数默觉得1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误。

    fail_timeout : max_fails次失败后。暂停的时间。

    backup: 其他全部的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

    9.2.  将server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即“
    location / {
                proxy_pass http://mywebs;
        }

    10.负载均衡 session问题

    通过负载均衡,我们可以把请求分发到不同的 Tomcat 来缓解服务器的压力,但是这里存在一个问题: 当同一个用户第一次访问tomcat_8088 并且登录成功, 而第二次访问却被分配到了tomcat_8089, 这里并没有记录他的登陆状态,那么就会呈现未登录状态了,严重伤害了用户体验。

    解决办法一: ip_hash

    通过ip地址标记用户,如果多次请求都是从同一个ip来的,那么就都分配到同一个tomcat.
    这样就不会出现负载均衡 session问题了. 处理手段也很简单,如图所示在upstream最后加上ip_hash;就行了。

    不过这种方案并不完美,当如下几种情况发生时就有问题:
    1. 大量请求来之某个局域网,那么相当于就没有负载均衡了
    2. 如果tomcat_8088 挂了,那么此时nginx只能把请求交给tomcat_8089,但是这里却没有记录session,用户体验依然受影响。

     

    解决办法二: redis+tomcat-sessoin-manager

    既然第一种解决办法有问题,那么就采用第二种解决办法:用Redis来存取session.
    Redis是什么呢?说简单点就是个独立的Hashmap,用来存放键值对的。
    这样当tomcat1需要保存session值的时候,就可以把它放在Redis上,需要取的时候,也从Redis上取。
    那么考虑这个情景:
    1. 用户提交账号密码的行为被分配在了tomcat8088上,登陆信息被存放在redis里。
    2. 当用户第二次访问的时候,被分配到了tomcat8089上
    3. 那么此时tomcat8089就会从redis去获取相关信息,一看有对应信息,那么就会呈现登陆状态。
    这样就规避了解决办法一: ip_hash里会出现的两种问题了。

    启动redis

    Tomcat需要链接 redis,所以需要专门的jar包,这些包都放在了右上角的tomcat-redis.rar里。 一共有3个jar包:
    jedis-2.5.2.jar,
    commons-pool2-2.0.jar,
    tomcat-redis-session-manager1.2.jar。
    下载解压后,放在tomat8088的lib目录下。注:不要放在webapp里面去了
    下载解压后,放在tomat8099的lib目录下。注:不要放在webapp里面去了
    两个tomcat都要放

    然后修改tomcat/conf/context.xml ,增加下面这坨东西

      <Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
      <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
       host="127.0.0.1"  
       port="6379"  
       database="0"  
       maxInactiveInterval="60" /> 

    两个tomcat都要改

    两个tomcat都要重启

    Redis session共享机制和nginx其实无关,是发生在nginx之后的事情。

    参考文章:https://how2j.cn/k/nginx/nginx-share-session/1569.html#nowhere

    一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
  • 相关阅读:
    JS获取本周、本季度、本月、上月的开始日期、结束日期
    《大教堂和集市》笔记——为什么一个本科生业余作品却成了全世界最流行的操作系统之一Linux?
    “平头哥”半导体公司
    阻挡不住的变化
    给我五分钟,带你走出迷茫
    涂子沛:从幼稚到成熟,我们这个时代的数据革命
    统计思维就是透过现象看本质
    十个有趣的“大数据”挖掘案例
    信息时代与大数据相关的8个专业
    大数据招聘分析
  • 原文地址:https://www.cnblogs.com/antao/p/12784034.html
Copyright © 2020-2023  润新知