nginx学习

nginx学习总结

能干什么:静态资源服务器(部署前端页面)、反向代理、负载均衡

 

使用nginx部署页面

# 负载均衡根据当时的情况来进行判断你访问哪一个tomcat,故障转移

#表示负载均衡服务器,也是通常再说的上游服务器。三种基本的负载均衡算法: 轮询、权重、ip绑定。
upstram mzd{   
      server   127.0.0.1:8080;                      #轮询(这是nignx默认的负载均衡算法,总上到下顺序轮流)
      #server   127.0.0.1:8081 weight=3;    # 权重(设置轮流的比例,数字越大,概率越大)
      ip_hash;                                              #id绑定(nignx通过你的ip计算出hash值来判断请求哪一个服务器(不确定))
}


server{    #如果需要多配置,可重写一个server,单个server_name一定不能相同
      listen                80;                  #端口号
      server_name     localhost;      #浏览器输入的域名(没有则本地)
      location / {                               #表示url匹配,/表示全部匹配
         proxy_pass    http://127.0.0.1:8080    #反向代理地址(这里如果配置了负载均衡就是:http://mzd 必须和上面一致)
         root              html;                                #成功匹配之后进入的目录(可扩展,这个路径可以自定义)
         index            index.html   index.htm;   #默认页面
         proxy_connect_timeout:  3s;            #nginx向tomcat发起连接,即第一次握手等待tomcat回应的超时时间,tomcat的这次                                                                                    回应只是说明能正常连接,并没有响应具体请求的内容。
         proxy_read_timeout           5s;            #nginx将请求发送给tomcat的超时时间,应该是确认能正常连接之后向tomcat发送真                                                                                   正的业务请求。
         proxy_send_timeout           3s;            #tomcat接受到真正业务请求之后,nginx等待tomcat响应具体请求的内容的超时时                                                                                        间。差不多可以理解tomcat处理具体请求时间的最大值,也就是tomcat必须                                                                                    在这个时间内做完业务逻辑处理。
         limit_conn conn                 20;#限制并发连接数;
         limit_rate                           500k;#为限制下载速度; 
         proxy_set_header Host $proxy_host;      #Host设置为$http_host时,则不改变请求头的值(会出错),Host设置为                                                                                                            $proxy_host时,则会重新设置请求头
   }

 

 

    location ~ /data/sql/data.sql {     #设置多个文件
       deny all;       #禁止文件
    }

    location ~ /data/sql/data.sql {     
       access_log    off;                     #不记录访问日志,减轻压力
       expires         600;                    #设置每个文件的过期时间,3d表示3天天
       allow           192.168.22.29;     #只允许固定ip访问地址
    }

 

   error_page   500  502  503  504   /50x.html;   #当用户发生此类错误跳转页面
   localhost = /50x.html{
      root      html;
   }
}

 

# 重写server存在跨域问题
# 扩展性比较强,静态资源是什么都可以。
解决ajax跨域方案:
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;  
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。

 


# 语法规则
location [=|~|~*|^~] /uri/ { … }
=    开头表示精确匹配
^~  开头表示url以某个常规字符串开头,理解为匹配url路径。nginx不对url做编码,因此请求为/static/%20/aa(有空格)
~   ~*    开头区分大小写的正则匹配  开头不区分大小写的正则
!~  !~*   区分大小写不匹配   不区分大小写不匹配
/   通用匹配,任何请求都能匹配到
首先匹配 =,其次匹配^~, 其次是按文件中顺序的正则匹配,最后是交给 / 通用匹配。当有匹配成功时候,停止匹配,按当前匹配规则处理请求。
这些规则都是访问默认的 root 下的目录(请求地址)
location = / {                                  #规则A
   访问根目录/, 比如http://localhost/将匹配规则A
}
location = /login {                           #规则B
   访问 http://localhost/login 将匹配规则B,http://localhost/register 则匹配规则H
}
location ^~ /static/ {                       #规则C
   访问 http://localhost/static/a.html 将匹配规则C
}
location ~ \.(gif|jpg|png|js|css)$ {      #规则D
   访问 http://localhost/a.gif, http://localhost/b.jpg 将匹配规则D和规则E,但是规则D顺序优先,规则E不起作用, 而 http://localhost/static/c.png 则优先匹配到 规则C
}
location ~* \.png$ {                          #规则E
   访问 http://localhost/a.PNG 则匹配规则E, 而不会匹配规则D,因为规则E不区分大小写。

location !~ \.xhtml$ {                        #规则F
   访问 http://localhost/a.xhtml 不会匹配规则F和规则G,http://localhost/a.XHTML不会匹配规则G,因为不区分大小写。
}
location !~* \.xhtml$ {                       #规则G
   规则F,规则G属于排除法,符合匹配规则但是不会匹配到,所以想想看实际应用中哪里会用到。
}
location / {                                        #规则H
   访问 http://localhost/category/id/1111 则最终匹配到规则H,因为以上规则都不匹配,这个时候应该是nginx转发请求给后端应用服务器,比如FastCGI(php),tomcat(jsp),nginx作为方向代理服务器存在。
}


启动、停止和重启加载配置
进入到文件目录下
nginx -s stop     #快速关机
nginx -s quit      #正常关机
nginx -s reload   #重新加载配置文件
nginx -s reopen  #重新打开日志文件

 


参考官网文档:http://nginx.org
参考博客:
https://www.cnblogs.com/koal/p/6915106.html
http://outofmemory.cn/code-snippet/742/nginx-location-configuration-xiangxi-explai

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

你可能感兴趣的:(nginx学习)