现在的位置: 首页 > 综合 > 正文

nginx学习(3)

2018年03月17日 ⁄ 综合 ⁄ 共 1574字 ⁄ 字号 评论关闭

之前一直以为OJ上不了了,后来才发现是要在ip后面加/index/login才能上。

感觉太麻烦了,就想直接ip登录。

实现过程试了很多种方法。

一、

设置默认首页

location / {
   root /xxx/xxx
   index index.html index.htm
}

当访问ip时,会请求/xxx/xxx 里面的index.html或者index.htm,并产生响应。

root 后面是index.html index.htm的路径,匹配规则是当index.html没有的时候,继续匹配index.htm。

这样之后发现不行,问了朱老板才知道OJ的页面都是要经过django渲染之后才能显示的。

二、

location /{
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}

这是django的location,这样的配置可以是的所有的子网页都经过django的渲染。

然后我发现其实把这个放在/index 这一层就可以了,因为都是这种形式的/index/xxx。

那么我们直接做个重定向就可以了。

location / {
rewrite ^ ip/index/login ;
}

location /index{
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}

此时我们直接访问ip,即跳转到index/login页面,但是登录之后点其他页面却重新跳回了index/login页面。

比如点problemList ,他就跳回了index/login。

这是因为在server里面没有匹配到/index/problemList。所以根据匹配的规则他会匹配到location /{}上, 那么就跳回到index/login。

三、

这个问题也很好解决,我们只要不让他在index/problemList的时候去匹配到location / {}就可以了。

实现办法就是

location = / {
rewrite ^ ip/index/login ;
}

因为location / {}是匹配所有以/开头的查询。

而location = / {}则只匹配以/ 开头的查询,那么当查询index/problemList的时候,就去匹配location/index{}了。

这样就完美解决了以上问题。
四、

突然发现其实不需要将django的配置放到/index

这样就可以了

location = / {
rewrite ^ ip/index/login ;
}

location /{
include uwsgi_params;
uwsgi_pass 127.0.0.1:8077;
}

五、

location的一些匹配规则

location = / {
 # 只匹配 / 查询。
 
}location / {
 # 匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配。
 
}location ^~ /images/ {
 # 匹配任何已 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
 
}location ~* .(gif|jpg|jpeg)$ {
 # 匹配任何已 gif、jpg 或 jpeg 结尾的请求。
 
}location ~* .(gif|jpg|swf)$ {
  valid_referers none blocked start.igrow.cn sta.igrow.cn;
  if ($invalid_referer) {
  #防盗链
  rewrite ^/ http://$host/logo.png;
  }
}
location ~* .(js|css|jpg|jpeg|gif|png|swf)$ {
if (-f $request_filename) {
   #根据文件类型设置过期时间
   expires    1h;
   break;
}
}
location ~* .(txt|doc)${ 
 #禁止访问某个目录
    root /data/www/wwwroot/linuxtone/test;
    deny all;
}

抱歉!评论已关闭.