我在 NGINX 上有近 200 个子域并有指令
access_log /var/log/nginx/$host-access.log;
问题是实际上不存在任何子域访问日志文件,因此错误日志加载了类似的错误
(13: Permission denied) while logging request...
这是一个 Wordpress 多站点安装,因此子域是在 WP 数据库中创建的。NGINX 在收到请求之前一无所知。
这应该如何处理?我考虑过编写一个 PHP 脚本来解析 URI 并检查日志文件是否存在,如果不存在就编写它。我不在乎是否没有记录第一个请求。或者有没有办法让 NGINX 最初创建日志文件,如果它不存在?我知道这会从错误的请求中创建一些垃圾日志文件。PHP 脚本会避免这种情况。任何建议表示赞赏!
在文件名中使用
$host
不是一个好方法。这意味着您的 Web 服务器可能会通过发送具有数百万个不同Host:
标头内容的请求而受到攻击。这可能会导致文件系统中的 inode 耗尽。为防止这种情况,您应该在 nginx
server_name
指令中列出所有子域,然后将$server_name
其用作日志文件名中的变量。对于默认虚拟主机,您可以使用一个日志文件或根本不使用日志文件。但是,要解决您当前的权限问题,您应该确保运行 nginx 的用户对 nginx 日志目录具有写入权限。
例如,您应该应用以下内容:
/var/log/nginx
www-data
www-data
用户身份运行