Nginx入门使用
正文
正向代理VS反向代理与负载均衡
- 正向代理:一个专门在用户和某个网站中间做中介的服务器,比较常见的就是
用户自己安装的
v*n - 反向代理:反向代理隐藏了真实的服务端,通常是为网站服务的,比如网站有多个服务器(应用服务器、数据库服务器、文件服务器等等),则用户的访问会被代理,反向代理可以看作
网站请来守门口的
- 负载均衡:一个人搞不定的事,多找几个人来承担,而Nginx则可以作为协调,把请求交给适合的服务器,这种操作就是负载均衡
Nginx基本操作
- 安装:我用的是Mac,直接
brew install nginx
- 启动:
nginx
启动:nginx
- 关闭:
nginx [ -s stop]
关闭:nginx [ -s stop]
- 重启:
nginx [ -s reload]
,如果重启会重新加载配置文件重启:nginx [ -s reload]
,如果重启会重新加载配置文件 - 很多配置是关注
nginx.conf
这个配置文件很多配置是关注nginx.conf
这个配置文件
反向代理
- 将server字段下的location字段改成如下
location / {
root html;
# index index.html index.htm;
proxy_pass http://http://127.0.0.1:8111; # 反向代理,表示把请求都交给http://127.0.0.1:8111来处理
}
- 注意点:在这里,proxy_pass是nginx固有的key,与自己定义一个url的域名是不一样的
负载均衡
- 在http的字段下增加参与共同负载的服务器(把服务员都记录遍),并给这个“集群”自定义一个名字(后面要用),比如
tomcat_8111_8222
,在这里权重越大的服务器被分到的可能性越高
upstream tomcat_8111_8222{
server 127.0.0.1:8111 weight=1;
server 127.0.0.1:8222 weight=2;
}
- 重新修改server.location字段下的
proxy_pass
属性,反向代理这个新的集群
location / {
proxy_pass http://tomcat_8111_8222;
}
session共享
经过负载均衡后会将请求分到不同的服务器,但是session里面的内容却不能共享,这样一来用户在两个服务器上的信息则不一致了,会让用户不爽
针对这个问题,有两种解决方式
- 使用ip_hash,即一旦给一个用户代理到某个服务器后,后面对他的服务都进入相同的服务器,这样做就失去了负载均衡和容灾的效果
- 使用redis来存取session,tomcat有和redis交互的jar包,在参与到负载均衡的tomcat的配置文件中context.xml中加上以下字段即可
- 记得开启redis,否则tomcat启动就抛异常了
<!--tomcat和redis连通的字段--> <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" />