3pe*_*pe3 3 nginx error-log vhosts
如何获得动态虚拟主机的错误日志文件?
server {
listen 80;
server_name ~^(?<folder>[^.]*).(?<user>[^.]*).dev.example.com;
root /var/www/projects/dev/$user/$folder/htdocs;
access_log /var/www/projects/dev/$user/$folder/access.log;
error_log /var/www/projects/dev/$user/$folder/error.log;
}
Run Code Online (Sandbox Code Playgroud)
root和access_log正常工作,但是如果我添加error_log行,则nginx无法启动,因为/ var / www / projects / dev / $ user / $ folder /不存在。
根本不支持此功能-您可以在http://nginx.org/r/access_log中使用变量,但不能在http://nginx.org/r/error_log中使用变量。
PS请注意,通常,在access_log或中使用用户输入变量是一个非常糟糕的主意error_log,因为这会导致恶意用户通过在标头中使用随机字符串进行请求来耗尽文件系统上的inode的可能性Host,这可能会导致为每个新请求创建一个新文件。有人试图枚举服务器上所有可能的用户,甚至可能无意间(没有恶意)。您的特定代码不一定受此困扰,因为通常不会由任何UNIX软件自动创建目录,但是它仍然不是最佳的处理方式。
按照nginx的原则,最好为每个用户生成一个单独的http://nginx.org/r/server配置(因为nginx可以在没有停机的情况下重新启动)。考虑到它还有其他好处,因为nginx严重依赖数学上有效的数据结构来查找正确的server(不是基于regexp的服务器配置)。不使用中的变量access_log还可以确保对的写入access_log可以被缓冲,这可以大大提高服务器的有效吞吐量(特别是如果您登录非SSD HDD)。
基本上,nginx中已经有很多创可贴来支持其中的变量access_log(只需查看http://nginx.org/r/access_log的限制列表,了解何时使用变量指定文件),并且,我猜想还被认为不宜引入更多此类创可贴error_log(特别是考虑到error_log生产中场景不应该像那样大)access_log,因此,如有必要,您可以轻松编写外部工具来将其拆分。
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |