nginx 配置例子 (重定向和过滤)
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,它已经在该站点运行超过两年半了。Igor 将源代码以类BSD许可证的形式发布。尽管还是测试版,但是,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。
大家可以在这里下载http://www.oschina.net/p/nginx
下面整理了一些nginx常用的请求过滤例子
以下为字符串匹配操作符
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配
1: 限制某些类型的客户端的访问
return 503;
}
2:针对不同的文件类型
location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv)$ {
if ($http_referer ~* javagg.com) {
#rewrite ^/ http://www.javagg.com/403.html;
return 403;
}
}
3:针对不同的目录
location /img/ {
root /data/img/;
if ($http_referer ~* javagg.com) {
rewrite ^/ http://www.admin99.net/images/error.gif
#return 403;
}
}
另外的一个nginx配置例子
worker_processes 2; #工作进程数,在网上看到说最优是cpu的二倍
error_log current_path/log/nginx.error.log debug;
pid shared_path/pids/nginx.pid;
events {
worker_connections 1024;#最大连接数
}
http {
include /usr/local/nginx/conf/mime.types;#content type 文件
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log current_path/log/nginx.access.log main;#log文件存放地方
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 70;
gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_comp_level 9;
gzip_proxied any;
gzip_types application/xml application/javascript application/x-javascript application/atom+xml application/rss+xml;
gzip_types text/css text/html text/javascript text/js text/plain text/xml;
upstream mongrel {#proxy 负载均衡配置
server 127.0.0.1:8000;#服务器1
server 127.0.0.1:8001;#服务器2
}
server {
listen 80;
server_name fucema.net www.fucema.net;
root current_path/public;
index index.html index.htm;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host "www.fucema.net";
proxy_redirect false;
proxy_max_temp_file_size 0;
# rewrite 'fucema.net' -> 'www.fucema.net'
if ($host = 'fucema.net' ) {
rewrite ^/(.*)$ http://www.fucema.net/$1 permanent;
}
#如果静态文件存在服务器,则跳过rewrite规则
if (-f $request_filename) {
expires max;
break;
}
# redirect feed requests to feedburner, unless its the feedburner agent
if ($http_user_agent !~ FeedBurner) {
rewrite ^/feed/atom.xml$ http://feeds.feedburner.com/fucema;
}
if (-f $request_filename/index.html) {
expires 7d;
rewrite (.*) $1/index.html break;
}
# support rails page caching
if (-f $request_filename.html) {
rewrite (.*) $1.html break;
}
# pass it onto upstream mongrel cluster
if (!-f $request_filename) {
proxy_pass http://mongrel;
break;
}
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov).*?$ {
root current_path/public;
if (!-f $request_filename) {
proxy_pass http://mongrel;
break;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root current_path/public;
}
}
}