루트가 아닌 사용자로 nginx 실행


17

내 우분투 10.04 루시드 서버에 nginx를 설치하기이 과정을 따라 http://library.linode.com/web-servers/nginx/installation/ubuntu-10.04-lucid

nginx를 시작하기 위해 init 스크립트를 생성 한 다음 /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'전체 디렉토리를 D ( chown -R nginx:nginx /opt/nginx)와 나는 또한했습니다 chmod -R 755디렉토리를뿐만 아니라.

userCS3에서 제안한 지시문을 추가하면 이 오류가 발생하지만 추가 줄이 있습니다.

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계속 이렇게하면 결국 가격을 지불하게됩니다. 인터넷에 몇 명의 사람들이 있는지 문제를 해결하기위한 첫 번째 포트라고 제안하는 것은 무섭습니다. 유닉스는 모로 닉 (moronic) 무언가를하면 친근한 피드백을 제공하지 않습니다.

답변:


11

우선, init 스크립트를 실행해야합니다

sudo /etc/init.d/name

root로 로그인하지 않은 경우 (로그인 한 사용자가 sudo를 사용하는 경우)

둘째, sudo /etc/init.d/nginx start ==>를 실행하면 nginx.conf 사용자 지시문에 지정한 사용자 (예 : www-data)로 root 및 worker 프로세스로 마스터 nginx 프로세스를 시작합니다.

sudo /etc/init.d/nginx start를 실행할 때 nginx의 모든 프로세스가 루트로 실행 중인지 확인할 수 있습니까?

ps aux | grep [n]ginx

예.

여기에 이미지 설명을 입력하십시오

제안 : Ubuntu 10.04 LTS는 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

내가 가지고있는 작업자 프로세스에는 이름이 아닌 ID가 있습니다. nginx 사용자 ID 일 가능성이 있습니까? 우분투를 처음 접했습니다. apt 패키지에 이러한 플래그가 모두 설정되어 있는지 몰랐습니다. 어떻게 알았어?
John

nginx.conf에 지정한 사용자가 존재하는지 확인 했습니까? 공식 저장소에는이 Nginx가 없습니다! 지정된 URL에서 PPA를 사용하십시오
kaji

8자를 초과하는 다른 사용자 이름을 사용했습니다. 이것이 바로 사용자 ID가 표시되는 이유입니다.
John

네, 하나의 시나리오입니다
kaji

1
nginx -V는 당신의 답입니다
kaji

1

nginx.conf 안에 사용자 지시문을 추가하십시오

참조 : http://wiki.nginx.org/CoreModule#user


더 구체적으로 말씀해 주시겠습니까? 나는 이미 아무 소용이 없습니다.
John

포트 1-1024 사이에서 실행하려면 루트 권한이 필요합니다. 사용자 지시문은 보안상의 이유로 nginx가 루트가 아닌 사용자로 실행되도록합니다.
Shyam Sundar CS

또한 로그를 열고 쓰려면 실행하려는 사용자에게 nginx 디렉토리를 chown'd해야합니다.
Shyam Sundar CS

1

이것에 관한 나의 5 kopek

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

..는 사용자가 제공 한 구성 또는 "-g"옵션으로 재정의해야하는 다른 모든 경로를 제공합니다.


다음 명령은 출력의 모든 행을 표시하고 'path'라는 용어가 포함 된 행을 강조 표시합니다.nginx -V 2>&1 | sed 's/ --/\n--/g' | egrep --color '.*path.*|$'
isedwards

0

제 경우에는 nginx.conf에 파일 참조가 없습니다.

error_log /var/log/nginx/error.log 경고;

오류 : error_log 경고;

따라서 우연히 권한 거부 오류 메시지를 유발 한 /var/log/nginx/error.log 참조를 삭제했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.