nginx try_files 绝对路径

nginx try_files 绝对路径

我是 nginx 的新手,我想要做的是捕获所有图像请求 (*.jpg|png|gif) 并将它们转发到根范围之外的 php 脚本。

我当前的工作脚本是这样的:

server {

   index index.php;

   # PHP-FPM
   location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass unix:/var/run/php5-fpm.sock;
   }

   # Images handler
   root /var/www/images-handler;
   location ~* \.(gif|jpg|png) {
      rewrite ^ /img.php last;
   }

}

问题是我必须将root变量更改为/var/www/website-contents。由于website-contentsimages-handler没有相同的父目录,我将一个root变量添加到我的location段中,如下所示:

root /var/www/website-contents;

location ~* \.(gif|jpg|png) {
   root /var/www/images-handler;
   rewrite ^ /img.php last;
}

但它不起作用。所有图像都返回 404 响应。

我是否分别创建/var/www根目录、添加website-contents和和到images-handler它们各自的location段中?我应该为里面创建一个符号链接吗?/~* \.(gif|jpg|png)/var/www/images-handler/var/www/website-contents

有没有更好的办法来解决这一切呢?

多谢。

答案1

location ~ \.php$目前,所有 php 脚本都由您的块执行,并root使用您提供的。如果您想使用不同的根目录执行 php 脚本,则需要覆盖该位置。有多种方法可以实现这一点。对于一个 php 脚本来说,location =最简单的方法是使用 。例如:

root /var/www/website-contents;

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

location ~* \.(gif|jpg|png) {
    rewrite ^ /img.php last;
}

location = /img.php {
    root /var/www/images-handler;
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

相关内容