我有一个外部启动的 FastCGI 应用程序,它侦听套接字“/tmp/foo.sock”和“/srv/static”中的静态文件目录。Apache 对套接字和目录拥有所有必要的权限。
我需要:所有以“/static”开头的请求都应由 apache 使用“/srv/static”的内容处理。所有其他请求都应由 FastCGI 应用程序处理。这是我当前的虚拟主机配置:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.foo.com
ServerAlias foo.com
Alias /static /srv/static
FastCgiExternalServer /* -socket /tmp/foo.sock
ErrorLog /var/log/apache2/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog /var/log/apache2/access.log combined
</VirtualHost>
虽然这看起来很简单,但它却让我很头疼。根据http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiExternalServer'FastCgiExternalServer' 的第一个参数应该是 'filename',匹配后会导致 apache 将请求委托给外部 FastCGI 应用程序。我这里遗漏了什么?
答案1
根据FastCGI 常见问题解答,将FastCgiExternalServer
行更改为以下
FastCgiExternalServer /srv/static -socket /tmp/foo.sock
然后再试一次。
答案2
FastCgiExternalServer 的第一个参数应该是要重定向的某个文件名。它不必存在。它没有说明支持通配符。我认为使用 /srv/static 不是正确的答案,您希望由 Apache 来处理。