Здравия всем. В данной заметке я собрал большую часть шагов, необходимых для настройки виртуального хостинга, на свеже установленной системе Debian 11 или Ubuntu server 20.04. В процессе работы с web серверами я пришел к выводу, что для php лучше всего подходит Apache в качестве web сервера, но он очень прожорлив на ресурсы сервера. Поэтому я на своих web серверах настраиваю Nginx + Apache. В данной статье я показываю, как настроить Nginx + Apache с PHP и MySQL
Перед началом работы.
Перед установкой я обычно захожу по ssh на сервер. Получаю права root на Ubuntu 20.04
sudo bash
На Debian 11 по умолчанию нет sudo, нужно либо поставить, либо использовать команду
su -
Потом проверяю и ставлю обновления
apt update
apt upgrade
Во всех своих серверах я пользуюсь mc (Midnight Commander)
и его редактором mcedit
Web сервер Apache в качестве Back-end
Установка web сервера Apache
Теперь можно приступать к установке Apache в системе Debian 11 / Ubuntu lts 20.04
apt install apache2 apache2-utils
После этого, если файрволл ufw включён, нужно разрешить доступ к 80 и 443 портам.
ufw allow 80
ufw allow 443
Сервис apache2 стартует сразу после установки. Можно проверить через браузер:
http://"ip адрес сервера", в моём случае http://192.168.48.92
Настройка web сервера Apache
Начинаем настройку с портов. Поскольку у нас Apache будет в роле back-end, убираю его с 80 порта, на 8080.
mcedit /etc/apache2/ports.conf
Listen 8080
Сохраняем и перегружаем службу
service apache2 restart
Проверяем поднялся ли Apache на новом порту
# netstat -tulnp | grep apache2
tcp6 0 0 :::8080 :::* LISTEN 764/apache2
Создаем в директории /var/www директорию blank с пустым index.hmtl
cd /var/www
mkdir blank
echo " " >> /var/www/blank/index.html
Заворачиваем в неё все дефольтные web запросы
mcedit /etc/apache2/sites-available/000-default.conf
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/blank
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Я предпочитаю следующую структуру web хостинга:
~/www/site1.local
~/log/
директория для содержимого сайта
директория для логов сайта
В директории пользователя надо создать 2 директории www и log, в моём случае это пользователь yuri
cd /home/yuri
mkdir www
mkdir www/test.hserv.su
mkdir log
Создаем виртуальный хостинг для сайта site1.local
mcedit /etc/apache2/sites-available/test.hserv.su.conf
<VirtualHost *:8080>
ServerAdmin web@localhost
ServerName test.hserv.su
ServerAlias www.test.hserv.su
DocumentRoot /home/yuri/www/test.hserv.su
ErrorLog /home/yuri/log/test.hserv.su_error.log
CustomLog /home/yuri/log/test.hserv.su_access.log combined
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/yuri/www/test.hserv.su/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
Включаем сайт в конфигурации
a2ensite test.hserv.su.conf
После этого нужно перегрузить Apache для применения изменений.
service apache2 restart
Если возникли какие-то ошибки — смотрим лог apache error_log.
cat /home/yuri/log/test.hserv.su_error.log
Если все в порядке, то проверим, нормально ли настроен наш виртуальный хост. Для этого создадим в папке /home/yuri/www/test.hserv.su/ файл index.html
mcedit /home/yuri/www/test.hserv.su/index.html
<h1>Welcome to test.hserv.su!</h1>
chown yuri. /home/yuri/www/test.hserv.su/index.html
Дальше на своем компьютере правим файл hosts, чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку:
192.168.48.92 test.hserv.su
где 192.168.48.92 IP адрес нашего веб сервера. Это нужно сделать только в том случае, если настраиваете web сервер где-то в локальной сети без реально существующего доменного имени.
Теперь в браузере набираем адрес http://test.hserv.su:8080. Если видим картинку:
значит все правильно настроили. Если какие-то ошибки, то идем смотреть лог ошибок конкретного виртуального хоста
cat /home/yuri/log/test.hserv.su_error.log
Web сервер Nginx в качестве Front-end
Установка web сервера Nginx
Теперь приступим к установке Nginx
apt install nginx
Настройка web сервера Nginx
Теперь приступим к настройке. Создадим конфиги Nginx для этих виртуальных хостов.
mcedit /etc/nginx/sites-available/test.hserv.su.conf
server {
listen 80;
server_name test.hserv.su www.test.hserv.su;
access_log /home/yuri/log/nginx-test-hserv-access.log combined buffer=64k;
error_log /home/yuri/log/nginx-test-hserv-error.log error;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
root /home/yuri/www/test.hserv.su;
access_log off;
expires max;
}
location = /robots.txt {
root /home/yuri/www/test.hserv.su;
allow all;
log_not_found off;
access_log off;
}
}
Применим наш конфиг в доступные сайты
ln -s /etc/nginx/sites-available/test.hserv.su.conf /etc/nginx/sites-enabled/test.hserv.su.conf
service nginx reload
Теперь в браузере набираем адрес http://test.hserv.su. Если видим картинку:
значит все правильно настроили.
Настройка Nginx SSL с помощью Let’s Encrypt
Дальнейшая настройка возможна, только для зарегистрированного домена и правильной настройки DNS.
Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt.
apt install certbot python3-certbot-nginx
Certbot предоставляет широкий выбор способов получения сертификатов SSL с помощью плагинов: Плагин Nginx изменит конфигурацию Nginx и перезагрузит ее, когда это потребуется. Для использования этого плагина введите следующую команду:
certbot --nginx -d test.hserv.su
Первый раз certbot спросит у вас email, на который Let’s Encrypt будет присылать уведомления, когда сертификат будет заканчиваться. Let’s Encrypt предоставляет сертификаты на 90 дней.
Принимаем условия соглашения, решаем подписываться на рекламу или нет. После этого certbot проверит сайт на доступность по 80 порту. После проверки, certbot пропишет в конфигурацию nginx для нашего домена test.hserv.su SSL сертификаты и попытается сделать редирект с 80 порта на 443
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/test.hserv.su/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/test.hserv.su/privkey.pem
Your certificate will expire on 2022-01-12. To obtain a new or
tweaked version of this certificate in the future, simply run
certbot again with the "certonly" option. To non-interactively
renew *all* of your certificates, run "certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Пакет certbot выполняет это автоматически, добавляя таймер systemd, который будет запускаться два раза в день и автоматически продлевать все сертификаты, истекающиее менее, чем через 30 дней.
Запросить статус таймера с помощью команды systemctl:
systemctl status certbot.timer
● certbot.timer - Run certbot twice daily
Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Thu 2021-10-14 16:18:32 MSK; 14min ago
Trigger: Fri 2021-10-15 04:35:52 MSK; 12h left
Triggers: ● certbot.service
Если ошибок нет, все нормально. Certbot будет продлевать ваши сертификаты, когда это потребуется, и перезагружать Nginx для активации изменений. Если процесс автоматического обновления когда-нибудь не выполнится, то Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия сертификата подходит к концу.
Установка PHP
В базовом репозитории как Debian 11, так и Ubuntu 20.04 хранится актуальная версия php 7.4. Если у вас нет необходимости использовать что-то новее или старее, то можно остановиться на этой версии.
Устанавливаем php в Debian 11 или Ubuntu 20.04 , а так же некоторые популярные модули, которые могут пригодиться для того же phpmyadmin.
apt install php php-cli php-mysql php-json php-gd php-ldap php-odbc php-common php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip
Выполним перезапуск Apache:
service apache2 restart
Создадим файл в директории виртуального хоста и проверим работу php:
mcedit /home/yuri/www/test.hserv.su/index.php
<?php phpinfo(); ?>
chown yuri. /home/yuri/www/test.hserv.su/index.php
Заходим по адресу http://test.hserv.su/index.php
Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там.
Где лежит php.ini
После установки часто возникает вопрос, а где хранятся настройки php? В Debian системах уже относительно давно, файл php.ini разделили. Для Apache он расположен в папке /etc/php/7.4/apache2/, для cli он расположен в папке /etc/php/7.4/cli/. Там можно редактировать глобальные настройки для всех виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек:
mcedit /etc/apache2/sites-available/test.hserv.su.conf
Добавляем в самый конец, перед </VirtualHost>
php_admin_value date.timezone 'Europe/Moscow'
php_admin_value max_execution_time 120
php_admin_value max_input_time 120
php_admin_value post_max_size 200M
php_admin_value upload_max_filesize 50M
php_admin_value max_file_uploads 150
Для применения настроек нужно сделать перегрузить Apache.
service apache2 restart
Установка MySQL
Сейчас все большее распространение получает форк MySQL — MariaDB. Она имеет полную совместимость с MySQL. В последнее время, я предпочитаю использовать именно ее.
Устанавливаем mariadb в Debian 11 или Ubuntu 20.04
apt install mariadb-server
Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.
mysql_secure_installation
Откроется серия диалогов, где нужно внести некоторые изменения в параметры безопасности установки MariaDB. Меняем пароль пользователя root для текущей базы данных, потом удаляем анонимных пользователей, отключаем возможность подключаться root удаленно, удаляем тестового пользователя и базу. все предложения мастера.
Файлы настроек mysql/mariadb в Debian лежат в директории /etc/mysql/. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных.
service mariadb restart
Установка phpmyadmin
Для того, чтобы установить phpmyadmin на наш web сервер, достаточно просто распаковать в директорию с виртуальным хостом исходники панели. Создаем структуру папок.
mkdir /home/yuri/www/test.hserv.su/pma
Идем на сайт https://www.phpmyadmin.net и копируем ссылку на последнюю версию панели. Затем загружаем ее через консоль
cd ~
wget https://files.phpmyadmin.net/phpMyAdmin/5.1.1/phpMyAdmin-5.1.1-all-languages.tar.gz
Распаковываем исходники в директорию виртуального хоста.
tar xvzf phpMyAdmin-5.1.1-all-languages.tar.gz
cp -R phpMyAdmin-5.1.1-all-languages/* /home/yuri/www/test.hserv.su/pma/
chown -R yuri. /home/yuri/www/test.hserv.su/pma/
Настройка phpmyadmin
Phpmyadmin готов к работе сразу после установки, дополнительные настройки не обазательны. Закрываем доступ к панели средствами Web сервера. Для использования панели необходимо будет не только знать имя учетной записи mysql, но и пользователя и пароль для доступа непосредственно к панели.
Будем использовать стандартное средство для ограничения доступа к каталогу с помощью .htaccees. Создадим такой файл в папке со скриптами phpmyadmin:
mcedit /home/yuri/www/test.hserv.su/pma/.htaccess
AuthName "Enter Password"
AuthType Basic
Require valid-user
AuthUserFile "/home/yuri/www/test.hserv.su/pma/.htpasswd"
Теперь создадим файл с авторизационными данными:
htpasswd -bc /home/yuri/www/test.hserv.su/pma/.htpasswd user password
Где user — имя пользователя, а password пароль.
Чтобы авторизация заработала, необходимо в файле конфигурации виртуального хостинга в разделе Directory добавить параметр AllowOverride перед </VirtualHost>
mcedit /etc/apache2/sites-available/test.hserv.su.conf
<Directory /home/yuri/www/test.hserv.su/pma/>
AddDefaultCharset UTF-8
Require all granted
AllowOverride All
</Directory>
Перезапускаем Apache.
service apache2 restart
Проверяем настройку. При обращении по адресу веб панели, должно выскочить окошко с авторизацией:
Дополнительная настройка web сервера
После установки и настройки необходимо сделать тонкую настройку.
Настройка времени ожидания Nginx
Когда Nginx работает перед Apache, он передает запрос в Apache и ждет по умолчанию 60 секунд, если за это время не пришел ответ от Apache, то Nginx выдаст ошибку 502. Чтобы этого не происходило рекомендую поднять таймоуты до 120 секунд. В секцию location после proxy_pass вставить:
mcedit /etc/nginx/sites-available/test.hserv.su.conf
location / {
proxy_pass http://127.0.0.1:8080;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_send_timeout 120;
}
Перегружаем Nginx для применения настроек
service nginx restart
К примеру, для виртуального хостинга популярного CMS движка WordPress, я ставлю 180 секунд, потому что во время обновления плагинов или самого движка WordPress Apache может очень долго не отвечать
proxy_connect_timeout 180;
proxy_send_timeout 180;
proxy_read_timeout 180;
Передача реального IP клиента в Apache
Когда Nginx работает перед Apache, то в логах Apache, в скриптах будет присутсвовать IP локального 127.0.0.1, что не несет никаких сведений о том, какой пользователь был на сайте. Перестают работать все сервисы, привязанные к IP пользователю на сайтах.
Чтобы убедиться в этом создадим файл ip.php
mcedit /home/yuri/www/test.hserv.su/ip.php
<?php
echo $_SERVER['REMOTE_ADDR']
?>
После этого переходим по адресу http://test.hserv.su/ip.php и видим:
Конфигурирование Nginx
Чтобы это исправить идем в секцию location конфигурации Nginx после proxy_pass добавим:
mcedit /etc/nginx/sites-available/test.hserv.su.conf
location / {
proxy_pass http://127.0.0.1:8080;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
Перегружаем Nginx для применения настроек
service nginx restart
Конфигурирование Apache
Для того, чтобы Apache начал правильно воспринимать и обрабатывать реальный IP пользователя, воспользуемся идущим в стандартном пакете Apache модулем remoteip.
Вначале настроим работу модуля remoteip. Для этого создадим файл remoteip.conf:
mcedit /etc/apache2/conf-available/remoteip.conf
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
RemoteIPTrustedProxy 127.0.0.1
Теперь всё это нужно подключить модуль remoteip и перегружаем Apache:
a2enmod remoteip
a2enconf remoteip
service apache2 restart
Если все правильно увидим, свой IP адрес. Если вы настраиваете в локальной сети, то там будет ваш локальный IP как у меня на картинке:
SSL между Nginx и Apache
Некоторым скриптам необходимо знать через какую схему они работают, http, или https. Таким образом они формируют ссылки, а иногда принудительно перенаправляют клиентов куда нужно. Из-за не правильной настройки серверного ПО переадресация не может завершиться и браузер покажет нам ошибку ‘too many redirects‘.К примеру, это относится к популярному CMS движку WordPress.
Конфигурирование Nginx
Чтобы это исправить идем в секцию location конфигурации Nginx после proxy_pass добавим:
mcedit /etc/nginx/sites-available/test.hserv.su.conf
location / {
proxy_pass http://127.0.0.1:8080;
proxy_read_timeout 120;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
Перегружаем Nginx для применения настроек
service nginx restart
Конфигурирование Apache
Нам необходми модуль setenvif_module, который подключен стандартной установке Apache.
Добавляем в конфигурацию виртуального хостинга перед секцией </VirtualHost>
mcedit /etc/apache2/sites-available/test.hserv.su.conf
<IfModule setenvif_module>
SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>
Перегружаем Apache для применения настроек
service apache2 restart
Доступ к сайту по sftp
Если вы планируется передавать доступ к сайту другим людям, например для доступа к исходникам сайта, то на текущий момент лучше это делать по протоколу sftp.
Открываем конфиг ssh по пути /etc/ssh/sshd_config и комментируем там одну строку, добавляя далее несколько новых.
mcedit /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
Match User yuri
ChrootDirectory /home/yuri
ForceCommand internal-sftp
Сохраняем и перезапускаем ssh.
service ssh restart
Настройка подключения sftp с ограничением доступа за пределами конкретной папки закончена.
Работа с сайтами разных пользователей на одном web сервере
Чтобы к файлам, загруженным через сайт, был доступ через ftp, можно запускать Apache от имени пользователя. Для этого используем модуль Apache mpm_itk. Поставим его.
apt install libapache2-mpm-itk
Добавляем в конфигурацию виртуального хостинга перед секцией </VirtualHost>
mcedit /etc/apache2/sites-available/test.hserv.su.conf
<IfModule mpm_itk_module>
AssignUserId yuri www-data
</IfModule>
Где yuri это имя пользователя, а www-data это группа, под которым будет запускаться Apache
Перегружаем Apache для применения настроек
service apache2 restart
Ротация логов виртуальных хостов
Насторим ротацию логов виртуального хостинга, еЕсли этого не сделать, то через какое-то, обычно продолжительное, время возникает проблема в связи с огромным размером лог файла или или заканчивается место, к примеру, на многих VDS с ssd дают обычно маленький диск.
Создадим файл конфигурации logrotate для нашего виртуального хостинга
mcedit /etc/logrotate.d/hosting
/home/yuri/log/*log {
size=2M
missingok
rotate 10
compress
delaycompress
notifempty
create 0640 yuri www-data
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
Ротация файлы логов происходит по достижению ими размера в 2Мб, сжимать после ротации и хранить 10 архивов с логом. Новые логи создаются сразу с соответствующими правами, чтобы у пользователя был доступ к ним.
Заключение
Тема настройки веб сервера обширна. В этой заметке я хотел показать типовую настройку чистого сервера для web хостинга, которую использую я. В конце предалгаю полный рабочий листинг кофиг файлов.
Apache
<VirtualHost *:8080>
ServerAdmin web@test.hserv.su
ServerName test.hserv.su
ServerAlias www.test.hserv.su
DocumentRoot /home/yuri/www/test.hserv.su
SetEnvIf X-Forwarded-Proto https HTTPS=on
ErrorLog /home/yuri/log/test.hserv.su_error.log
CustomLog /home/yuri/log/test.hserv.su_access.log combined
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /home/yuri/www/test.hserv.su/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory /home/yuri/www/test.hserv.su/pma/>
AddDefaultCharset UTF-8
Require all granted
AllowOverride All
</Directory>
#Запуск Apache под пользователем
<IfModule mpm_itk_module>
AssignUserId yuri www-data
</IfModule>
php_admin_value date.timezone 'Europe/Moscow'
php_admin_value max_execution_time 300
php_admin_value max_input_time 180
php_admin_value post_max_size 200M
php_admin_value upload_max_filesize 50M
php_admin_value max_file_uploads 150
</VirtualHost>
Nginx
server {
server_name test.hserv.su www.test.hserv.su;
access_log /home/yuri/log/nginx-test-hserv-access.log combined buffer=64k;
error_log /home/yuri/log/nginx-test-hserv-error.log error;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
root /home/yuri/www/test.hserv.su;
access_log off;
expires max;
}
location = /robots.txt {
root /home/yuri/www/test.hserv.su;
allow all;
log_not_found off;
access_log off;
}
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/test.hserv.su/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/test.hserv.su/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = test.hserv.su) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
server_name test.hserv.su www.test.hserv.su;
return 404; # managed by Certbot
}
Спасибо за ваш труд.
Последние пример полного конфига nginx для фронта сайта/
proxy_set_header Host $host; #Одиножды
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
proxy_set_header Host $host; #Дважды, с этой ошибкой, сайт работать не будет
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
Такую ошибку будет сложно найти, а «nginx -t» скажет что все хорошо.
Еще столкнулся с ситуацией если делать доступ к файлам сайтов для других по sftp, то после этой модификации, зайти под учеткой yuri по ssh будет невозможно, разве что переключиться на нее после входа с помощью команды «su — yuri»
Спасибо большое, исправил ошибку. Действительно проглядел, когда составлял итоговый конфиг.
По поводу sftp согласен, надо было в примере другое имя пользователя поставить.
И еще один момент, вы уверены что certbot умеет делать сертификаты для локальных доменов?
В где в статье я писал про локальные домены? certbot смотрит в свой DNS и ищит там записи для указанного домена, и только после этого проходит проверку.
# тут
«где 192.168.48.92 IP адрес нашего веб сервера. Это нужно сделать только в том случае, если настраиваете web сервер где-то в локальной сети без реально существующего доменного имени.»
# А про локальный https. (не сказать что красиво работает, так — костыль)
Простейший способ сгенерировать закрытый ключ и самоподписанный сертификат для localhost — выполнить следующую команду из пакета openssl:
openssl req -x509 -out localhost.crt -keyout localhost.key \
-newkey rsa:2048 -nodes -sha256 \
-subj ‘/CN=localhost’ -extensions EXT -config <( \
printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
Вы можете сконфигурировать локальный web-сервер, используя файлы localhost.crt и localhost.key, добавив localhost.crt в список доверенных корневых сертификатов.
Спасибо за Ваш труд, статья отличная, делал все по шагам и все получилось. Можно ли какую нибудь статью на тему панели управления типо directadmin.
Пожалуйста, подумаю про какую лучше написать 🙂
А для чего необходим данный отрывок, ну я конечно загуглю, просто в заключительных сборках файлов отрывок отсутствует.
SetEnvIf X-Forwarded-Proto https HTTPS=on
Данная опция говорит apache, что внешний прокси работает по протоколу HTTPS. Спасибо за наводку, сейчас исправлю конечный конфиг
Здравствуйте. Спасибо за статью, очень подробно все изложено.
У меня не получился пункт SSL между Nginx и Apache
В nginx прописал proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
В апач SetEnvIf X-Forwarded-Proto https HTTPS=on
не работает
Если в nginx прописать просто строку
proxy_set_header X-Forwarded-Proto https;
Тогда все работает, в чем может быть проблема?
Здравствуйте. Проверил сейчас, действительно слетает.
Вот рабочая строчка:
вместо proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
нужно proxy_set_header X-Forwarded-Proto $scheme;
Спасибо за помощь!
Полгода назад делал по этому мануалу, всё взлетело. Сейчас понадобилось развернуть Web-сервер, не получается. Третий раз переделываю. После установки nginx, создания конфига хоста, добавление ссылки и рестарта nginx’а, при переходи по доменному имени без порта, отправляет в blank.
На компе, откуда захожу в файле hosts прописан адрес имя. Что не так…? Может какие-то дефолтные настройки в апаче или энджинксе поменялись…?
Доброго дня!
В настройках nginx небольшая ошибка. Исправил в мануале. Чтобы вам не искать, добавьте 2 строки в конфигурацию nginx
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
Чтобы было вот так:
Если этих строк не будет, то nginx не будет передавать имя хоста и apache будет показывать пустой бланк.
Странно, всё сделал по инструкции, выбивает ошибка 403 Forbidden. Может кто подскажет в чём может быть проблема
Добрый день, Роман
Попробуйте добавить в /etc/apache2/apache2.conf следующие строки:
и перезагрузить apache
service apache2 reload
Спасибо! Очень помогло.
Добрый день
настроил всё по инструкции апатч с указанием своих естественно данных
захожу по домену у меня открывается страница заглушки а не сайта
что мог сделать не так?
Если я правильно понял то любой левый запрос заглушка а если правильный запрос то сайт
у меня любой запрос это заглушка
Нашел свою ошибку. Всё исправил и теперь работает.
Спасибо за статью
Подскажите как запустить несколько php 5.6 и 7.4 чтобы на одном сервере работало но естественно каждая версия php на свой хост настроена была
Добрый день!
Для запуска нескольких версий php на одном сервере, нужно запускать php как различные модули, те к примеру поставить основную версию как в статье, а другую как php-fpm
Делаю всё по ваше гайду но постоянно получаю ошибку
Запрещенный
У вас нет разрешения на доступ к этому ресурсу. Сервер не может прочитать файл htaccess, отказывает в доступе в целях безопасности.
В какой системе делаете и на каком этапе вылезает эта ошибка?
1 этап установка apach скажу правду я новичок в этом деле пытаюсь разобраться уже 4 часа но не выходит
Distributor ID: Ubuntu
Description: Ubuntu 22.04.2 LTS
Release: 22.04
Codename: jammy
А вы делаете с root правами?
Да, первым делом выполняю sudo bash.
Далее выполняю все команды с точностью как описанно в мануале.
Переустановил убунту чтобы наверняка знать что я ничего не оставил после удаления апача.
В последний раз я ничего не изменял в коммндах, за исключением yuri на имя моего каталога\логина.
Все я понял где ошибка. Я забыл указать, что для каталогов www и logs нужна поменять группу по умолчанию, чтобы apache имел к ним доступ. Попробуйте команду chown :www-data /home/ВАШЛОГИН/www
Надо обновить статью и исправить ошибку.
Попробовал, результата не принесло.
Завтра попробую по новой, жду вашего обновленного мануала с нетерпением !
root@server:/var/www разместил всё тут, ошибка 403 исчезла и появилась заветная надпись Welcome to test.hserv.su!
А при размещении в домашнем каталоге 403 Отказано в доступе, chown :www-data /home/ВАШЛОГИН/www — успехов не принесла. вероятно где то не правильно указываю права доступа.
Это здорово, что смогли! Мои предположения, про доступ верны. Надо попробовать на текущей версии Ubuntu 22.04 поднять по мануалу и исправить ошибки.
У меня вопросы возникли :))
Ставим сайт на apache2, а потом через nginx проксируем 80 на 8080, разделяя нагрузку, я правильно догадался ?
И такой вот ещё вопрос раз всё можно делать через конфиг nginx то можно выкинуть .htaccess из домена\папки апача ?
Но вот к примеру я ставлю phpmyadmin через обычную установку, не по вашему гайду, и мне нужен доступ к примеру таким образом http://mysite.org/phpmyadmin т.е достаточно указать в конфиге ngnix mysite.conf строку include snippets/phpmyadmin.conf будет ли это верным ?
Да nginx ставят для уменьшения нагрузки на сервер, а также чтобы через него отдавать статику.
Проксирую nginx именно apache, по скольку apache имеет множество функций, которые используют программисты.
Если все делать через nginx, и убрать apache, то нужно php заводить через php-pfm, иначе phpmyadmin работать не будет.
Здравствуйте. Благодаря вашей инструкции впервые настроил сервер на Ubuntu 20 + apache + nginx + php 8.1 для работы сайта на Joomla 4. Развернул сайт, зашёл в админку, всё нормально работает, но при попытке открыть главную страницу сайта или любую другую постоянно отображается ошибка nginx 502 Bad Gateway. страницы типа info.php и ip.php тоже работали, как и админка, но фронт сайта не открывается. В чём может быть проблема?
В логах nginx:
2023/04/25 16:01:36 [error] 675427#675427: *946 upstream prematurely closed connection while reading response header from upstream, client: 10.250.124.5, server: test.site.ru, request: «GET / HTTP/1.1», upstream: «http://127.0.0.1:8080/», host: «test.site.ru»
Здравствуйте Алексей! Такое ощущение, что Apache падает по ошибке. Посмотрите в логах Apache, что пишет.
В логах apache пусто. apache -t выдает:
[core:warn] [pid 731238] AH00111: Config variable ${APACHE_RUN_DIR} is not defined
apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot
в логах для сайта пусто. в общих логах apache после попытки открыть страницу появляется строка:
[core:notice] [pid 731824] AH00051: child pid 731832 exit signal Segmentation fault (11), possible coredump in /etc/apache2
Может не хватает ему памяти. Проверьте в php.ini memory_limit
memory_limit 128M. увеличил через конфиг апача до 2048M. не помогло
в интернете вроде бы пишут, что эта проблема встречается при использовании php8.1, но какогото решения найти не могу пока
Про php 8.1 я думал. Может поставить другую версию php и пробовать на ней?
я сначала вообще 8.2 установил, потом на 8.1 сменил, но ниже не хочу, так как всё равно придётся обновляться до неё. раз так не работает, то буду пробовать другие варианты настройки, если не найду какогото решения сейчас
Спасибо большое за статью! Долго не мог настроить корректное перенаправление с nginx https на локальный apache http. Часть ссылок WordPress упорно хотела открываться по http, хотя должна была по https. Помогла вот эта строка в конфиге apache: «SetEnvIf X-Forwarded-Proto https HTTPS=on».
Это очень хорошо, когда все получается! Поздравляю! Рад, что помогла моя статья!
Добрый день.
Я только начинаю изучать эти системы…Делаю всё как написано, но:
1. Ругается на этой строчке: chown username. /home/yuri/www/test.hserv.su/index.html
chown: warning: ‘.’ should be ‘:’: ‘username.’
После этого: http://ip-adr:8080 (и 80) — Forbidden
You don’t have permission to access this resource.Server unable to read htaccess file, denying access to be safe
По имени сайта (host изменил) — вообще не открывается
Что не так делаю?
Статья хорошая, но затык у меня на шаге
192.168.48.92 test.hserv.su
Делаю на реальном сервере Debian, сайт не хочет показываться, не по ip, не по имени. Если вводить ip, показывается страница апача. Наверно на реальном сервере немного по другому
Добрый день! Я новичок в этом деле. Дошел до пункта:
cd /var/www
mkdir blank
echo » » >> /var/www/blank/index.html
Заворачиваем в неё все дефольтные web запросы
Что значит дефолтные web запросы? Подскажите, пожалуйста, что надо внести в этот файл?
Добрый день. Нужно создать пустой файл без содержимого!
Здравствуйте. Спасибо за инструкцию. Настроил по ней сервер на Debian 11. Развернул сайт на Joomla, добавил файл .htaccess, включил в настройках сайта SEF и перенаправление URL. Но на сайте открывается только главная страница, остальные выдают ошибку «Not Found. The requested URL was not found on this server. Apache/2.4.56 (Debian) Server at site.ru Port 80». В чем может быть проблема?