Единственный способ сделать это - перекомпилировать nginx :( после редактирования src/os/unix/ngx_files.c
и изменения маски создания файла в ngx_open_tempfile
с 0600
на 0660
(или любой другой perms, который вам нужен).
Изменение umask в скрипте nginx init не помогает из-за значения 0600
.
Нет никаких user:
, group:
или other:
настроек для client_body_temp_path
, как для модуля прокси.
Хотя функция ngx_open_tempfile
считывает переменную access
, которая в противном случае может быть установлена на что-то иное, чем 0600
вызовом ngx_conf_set_access_slot
, как для этих модулей:
src/http/modules/ngx_http_uwsgi_module.c
171: ngx_conf_set_access_slot,
src/http/modules/ngx_http_dav_module.c
102: ngx_conf_set_access_slot,
src/http/modules/ngx_http_scgi_module.c
111: ngx_conf_set_access_slot,
src/http/modules/ngx_http_fastcgi_module.c
254: ngx_conf_set_access_slot,
src/http/modules/ngx_http_proxy_module.c
291: ngx_conf_set_access_slot,
она не доступна для клиентского кода, который является частью ядра nginx. Отсюда и необходимость в перекомпиляции.
Помимо обновления 0600
до 0660
вам нужно chgrp your_app_server_group
директории client_body_temp_path
до группы, к которой принадлежит ваше приложение, а затем также установите на него setgid (chmod g+s your_app_server_group
), чтобы файлы, записанные в него nginx, принадлежали этой группе.
В итоге я использовал следующий сценарий для запуска программы и заменил его указателем по умолчанию на приложение.
#!/bin/bash
echo -n "$(date +%s)" >> ~/myapplog.log
/application_path/
echo ",$(date +%s)" >> ~/myapplog.log
Он в основном регистрирует время запуска и остановки приложения в виде отметки времени для каждого сеанса в новой строке, разделенной запятой. например: 1452663495,1452663502
Вы можете изменить (дата +% S) на нужный вам формат (дату см. на странице руководства)