首页->正文

nginx代理简单应用

2011-04-03 -Web开发 标签: nginx 缓存

通过具体配置说明下nginx代理模块(HttpProxyModule)的简单应用。测试域名为www.myproxy.com,服务器ip为127.0.0.1,监听80端口。后端被代理服务器监听81端口,具体配置如下:
http {
     #以上省略其他http相关配置

    #定义代理缓存路径,名称为proxy_cache
    proxy_cache_path  /data/cache/nginx/myproxy  levels=1:2   keys_zone=proxy_cache:100m;

    #代理设置
    server {
        listen 80;
        server_name www.myproxy.com;
        gzip on;
        access_log logs/myproxy_front.access.log main;

        #供后端应用获取HTTP_HOST,否则为默认的www.myproxy.com:81
        proxy_set_header Host $http_host;
        #REMOTE_ADDR为代理服务器ip,后端要通过HTTP_X_FORWARDED_FOR获取用户的实际ip
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        #设置生产缓存文件的key和文件名,缓存文件的存放目录会根据此key进行md5,然后根据
        #proxy_cache_path中的levels从末尾取相应的字符构成各级目录
        proxy_cache_key "$host$request_uri";

        #默认请求不缓存,直接交给后端处理
        location / {
            proxy_pass http://www.myproxy.com:81;
        }
         
        #动态页生成的伪静态页缓存下来
        location ~* ^/html/\d+\.html$ {
            proxy_pass http://www.myproxy.com:81;
            #添加自定义header,方便标记,非必须:)
            add_header Proxy-cache Hit;
            #使用http中定义的proxy_cache路径
            proxy_cache proxy_cache;
            #缓存30分钟
            proxy_cache_valid 30m;
        }
        #缓存10分钟
        location ~* ^/list/\d+$ {
            proxy_pass http://www.myproxy.com:81;
            add_header Proxy-cache Hit;
            proxy_cache proxy_cache;
            proxy_cache_valid 10m;
        }
    }
    #后端应用设置
    server {
        listen 81;
        server_name www.myproxy.com;
        access_log logs/myproxy_backend.access.log main;
        root /data/www/myproxy;

        location / {
            index index.html index.php;
        }

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
       }

       #动态地址重写为静态
       rewrite ^/html/(\d+)\.html$ /detail.php?id=$1 last;
       rewrite ^/list/(\d+)$ /list.php?sort=$1 last;
    }
}

代理中尽量只缓存时效要求不高的动态内容,而其他相对较长时间不变的js/css/images可分离至单独服务器并设置其他主域名,降低对动态服务器压力并减少不必要的cookie传递(莫非你还想用cookie来防盗链?是个好办法!)

可以看出,本例中更倾向是反向代理的配置,即广大的用户通过此代理服务来访问你后端服务器。当然你可以把nginx设置为真正意义的正向代理(参见nginx的resolver配置项),把从互联网上获取的内容进行缓存。另外,你用它缓存响应较慢的接口也是一个好办法。

参考资料
.nginx HttpProxy官方文档 http://wiki.nginx.org/HttpProxyModule
扩展思考&阅读
.根据proxy_cache_path和proxy_cache_key如何清除指定页面代理缓存?
.如何处理缓存页中的动态内容?
.Cache Purge:http://labs.frickle.com/nginx_ngx_cache_purge/
.nginx HTTP Server: https://www.packtpub.com/nginx-http-server-for-web-applications/book

下一篇 php增加Last-Modified为何无效

上一篇 页面跳转的方式总结

相关文章

php增加Last-Modified为何无效

nginx SSI模块应用

Varnish安装配置和使用

mysql、nginx权限设置不当导致的两则问题

Varnish3.0中对gzip的支持

文章分类

开发小提示

  • 1:Mongodb中通过db.yourCollectionName. dataSize()查看某个文档的大小
  • 2:linux下用reset命令恢复查看二进制文件导致的命令行乱码
  • 3:查看MySQL表的索引情况show index from tableName
  • 更多...

交流

  • wangnow(a)126.com