SystemD를 통해 실행할 때 nginx가 나타나지 않습니다

SystemD를 통해 실행할 때 nginx가 나타나지 않습니다

다음 명령을 사용하여 메인라인 nginx 1.13.9를 설치했습니다.제공속도CentOS 7.4에서. yum localinstall기업 지배구조가 그렇게 하도록 강요하기 때문에 이 rpm을 사용해야 합니다 .

내 문제는 systemctl start nginx항상 다음과 같은 결과가 나온다는 것입니다.

Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

Journalctl은 다음과 같이 말합니다.

Mar 07 08:57:05 myhost nginx[19466]: nginx: [emerg] open() "/var/opt/nginx/config/nginx.conf" failed (13: Permission denied)

(여기서 볼 수 있는 것은 또 다른 회사의 일입니다. conf 파일을 등 아래에 둘 수 없으며 변경하기 위해 루트 권한이 필요하지 않은 디렉토리에 보관해야 합니다)

nginx.conf에 설정된 권한은 다음과 같습니다.

-rw-r--r--. 1 nginx nginx 241 Mar 7 09:17 nginx.conf

나는 nginx.conf를 절대 최소값으로 줄였고 로그 파일, pid 등을 권한이 확실히 부여된 디렉토리에 넣어 보았습니다. 오류 로그에는 아무 것도 포함되어 있지 않습니다.

다음은 축소된 nginx.conf입니다.

user nginx nginx;
pid /tmp/nginx.pid;
error_log /tmp/error.log debug;

events {
}

http {
  default_type application/octet-stream;
  charset      UTF-8;

  server {
    listen          8080;
    location / {
      root /tmp/;
    }
  }
}

약간 수정된 nginx.service정의는 다음과 같습니다.

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStart=/usr/sbin/nginx -c /var/opt/nginx/config/nginx.conf -g "error_log  /tmp/error.log debug;"
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

(nginx.conf를 읽기 전에 nginx가 실패할 경우를 대비하여 error_log를 강제로 시도하고 있음을 알 수 있습니다)

이렇게 하면 정말 효과가 좋습니다 sudo -u nginx /usr/sbin/nginx -c /var/opt/nginx/config/nginx.conf -g "error_log /tmp/error.log debug;". 간단한 경고에도 불구하고 프로세스는 정상적으로 시작됩니다.

nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /var/opt/nginx/config/nginx.conf:1

나는 이것이 어리석은 실수임에 틀림없다고 확신하지만 어떤 실수인지는 모릅니다.

답변1

이 문제는 제가 저지른 두 가지 실수로 인해 발생했습니다.

  • 디렉터리 권한이 올바르지 않습니다.
  • 그룹 멤버십이 누락되었습니다.

디렉터리 중 하나가 누락되어 x프로세스가 경로를 통과할 수 없습니다. 나는 chmod g+X그것을해야만했다. 이 외에도 nginx 그룹에 nginx 기술 사용자(내 시나리오에서는 기본 nginx가 아님)를 추가해야 했습니다.

관련 정보