曾经几次发生404的问题导致服务器请求很慢,这个问题一直都还没有明确原因。
为什么404错误会导致连接数特别高?

引用
Active connections: 1118
server accepts handled requests
48870809 48870809 48557219
Reading: 1116 Writing: 2 Waiting: 0

Active connections: 17
server accepts handled requests
50852281 50852281 50537511
Reading: 16 Writing: 1 Waiting: 0


上面是nginx在404错误时,和修复404错误之后的变化,404错误居然能够产生有1k多的连接。
更换为lighttpd也是一样,顶不住。。
reading的数量特别高,导致访问其它服务特别慢。汗一把。。有空再细看资料,大家平时多注意。。。
Tags:
由于要rewrite一个地址从
/mag/xx/xxx/ -> /m/xxx
但原先 /mag/xx/more/ 要保留
这就得写一个比较奇特的正则了,尝试了比较多的写法也没成功

最先想的是:

location ~* ^/mag/[^/]+/[^(more)]+/ {
  rewrite ^/mag/[^/]+/(.*) /m/$1 permanent;
}


[]的写法并不凑效,里面是匹配单个字符的,这样无效,匹配不了

还是小范同学不错,研究的深入,提供了非某单词的写法 (?!more)

location ~* ^/mag/[^/]+/(?!more)([^/]+)/ {
  rewrite ^/mag/[^/]+/(.*) /m/$1 permanent;
}


这个写法勉强可以应付了,后面的匹配单元虽说还不完美,但也能够对付我的所有需求内容了。
有需要的可以参考此写法。

引用

常用分组语法

捕获
(exp) 匹配exp,并捕获文本到自动命名的组里
(?exp) 匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)
(?:exp) 匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?


参考资料:正则表达式
Tags:
Nginx的代理功能太完善了,我们看看proxy_redirect参数的作用。

案例说明:
要做一个html.aslibra.com的域名处理很多网站的html内容,当然是后端的服务器了,目录分析
html.zcom.com/img.aslibra.com/
html.zcom.com/css.aslibra.com/
访问的域名是该目录下的域名,那前端nginx的配置应该类似这样:

server {
  server_name img.aslibra.com;
  location / {
    rewrite ^(.*) /$http_host$1 break;
    proxy_set_header Host html.aslibra.com;
    proxy_pass http://cache-89;
  }
}


但这样访问目录时如果没有以“/”结尾,则服务器会返回301redirect:

[root@aslibra ~]# curl -I http://img.aslibra.com/www
HTTP/1.1 301 Moved Permanently
Server: nginx/0.7.59
Date: Tue, 21 Jul 2009 15:28:58 GMT
Connection: keep-alive
Location: http://html.aslibra.com/img.aslibra.com/www/


html.aslibra.com这个域名并非公布的域名,返回给客户端是会自然产生错误的
Nginx可以很好的处理这个问题:

server {
  server_name img.aslibra.com;
  location / {
    rewrite ^(.*) /$http_host$1 break;
    proxy_set_header Host html.aslibra.com;
    proxy_pass http://cache-89;
    proxy_redirect   http://html.aslibra.com/img.aslibra.com/    /;
  }
}


加一行proxy_redirect后,正常了:

[root@aslibra ~]# curl -I http://img.aslibra.com/www
HTTP/1.1 301 Moved Permanently
Server: nginx/0.7.59
Date: Tue, 21 Jul 2009 15:23:49 GMT
Content-Type: text/html
Location: http://img.aslibra.com/www/
Connection: keep-alive
Content-Length: 185
Expires: Tue, 21 Jul 2009 16:23:49 GMT
Cache-Control: max-age=3600


就这么样就ok啦~
不过貌似不支持变量出现在地址里,这个就郁闷了,必须指定相应域名。
对于多个域名匹配的server,redirect设置不能写作'/'了,否则会用第一个域名作为redirect域名
可以写几个匹配规则:

proxy_redirect   http://html.aslibra.com/img.aslibra.com/    http://img.aslibra.com/;
proxy_redirect   http://html.aslibra.com/css.aslibra.com/    http://css.aslibra.com/;


Tags: , ,
Nginx的代理功能很强大,主要体现在可以设置返给后端服务器的http头信息,这一点可以让我们方便的实现很多需求。

比如要做一个镜像,这个当然有可能是好事。
http://a.aslibra.com/s/main.jpg
我需要访问 http://b.aslibra.com/s/main.jpg 也是一样的内容呢?

server {
  server_name  b.aslibra.com;
  root    /Data/webapps/b.aslibra.com;
  error_page           404 = @fetch;
  location @fetch {
    internal;
    proxy_store             on;
    proxy_store_access      user:rw  group:rw  all:r;
    proxy_set_header Host a.aslibra.com;
    proxy_set_header referer http://a.aslibra.com/;
    proxy_pass   http://backend;
    root  /Data/webapps/b.aslibra.com;
  }
}


利用缓存功能就可以了,以上例子还加上了简单破解防盗链的方法,就是加上正确的referer的头信息就可以了
upstream自己可以设定,修改了host的信息,使得相当于本地访问backend使用了要做镜像的域名。

同理,要多个域名是一样的内容是,那可以多个域名使用同样的server设定,简单的指定host值即可,不列举了。
Tags: ,
升级一下Nginx,笔记一下:

wget http://sysoev.ru/nginx/nginx-0.7.59.tar.gz
tar xfz nginx-0.7.59.tar.gz
cd nginx-0.7.59
./configure  --prefix=/Data/apps/nginx \
--with-http_ssl_module \
--with-http_stub_status_module \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
&& make && make install

#平滑升级可执行程序,使用新的 nginx 可执行程序替换旧的
kill -USR2 `cat /Data/apps/nginx/logs/nginx.pid`
#你可以让旧进程停止工作
kill -QUIT `cat /Data/apps/nginx/logs/nginx.pid.oldbin`
#如果不需要完全停止旧进程,还希望恢复的,你必须发送 WINCH 信号给旧的主进程,然后,它的工作进程就将开始从容关闭
kill -WINCH `cat /Data/apps/nginx/logs/nginx.pid.oldbin`


升级后的信息:

[root@localhost nginx]# curl -I http://localhost
HTTP/1.1 403 Forbidden
Server: nginx/0.7.59
Date: Wed, 10 Jun 2009 15:04:14 GMT
Content-Type: text/html
Content-Length: 169


参考资料:
Nginx中文文档 > 运行和控制 Nginx - 命令行参数和信号
Tags:
分页: 3/5 第一页 上页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐