CentOS 7 서버에 httpd를 설치했지만 systemctl start httpd.service
실패했습니다.
httpd
CentOS 7에서 올바르게 부팅 하려면 어떤 특정 명령 순서를 입력해야 합니까?
에러 메시지
하단의 전체 결과에서 추출된 정확한 오류 메시지는 다음과 같습니다.
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain.
Set the 'ServerName' directive globally to suppress this message
또한 @DopeGhoti가 제안한 대로 로그 내용은 다음과 같습니다.
[root@localhost ~]# vi /var/log/httpd/error_log
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
AH00015: Unable to open logs
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
AH00015: Unable to open logs
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
설치하는 방법
httpd
:1.) 아파치를 설치합니다:
sudo yum -y install httpd
2.) 재부팅 시 자동으로 다시 시작되도록 Apache를 CentOS 서비스로 활성화합니다.
sudo systemctl enable httpd.service
3.) 방화벽 구성
sudo firewall-cmd --zone=public --add-service=http
sudo firewall-cmd --list-all
sudo firewall-cmd --zone=public --permanent --add-service=http
4.) 서버 이름을 지정하십시오.
vi /etc/httpd/conf/httpd.conf
//Uncomment the ServerName line and give it the IP of the machine:
ServerName 192.168.1.5:80
에러 메시지:
httpd
위의 명령을 사용하여 설치한 후 httpd
다음과 같이 시작할 수 없습니다.
[root@localhost ~]# systemctl start httpd.service
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
[root@localhost ~]# systemctl status httpd.service -l
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2017-06-06 11:31:32 PDT; 15min ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 32268 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
Process: 32267 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 32267 (code=exited, status=1/FAILURE)
Jun 06 11:31:32 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Jun 06 11:31:32 localhost.localdomain httpd[32267]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Jun 06 11:31:32 localhost.localdomain systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE
Jun 06 11:31:32 localhost.localdomain kill[32268]: kill: cannot find process ""
Jun 06 11:31:32 localhost.localdomain systemd[1]: httpd.service: control process exited, code=exited status=1
Jun 06 11:31:32 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server.
Jun 06 11:31:32 localhost.localdomain systemd[1]: Unit httpd.service entered failed state.
Jun 06 11:31:32 localhost.localdomain systemd[1]: httpd.service failed.
[root@localhost ~]# systemctl status httpd.service -l
[root@localhost ~]# vi /var/log/httpd/error_log
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
AH00015: Unable to open logs
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
AH00015: Unable to open logs
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
AH00015: Unable to open logs
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
AH00015: Unable to open logs
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
AH00015: Unable to open logs
~
"/var/log/httpd/error_log" 10L, 675C
@JeffSchaller의 제안
setenforce 0
@JeffSchaller가 SELinux를 고려할 것을 제안한 후 루트로 입력하면 다음과 같은 결과가 발생한다는 것을 발견했습니다 .
[root@localhost ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
[root@localhost ~]# setenforce 0
[root@localhost ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
[root@localhost ~]# systemctl start httpd.service -l
[root@localhost ~]# systemctl status httpd.service -l
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2017-06-06 12:28:38 PDT; 22s ago
Docs: man:httpd(8)
man:apachectl(8)
Process: 32577 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE)
Main PID: 32690 (httpd)
Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─32690 /usr/sbin/httpd -DFOREGROUND
├─32691 /usr/sbin/httpd -DFOREGROUND
├─32692 /usr/sbin/httpd -DFOREGROUND
├─32693 /usr/sbin/httpd -DFOREGROUND
├─32694 /usr/sbin/httpd -DFOREGROUND
└─32695 /usr/sbin/httpd -DFOREGROUND
Jun 06 12:28:38 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
Jun 06 12:28:38 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
[root@localhost ~]#
답변1
Apache를 시작할 수 없습니다. 오류 메시지
(13) 권한 거부됨: AH00091: httpd: 오류 로그 파일 /var/www/mytestdeployment/error.log를 열 수 없습니다.
AH00015: 로그를 열 수 없습니다.
SELinux는 시행 모드에 있으므로 Apache가 비표준 로그 디렉터리에 기록하는 것을 방지합니다. 유지하기 위해서는댄 월시가 울다그리고의료 코드효과적으로 이 디렉토리에 httpd_log_t 정책을 적용할 수 있습니다.
semanage fcontext -a -t httpd_log_t "/var/www/mytestdeployment(/.*)?"
restorecon -Rv /var/www/mytestdeployment
그리고 확인하세요:
ls -lZ /var/www/mytestdeployment
semanage 유틸리티가 없으면 다음 명령을 사용하여 설치할 수 있습니다.
yum install policycoreutils-python
답변2
오류 로그에는 다음이 표시됩니다.
(13)Permission denied: AH00091: httpd: could not open error log file /var/www/mytestdeployment/error.log.
AH00015: Unable to open logs
나에게 이것은 로그를 쓰려는 디렉토리가 /var/www/mytestdeployment
존재하지 않는다는 것을 의미합니다.
실행 sudo mkdir -p /var/www/mytestdeployment
하고 서비스를 다시 시작해 보십시오.
디렉터리가 이미 존재하는 경우 해당 권한 집합으로 인해 디렉터리의 권한을 확인하여 Apache가 해당 디렉터리에 로그를 쓸 수 있는지 확인하세요.
하지만 로그를 기록하도록 구성을 변경하는 것이 좋습니다 /var/log/httpd/
.
답변3
이전 스크린샷에서 볼 수 있듯이 selinux를 비활성화하면 모든 것이 원활하게 작동합니다. 따라서 생성하는 모든 새 파일에 올바른 selinux 컨텍스트가 있는지 확인하십시오.