• Nginx:一个反向代理的设置


    有这么一个情况,

    有个运行Asp的应用,比较土,还是用本地 *.mdb 的数据库。这么一来,就不可能通过 Apache ::: asp 这样的插件令其运行在Linux的环境中。而且是相当烂的一个 asp 程序,连html模板都没单独目录存放,直接跟 *.asp 混在一块。

    幸好这个世界有 Nginx, 是对待这种破东西最好的优化。

    如果直接靠 IIS 既处理 asp 又处理静态文件的话,流量一大性能是不堪想象了。
    (在ab压力测试中, 就100线程请求一个 gif 的静态文件做测试, 已经令IIS的CPU相当不安)

    2台服务器,运行架构计划为最简单的 Nginx –> IIS

    就通过 Nginx Proxy 到IIS 的80端口上。

    但测试的时候发现,虽然速度瞬间得到体现,但每次请求,Nginx 都会往IIS上拉文件,特别是静态文件。
    大,而且会让IIS的cpu不安分。

    原本试用在 Linux 下 mount  一个 smb 的盘,然后让Nginx直接往里头通过 smb 请求 IIS 应用服务器上的静态文件。从而绕开 IIS 避免压力。但出了怪问题….况且跟本文无关,就暂略不说了。

    最后用上了 Nginx proxy_store ,Nginx 直接把静态文件在本地硬盘创建并读取,

    效果相当好,而且某程度上对待这么烂的应用要装个Squid 确实有点大题小作。

    但 Proxy_store 跟 Squid 是有区别的!! 最明显的一点在于其不具有expires,无法通过程序控制cache什么时间过期。往后要写个脚本定期删除缓存目录中的内容,不过这也正合我意。

    以下是配置方式:

    如果需要将文件缓存到本地,则需要增加如下几个子参数:
    proxy_store on;
    proxy_store_access user:rw group:rw all:rw;
    proxy_temp_path 缓存目录;

    其中,
    proxy_store on 启用缓存到本地的功能,
    proxy_temp_path 指定缓存在哪个目录下,如:proxy_temp_path /var/nginx_cache;

    在经过上一步配置之后,虽然文件被缓存到了本地磁盘上,但每次请求仍会向远端拉取文件,为了避免去远端拉取文件,还必须增加:

    if ( !-e $request_filename) {
    proxy_pass  http://192.168.10.10;
    }

    即改成有条件地去执行proxy_pass,这个条件就是当请求的文件在本地的proxy_temp_path指定的目录下不存在时,再向后端拉取。

    整体配置例子:

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|html|htm|css)$ {  #指定缓存文件类型
    expires 7d;  #设置浏览器过期时间
    root /data1/nginx_cache/iis;  #静态文件根目录目录(必须对应proxy_temp_path)
    proxy_store on;  #开启缓存机制
    proxy_store_access user:rw group:rw all:rw;  #缓存读写规则
    proxy_temp_path /data1/nginx_cache/iis;  #存放静态文件的缓存目录
    include proxy.conf;  # 外联proxy理的详细配置如proxy_set_header, client_max_body_size ….
    if ( !-e $request_filename) {  #正则表达式,匹配缓存目录中的文件与源文件是否存在)
    proxy_pass  http://192.168.10.10 # IIS 应用的服务器地址
    }
    }

    原创文字只代表本人某一时间内的观点或结论,本人不对涉及到的任何代码担保。转载请标明出处!

  • 相关阅读:
    redis的安装
    thinkphp5学习
    php数组排序和查找的算法
    phprpc的简单使用
    apache学习教程
    mysql的存储过程,函数,事件,权限,触发器,事务,锁,视图,导入导出
    php设计模式八-----装饰器模式
    php设计模式七 ---组合模式
    64bit ubuntu14.04编译PlatinumKit出现的arm-linux-androideabi-g++: not found错误解决方法
    TS相关知识点
  • 原文地址:https://www.cnblogs.com/leleroyn/p/1922159.html
Copyright © 2020-2023  润新知