Executa o nginx como um usuário não root

16

Eu segui esse processo para instalar o nginx no meu link

Eu me perdi depois de criar um script de inicialização para iniciar o nginx e depois chamar /etc/init.d/nginx start. Quando fiz isso, recebi o seguinte erro:

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)

A única maneira de executá-lo é se eu usar sudo e ele executar o processo como root , que é o que eu não quero.

Eu tenho chown o diretório inteiro ( chown -R nginx:nginx /opt/nginx ) e também chmod -R 755 o diretório.

Adicionar a diretiva user conforme sugerido pelo CS3 também me dá esse erro, mas com uma linha adicional.

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)

Alguma idéia?

    
por John 16.03.2012 / 06:20

4 respostas

10

Primeiro de tudo, os scripts init devem ser executados

sudo /etc/init.d/name

quando você não está logado como root (quando o usuário logado é sudo habilitado)

Em segundo lugar, quando você executa o sudo /etc/init.d/nginx start == > ele dispara o processo nginx master como processos root e worker como o usuário especificado em sua diretiva do usuário nginx.conf (por exemplo, www-data)

Você pode confirmar se todo o seu processo sob o nginx está sendo executado pelo root ao emitir sudo /etc/init.d/nginx start?

com

ps aux | grep [n]ginx

por exemplo,

Sugestão:OUbuntu10.04LTSpossuiumexcelentesuporteaopacoteUbuntudaequipenginx.Então,porqueseincomodareminstalarapartirdocódigo-fontesevocênãotiverumrequisitoparaomódulopersonalizadodentrodonginx?

Consulte aqui

O pacote binário já vem com módulos muito necessários

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
    
por 16.03.2012 / 06:58
1

Adicione a diretiva usuário dentro do nginx.conf

Reference: http://wiki.nginx.org/CoreModule#user

    
por 16.03.2012 / 06:26
1

Meu 5 kopek sobre isso

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

.. você obterá todos os outros caminhos, que você deve substituir na configuração personalizada ou com a opção "-g".

    
por 19.07.2015 / 12:07
0

No meu caso, havia uma referência de arquivo ausente no meu nginx.conf:

error_log /var/log/nginx/error.log warn;

Tornou-se: error_log warn;

Por isso, acidentalmente apaguei a referência /var/log/nginx/error.log que causou a mensagem de erro negada.

    
por 18.06.2017 / 20:01