nginx基本命令和配置文档

nginx相关指令集

nginx -s stop	快速关闭Nginx,可能不保存相关信息,并迅速终止web服务
nginx -s quit	平稳关闭Nginx,保存相关信息,有安排的结束web服务
nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载
nginx -s reopen 重新打开日志文件
nginx -c filename.conf 为 Nginx 指定一个配置文件,来代替缺省的
nginx -t	不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件
nginx -v	显示 nginx 的版本
nginx -V	显示 nginx 的版本,编译器版本和配置参数

安装

启动

  • windows
启动
start nginx
关闭
nginx -s stop
//更改配置文件后重新加载配置
nginx -s reload
  • linux

nginx配置文件

  • 端口号
  listen 80;
  • 页面存放地址
root html;
表示页面都存放在nginx的html目录下

  • 欢迎页面
index index.html index.htm;
默认会访问index.html或者index.htm文件

反向代理

  • 启动java程序或者web容器,比如tomcat
开始配置方向代理,在 nginx.conf 配置文件中
http > server > location
加入配置:proxy_pass http://127.0.0.1:8111;
其中8111是tomcat的地址

代理静态资源

nginx处理静态内容的吞吐量很高,比tomcat高多了,这样无形中提升了性能。
location ~\.(css|js|png)$ {
    root D:/dtools/nginx/tomcat_8111/webapps/ROOT;
}
静态资源地址自行修改

负载均衡

  • 修改nginx.conf
  • 首先增加一个upstream ,用来指向这两个tomcat
#upstream 需要写在server外面,跟server同级
upstream tomcat_8111_8222{
    server	127.0.0.1:8111 weight=1;
    server	127.0.0.1:8222 weight=2;
}

session共享

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

  • 解决办法一:通过ip地址标记用户,如果多次请求都是从同一个ip来的,那么就都分配到同一个tomcat.
    这样就不会出现负载均衡 session问题了. 处理手段也很简单,如图所示在upstream最后加上ip_hash;就行了。
    不过这种方案并不完美,当如下几种情况发生时就有问题:
  1. 大量请求来之某个局域网,那么相当于就没有负载均衡了
  2. 如果tomcat_8111 挂了,那么此时nginx只能把请求交给tomcat_8222,但是这里却没有记录session,用户体验依然受影响。
upstream tomcat_8111_8222{
    server	127.0.0.1:8111 weight=1;
    server	127.0.0.1:8222 weight=2;
    ip_hash;
}
  • 解决办法二: redis+tomcat-sessoin-manager

  • 先启动redis

  • 需要专门的jar包,一共有3个jar包:
    jedis-2.5.2.jar,
    commons-pool2-2.0.jar,
    tomcat-redis-session-manager1.2.jar。
    下载解压后,放在tomat的lib目录下。两个tomcat都要放

  • 然后修改tomcat/conf/context.xml ,增加下面这段配置

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />  
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"  
host="127.0.0.1"
password=zaq12wsx
port="6379"  
database="0"  
maxInactiveInterval="60" /> 
  • 启动tomcat
  • 测试访问
http://127.0.0.1:8111/login.jsp
http://127.0.0.1:8222/login.jsp

登录8111后访问8222发现8222已经是登录状态了
再看看redis中的

思考:要是springboot项目呢?

可以使用spring-session代码层面去解决或者不适用session,直接使用jwt和redis结合

# nginx 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×