访问nginx判断文件是否存在并跳转

访问nginx判断文件是否存在并跳转。

nginx的这个功能呢,通常用于文件服务器或者下载服务器。
如果文件不存在,则跳转到其他端口或者其他服务器上。
方法也超级简单:
用rewrite(地址重定向)来实现。
先给个rewrite官方链接:

http://nginx.org/en/docs/http/ngx_http_rewrite_module.html

nginx中代码实现示例:

server{
       listen            80;
       servername www.test.com;
       access_log  /var/log/nginx/80.access.log;
       error_log  /var/log/nginx/80.error.log;
       location /group0/M00{
           root /data/fdfs/storage;
           ngx_fastdfs_module;
           if ( !-e $request_filename ){
           rewrite ^/group0/M00(.*)$ http://192.168.100.30:8089/group0/M00$1 permanent;
           }
       }
}

注意,主要就是这一段代码:

           if ( !-e $request_filename ){
           rewrite ^/group0/M00(.*)$ http://192.168.100.30:8089/group0/M00$1 permanent;
           }

在这里简单说明一下这部分的意思:
!-e 是不为真的意思,
意思就是如果$request_filename这个变量不存在,则会把以/group0/M00开头的所有链接rewrite到http://192.168.100.30:8089/group0/M00 这个地址中。
后面有个permanent,这里是永久重定向。返回状态码301

访问效果就是我在浏览器中输入:
http://www.test.com/group0/M00/test.jpg
如果这个文件在/data/fdfs/storage这个目录中不存在,则会自动跳转到:
http://192.168.100.30:8089/group0/M00/test.jpg

再补充一点,nginx有重试机制,可以通过proxy_next_upstream,指定请求传递到下一个服务器。默认404状态码是不会被传递的。所以需要指定:

proxy_next_upstream error timeout http_404;

这样如果访问一个后端服务器返回404,会传递到下一个服务器上。
nginx 默认不转发post请求,所以如果是post请求还需要加一个参数non_idempotent:

proxy_next_upstream error timeout http_404 non_idempotent;

代码示例:

upstream app {
        server 192.168.0.81:8001;
        server 192.168.0.82:8002;
}
server
    {
        server_name www.test.com;
        listen 80;
        location ~* /\.(html|htm|jsp|php|js)$ {
           deny all;
       }
        location / {
        proxy_buffering off;
        proxy_pass http://app;
        proxy_next_upstream error timeout http_404 non_idempotent;  #这里
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        error_log /var/log/nginx/webtest.error.log;
        access_log  /var/log/nginx/webtest.access.log;
    }
    原文作者:森林番茄
    原文地址: https://blog.csdn.net/fangfu123/article/details/103817776
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞