如何配置nginx将其error.log文件放在我有写权限的地方?

时间:2017-03-05 06:21:41

标签: nginx

我假设我只需要在nginx.conf文件中插入一个条目来解决困扰我的错误(见下文),但到目前为止,我还没有弄清楚算法的语法。任何帮助将不胜感激。

我希望将nginx作为普通用户运行,同时使用自制程序作为具有管理权限的用户进行安装。 nginx正试图在error.log处写入/usr/local/var/log/nginx/error.log文件,但由于我的常规用户在那里没有写入权限,因此无法写入。{/ p>

另一个问题来自于有两个nginx.conf文件,一个全局文件和一个本地文件,据我所知,它们都被阅读。它们位于默认的自制位置/usr/local/etc/nginx/nginx.conf和我的本地项目目录$BASE_DIR/nginx.conf

以下是nginx尝试启动时生成的错误:

[WARN] No ENV file found
10:08:18 PM web.1 |  DOCUMENT_ROOT changed to 'public/'
10:08:18 PM web.1 |  Using Nginx server-level configuration include 'nginx.conf'
10:08:18 PM web.1 |  4 processes at 128MB memory limit.
10:08:18 PM web.1 |  Starting php-fpm...
10:08:20 PM web.1 |  Starting nginx...
10:08:20 PM web.1 |  Application ready for connections on port 5000.
10:08:20 PM web.1 |  nginx: [alert] could not open error log file: open() "/usr/local/var/log/nginx/error.log" failed (13: Permission denied)
10:08:20 PM web.1 |  2017/03/04 22:08:20 [emerg] 19557#0: "http" directive is duplicate in /usr/local/etc/nginx/nginx.conf:17
10:08:20 PM web.1 |  Process exited unexpectedly: nginx
10:08:20 PM web.1 |  Going down, terminating child processes...
[DONE] Killing all processes with signal  null
10:08:20 PM web.1 Exited with exit code 1

任何有关如何启动和运行nginx的帮助,以便我可以回到这个项目的开发方面将非常感激。

2 个答案:

答案 0 :(得分:4)

整个问题源于尝试运行nginx作为我的普通用户自己,尽管nginx是由我的用户自己以管理权限安装的。我能够使用以下具有管理权限的用户执行以下命令来解决此处显示的错误:

sudo chmod a+w /usr/local/var/log/nginx/*.log
sudo chmod a+w /usr/local/var
sudo chmod a+w /usr/local/var/run

请注意,/usr/local/var目录似乎是在安装nginx时由homebrew创建的,而且这台机器是我的笔记本电脑,所以我看不出有任何理由不打开它。在其他情况下,您可能会遇到更大的安全问题。

我承认,当我写这个问题时,我认为这是关于将error.log文件移动到另一个目录。现在我看到这不是一个完整的解决方案,所以我在这里提出的解决方案是让普通用户在必要的目录中写入权限。

我改变主意的原因是nginx可以(在这种情况下)在(或)读取nginx.conf文件之前生成错误需要能够将这些错误报告给日志文件。修改nginx.conf文件永远不会解决我的问题。让我想起这个问题的是阅读这篇文章:How to turn off or specify the nginx error log location?

答案 1 :(得分:2)

您是否尝试通过修改nginx.conf

将日志路径设置为自定义位置
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

将路径更改为某处使用具有写权限。