nginx学习(3)

来源:互联网 发布:网络春晚2013 编辑:程序博客网 时间:2024/05/21 20:13

之前一直以为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;}


0 0
原创粉丝点击