Nginx反向代理(在apache中重写静态文件)

时间:2012-11-28 10:25:00

标签: apache mod-rewrite nginx hosting reverse-proxy

我在Apache面前遇到Nginx(设置为反向代理)的问题。我正在使用Apache来提供PHP文件和应用.htaccess规则。

Nginx有效,但.htaccess中的一些重写没有。

我使用timthumb.php管理以下媒体:

/cache/150/100/file.jpg > /media/thumb.php?src=images/file.jpg&w=150&h=100

重写规则仅适用于PHP应用程序,但它不适用于上面的静态文件。 当我尝试执行自己的静态规则时,Nginx返回404。

RewriteEngine On

RewriteRule ^cache/([0-9]+)/([0-9]+)/([a-z0-9_\-\.\/]+)$ /media/thumb.php?src=images/$3&w=$1&h=$2 [L]
RewriteRule ^upload/([0-9]+)/([0-9]+)/([a-z0-9_\-\.\/]+)$ /media/thumb.php?src=upload/$3&w=$1&h=$2 [L]

<Files .*>
    Order Deny,Allow
    Deny From All
</Files>

RewriteRule ^(?:application|modules|system)\b.* index.php/$0 [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule .* index.php/$0 [PT]

1 个答案:

答案 0 :(得分:1)

我猜你是通过nginx直接提供你的“/ upload”和“/ cache”目录 - 而不是把它传递给apache。

请尝试以下规则:

 location ^~ /upload {
        .......
 }

 location ^~ /cache {
        .......
 }

在nginx配置中为静态文件提供服务的地方之前。让我知道它是否有效 - 如果没有 - 粘贴也是nginx配置的一部分。

更多阅读:http://wiki.nginx.org/HttpCoreModule#location

取决于您在代理期间如何配置您的位置 - 它们具有不同的优先级。