如何配置nginx以提供现有的静态文件但将不存在的文件的请求转发给apache?

如何配置nginx以提供现有的静态文件但将不存在的文件的请求转发给apache?

我应该写这样的东西

    location !-f {
        proxy_pass         http://lst207.b.ls1.ru:8000/;
        }

# static content
location ~* ^.+\.(jpg|jpeg|gif|css|js|ico|rar|gz|zip|pdf|tar|bmp|xls|doc|swf|mp3|avi|png|htc|txt|htc|flv)$ {
    #root         "$document_root$";
    access_log   off;
    expires      7d;
} 

但似乎“-f”标志不起作用

答案1

try_files 就是为这种情况设计的。

location / {
    try_files $uri $uri/ @fallback;
}

location ~* \.(jpg|jpeg|gif|css|js|ico|rar|gz|zip|pdf|tar|bmp|xls|doc|swf|mp3|avi|png|htc|txt|htc|flv)$ {
    access_log   off;
    expires      7d;
} 

location @fallback {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_pass http://lst207.b.ls1.ru:8000/;
}

答案2

如果您的 index.php 的第一行(在注释中)是: header("HTTP/1.0 302 Found");那么它应该向浏览器发送 302 而不是 404,但我是从 apache 的角度考虑,而不是 nginx。

第二行可能是这样的: header("Location: <redirect location>");

这就够了吗?

答案3

location ~* ^.+.(jpg|jpeg|gif|css|js|ico|rar|gz|zip|pdf|tar|bmp|xls|doc|swf|mp3|avi|png|htc|txt|htc|flv)$ {
    root /the/location/of/static;
    access_log off;
    expires 7d;
    }
location / {
    proxy_set_header X-Real-IP  $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://lst207.b.ls1.ru:8000/;
    }

这对你有用吗???

相关内容