Устанавливаем Apache на Linux
Устанавливаем и запускаем httpd
yum install httpd #устанавливаем systemctl enable httpd #разрешаем запуск веб-сервера после перезагрузки операционной системы systemctl start httpd #запускаем веб-сервер Apache
В браузере вводим IP-адрес или домен нашего сервера и проверяем, что Apache работает. Если ничего не отображается, проверяем запущен ли веб-сервер командой ps ax | grep httpd. Проверяем открыт ли доступ к веб-серверу в файрволл. Разрешаем сервис httpd и должно работать.
Добавляем и конфигурируем наш сайт
Пусть доменное имя сайта будет puzzle.itsoft.ru. Сайты будем хранить в папке /site. Логи мы положим рядом с публичным контентом сайта, но так, что обращаясь к сайту логи прочитать нельзя. Аналогичным образом рекомендуется хранить защищённый контент сайта, к которому не должно быть прямого доступа у посетителей сайта.
mkdir /site #создаём папки, где будет расположен веб-сайт mkdir /site/puzzle mkdir /site/puzzle/public mkdir /site/puzzle/logs chown -R apache. /site/ /site/puzzle/public/index.html #создаём файлик и записываем туда просто одно слово Hi! vi /etc/httpd/conf.d/puzzle.itsoft.ru.conf #и вставляем следующий контент <VirtualHost *:80> ServerName puzzle.itsoft.ru ServerAlias www.puzzle.itsoft.ru DocumentRoot /site/puzzle/public <Directory /site/puzzle/public> Options FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog /site/puzzle/logs/error.log CustomLog /site/puzzle/logs/access.log common </VirtualHost>
Теперь перезагружаем веб-сервер.
systemctl restart httpd # и Apache не запустился Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details. systemctl status httpd.service #ничего толкового не показывает, т.к. всё обрезано systemctl status httpd.service -l #запускаем с ключом -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 2020-04-07 19:10:11 MSK; 2min 24s ago Docs: man:httpd(8) man:apachectl(8) Process: 10192 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE) Process: 10191 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE) Main PID: 10191 (code=exited, status=1/FAILURE) Apr 07 19:10:10 localhost.localdomain systemd[1]: Starting The Apache HTTP Server... Apr 07 19:10:11 localhost.localdomain systemd[1]: httpd.service: main process exited, code=exited, status=1/FAILURE Apr 07 19:10:11 localhost.localdomain kill[10192]: kill: cannot find process "" Apr 07 19:10:11 localhost.localdomain systemd[1]: httpd.service: control process exited, code=exited status=1 Apr 07 19:10:11 localhost.localdomain systemd[1]: Failed to start The Apache HTTP Server. Apr 07 19:10:11 localhost.localdomain systemd[1]: Unit httpd.service entered failed state. Apr 07 19:10:11 localhost.localdomain systemd[1]: httpd.service failed. journalctl -xe #пробуем так и тоже пока прчина не ясна Apr 07 19:14:20 localhost.localdomain sshd[10273]: Received disconnect from 118. Apr 07 19:14:20 localhost.localdomain sshd[10273]: Disconnected from 118.126.90. Apr 07 19:14:31 localhost.localdomain sshd[10276]: Invalid user deploy from 138. Apr 07 19:14:31 localhost.localdomain sshd[10276]: input_userauth_request: inval Apr 07 19:14:31 localhost.localdomain sshd[10276]: pam_unix(sshd:auth): check pa tail /var/log/httpd/error_log #на самом деле нужно смотреть сюда и тут мы видим (13)Permission denied: AH00091: httpd: could not open error log file /site/puzzle/logs/error.log.
Смотрим права ls -la и по-прежнему ничего не понимаем.
ls -la /site/puzzle/logs/ total 8 drwxr-xr-x. 2 apache apache 41 Apr 4 19:43 . drwxr-xr-x. 4 apache apache 32 Apr 4 19:11 .. -rw-r--r--. 1 apache apache 585 Apr 4 19:44 access.log -rw-r--r--. 1 apache apache 260 Apr 4 19:44 error.log
Проблема в дополнительных настройках прав доступа к файлам SELinux. Самый простой и неверный путь отключить этот модуль. Но это создаст потенциальную угрозу безопасности. Поэтому верный путь — разобраться с настройками.
getenforce #проверяем, что он действительно работает Enforcing yum install -y policycoreutils-python #устанавливаем утилиты для управления правами доступа к файлам и папкам semanage fcontext -a -t httpd_sys_content_t '/site(/.*)?' #разрешаем доступ на чтение веб-серверу ко всем папкам всех сайтов semanage fcontext -a -t httpd_log_t '/site/puzzle/logs(/.*)?' #разрешаем веб-серверу писать логи restorecon -Rv /site #активируем правила доступа systemctl restart httpd #запускаем веб-сервер
Проверяем в браузере. Ура! Заработало!
Есть ещё две опции, которые могут вам понадобится httpd_sys_rw_content_t для папок куда веб-сервер имеет право писать данные. Это может быть папка для загрузки файлов. И httpd_cache_t для директории с кешами файлов, если вы используете mod_cache.
Настраиваем доступ к сайту для веб-мастера
Ранее мы создали папки для сайта под пользователем root. Но к сайту нужен отдельный доступ веб-мастеру. Для этого смотри статью как добавить пользователя в Unix.