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

一辈子很短,努力的做好两件事就好;第一件事是热爱生活,好好的去爱身边的人;第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
原文地址:https://www.cnblogs.com/antao/p/12784034.html