Запустити nginx як некористувацький користувач


17

Я дотримувався цього процесу, щоб встановити nginx на мій сервер Lucid Ubuntu 10.04 http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

Я загубився після моменту створення сценарію init, щоб запустити nginx, а потім викликати /etc/init.d/nginx start. Коли я це зробив, я отримав таку помилку:

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:17:27 [emerg] 859#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

Єдиний спосіб я запускати це, якщо я використовую, sudoі він запускає процес як root, що я не хочу.

Я мав chownби весь каталог ( chown -R nginx:nginx /opt/nginx), а також chmod -R 755і каталог.

Додавання userдирективи, запропонованої CS3, також дає мені цю помилку, але з додатковим рядком.

Starting nginx_main: Starting /opt/nginx/sbin/nginx...
nginx: [alert] could not open error log file: open() "/opt/nginx/logs/error.log" failed (13: Permission denied)
2012/03/16 18:48:34 [warn] 1606#0: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /opt/nginx/conf/nginx.conf:2
2012/03/16 18:48:34 [emerg] 1606#0: open() "/opt/nginx/logs/access.log" failed (13: Permission denied)

Будь-які ідеї?


and I've also chmod -R 755 the directory as wellПродовжуйте це робити, і ви зрештою заплатите за це. Страшно засвідчити, скільки людей в Інтернеті пропонують це як перший порт дзвінка, щоб "виправити" будь-яку проблему. Unix не дасть доброзичливих відгуків, якщо ви зробите щось придумливе.

Відповіді:


11

Перш за все, слід запустити сценарії init

sudo /etc/init.d/name

коли ви не авторизовані як root (коли користувач, який увійшов у систему, увімкнено sudo)

По-друге, коли ви запускаєте sudo /etc/init.d/nginx start ==>, він запускає основний процес nginx як кореневий і робочий процеси, як користувач, якого ви вказали у вашій інструкції користувача nginx.conf (наприклад, www-data)

Чи можете ви підтвердити, чи почався весь ваш процес під nginx як рут при видачі sudo /etc/init.d/nginx?

з

ps aux | grep [n]ginx

напр.

введіть тут опис зображення

Пропозиція: Ubuntu 10.04 LTS має чудову підтримку пакету ubuntu від команди nginx. Отже, навіщо турбуватися установкою з джерела, якщо у вас немає вимоги до спеціального модуля всередині nginx?

Зверніться тут

Бінарний пакет вже поставляється з дуже потрібними модулями

nginx version: nginx/1.0.12
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-echo --add-module=/build/buildd/nginx-1.0.12/debian/modules/nginx-upstream-fair

У мене робочий процес має посвідчення особи, а не ім’я. Якийсь шанс це ідентифікатор користувача nginx? Я досить новачок у Ubuntu. Я не знав, що в пакеті вкладено всі ці прапори. Як ти це дізнався?
Іоанн

Ви перевірили, чи існує користувач, якого ви вказали у своєму nginx.conf, чи ні? Офіційне репо не має цього Nginx! Будь ласка, використовуйте PPA за вказаною URL
kaji

Я використовував інше ім’я користувача, яке перевищує обмеження 8 символів. Ось чому відображається ідентифікатор користувача, правда?
Іоанн

так, це один сценарій
Каджі

1
nginx -V - це ваша відповідь
kaji

1

Додайте інструкцію користувача всередині nginx.conf

Довідка: http://wiki.nginx.org/CoreModule#user


Вибачте, ви могли б бути більш конкретними? Я це зробив уже безрезультатно.
Іоанн

Запуск будь-якого між портами 1 до 1024 вимагає привілеїв root. Директива користувача забезпечує, що nginx працює з некористувальним користувачем з міркувань безпеки.
Shyam Sundar CS

Крім того, щоб журнали були відкриті та записані, каталог nginx повинен бути chown'd користувачеві, від якого ви намагаєтеся запустити.
Shyam Sundar CS

1

Мої 5 копійок щодо цього

nginx -V 2>&1 | sed 's/ --/\n--/g' | grep path

.. отримає всі інші патчі, які вам слід перекрити в наданій користувальницькій конфігурації або з опцією "-g".


Наступна команда показує всі рядки з виводу, і виділяє ті, що містять термін "шлях":nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards

0

У моєму випадку в моєму nginx.conf відсутня посилання на файл:

error_log /var/log/nginx/error.log попереджають;

Стало: error_log warn;

Тому я випадково видалив посилання /var/log/nginx/error.log, що спричинило повідомлення про помилку в дозволі, відхиленому.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.