Apache + Nginx - Ubuntu 14.04/16.04/Debian

Apache  Nginx



Про установку и первичную настройку серверной связки Apache + Nginx + Mysql + phpmyadmin для ubuntu 12.04 я уже писал, теперь то же самое для Ubuntu 14.04/16.04 и Debian.

В новых релизах появилась следующая версия apache — 2.4, в которой изменились конфигурационные файлы, синтаксис команд и ещё всякие другие штуки.

Список изменений


В составе Ubuntu 16 поставляется PHP версии 7.0, некоторые CMS будут работать некорректно или вовсе откажутся функционировать.




Apache



В тексте будут выделяться различия в настройках между Ubuntu 14/16 и Debian.



Обновляемся:

sudo apt update
sudo apt upgrade


Устанавливаем:

sudo apt install apache2


Открыв в браузере адрес сервера вы должны увидеть такую картинку (Ubuntu):





(Debian)





Возвращаемся в терминал и проверяем синтаксис конфигурационных файлов:

sudo apache2ctl -t


Ещё команды проверки
sudo apache2ctl fullstatus — говорит сама за себя
sudo apache2ctl -v — версия apache
sudo apache2ctl -V — подробная инфа
sudo apache2ctl -l — скомпилированные модули
sudo apache2ctl -L — список доступных директив
sudo apache2ctl -t -D DUMP_VHOSTS — инфа о виртуальных хостах
sudo apache2ctl -t -D DUMP_RUN_CFG — с каким настройками запущен сервер
sudo apache2ctl -t -D DUMP_MODULES — какие модули загружены


Наблюдаем вот такие сообщения:



Синтаксис в порядке, однако не определенно доменное имя сервера. Ничего страшного в этом нет, но выглядит некрасиво. Исправить ситуацию очень просто, надо в конфигурационный файл сервера (/etc/apache2/apache2.conf) добавить строку — ServerName 127.0.1.1
Мы не только добавим строчку, но и приведём этот файл к более читабельному виду удалив комментарии.



На всякий случай бекапим файл /etc/apache2/apache2.conf

sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak


Открываем его:

sudo nano /etc/apache2/apache2.conf


Удаляем всё и вставляем это:


ServerName 127.0.1.1

Mutex file:${APACHE_LOCK_DIR} default

PidFile ${APACHE_PID_FILE}

Timeout 300

KeepAlive On

MaxKeepAliveRequests 100

KeepAliveTimeout 5

User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}

HostnameLookups Off

ErrorLog ${APACHE_LOG_DIR}/error.log

LogLevel warn

IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

Include ports.conf

<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>

AccessFileName .htaccess

<FilesMatch "^\.ht">
        Require all denied
</FilesMatch>

LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

IncludeOptional conf-enabled/*.conf

IncludeOptional sites-enabled/*.conf

подсказка nano

Сохранить______Выйти

Директивы
PidFile ${APACHE_PID_FILE} — файл в который сервер записывает pid (дескриптор) процесса.
Timeout 300 — время в секундах, в течение которого сервер ждет недополученный запрос или продолжает попытки возобновления приостановленной передачи.
KeepAlive On — разрешает (On)/запрещает (Off) клиенту последовательно запрашивать несколько файлов без разрыва TCP соединения.
KeepAliveTimeout 5 — время в секундах до разрыва TCP соединения, которое Apache будет ждать следующего запроса от клиента.
MaxKeepAliveRequests 100 — максимальное количество запросов при одном соединении. Значение 0 снимает ограничения. Для максимального быстродействия рекомендуем высокое значение.
HostnameLookups Off — (on/off/double) определяет имя хоста посетителя по DNS, работает медленно и по умолчанию отключена.
ErrorLog ${APACHE_LOG_DIR}/error.log — путь к логу ошибок (/var/log/apache2/).
LogLevel warn — (emerg/alert/crit/error/warn/notice/info/debug) уровень информативности лог-файла сервера.


Сохраняем и перезапускаем сервер:

sudo service apache2 restart


Для Ubuntu 16 и Debian можно это делать через systemctl

sudo systemctl restart apache2



Проверяем:

sudo apache2ctl -t



Предупреждение исчезло.





Теперь в браузере запросим несуществующий файл — адрес/blabla, и получим сообщение об ошибке:




Сообщение содержит информацию о сервере. В этом нет ничего плохого, но и хорошего тоже нет, поэтому запретим вывод этой инфы отредактировав файл /etc/apache2/conf-available/security.conf

sudo nano /etc/apache2/conf-available/security.conf


Находим строчки:

ServerTokens OS

ServerSignature On


Меняем их на:

ServerTokens Prod

ServerSignature Off


Сохраняем файл и рестартуем apache:

sudo service apache2 restart



Обновляем страницу в браузере:


Так будет лучше...



Подключим модуль rewrite (скорее всего он понадобится)

sudo a2enmod rewrite


Рестартуем:

sudo service apache2 restart





Сейчас сервер работает по дефолтному конфигу (/etc/apache2/sites-available/000-default.conf), а файл index.html находятся в папке /var/www/html/. Если у вас один сайт и он не нуждается в PHP, Mysql и каких-то хитроумных настройках, то достаточно забросить свои файлы в эту папку и назначив пользователя и группу…

sudo chown -R www-data:www-data /var/www/html


… посмотреть результат…

sudo ls -l /var/www/html


… приступать к эксплуатации сайта.


Если требуются дополнительные настройки, то они делаются в файле /etc/apache2/sites-available/000-default.conf

sudo nano /etc/apache2/sites-available/000-default.conf


Если редактировали, то не забудьте перезапустить сервер.




Теперь немного об организации файлов сервера Apache.


Для удобства установите и запустите Midnight Commander.

sudo apt install mc


sudo mc


Перейдите в папку /etc/apache2




apache2.conf — конфигурационный файл сервера.
envvars — здесь хранятся переменные окружения.
magic — идентификация неизвестных файлов (не стоит там что-то менять).
ports.conf — настройка портов.


В папках *-available находятся основные конфиги (conf), модули (mods) и конфиги виртуальных хостов (sites).

В папках *-enabled находятся активированные (инициализированные) конфиги, модули и виртуальные хосты (перед именем стоит значок @).

Активировать и деактивировать эти файлы можно с помощью специальных команд, а чтоб изменения вступили в силу нужно рестартовать сервер.


Файлы из папки conf-available активируются командой a2enconf, а деактивируются командой a2disconf.

Для примера отключим файл security.conf:

sudo a2disconf security.conf

После этого он исчезнет из папки conf-enabled.

Включим security.conf:

sudo a2enconf security.conf

Файл появится в папке conf-enabled.



Модули из папки mods-available включаются/отключаются командами a2enmod и a2dismod.

Пример с модулем rewrite:

sudo a2enmod rewrite

Вкл.

sudo a2dismod rewrite

Откл.


Посмотреть какие модули есть в репозитории:

sudo apt-cache search libapache2*


Установить нужный модуль:

sudo apt install название модуля




Конфигурационные файлы виртуальных хостов из папки sites-available включаются/отключаются командами a2ensite и a2dissite.

Пример включения/отключения дефолтного виртуального хоста 000-default.conf:

sudo a2ensite 000-default.conf

Вкл.

sudo a2dissite 000-default.conf

Откл.



На время оставим apache в покое и перейдём к установке PHP…




PHP



Установка для Ubuntu 14 и Debian:

sudo apt install php5 libapache2-mod-php5 php5-mcrypt


Для Ubuntu 16:

sudo apt install php7.0 php-pear libapache2-mod-php7.0 php7.0-mysql




Создайте файл для проверки работы PHP:

sudo nano /var/www/html/check.php


Вставьте строчку:

<?php phpinfo(); ?>

Сохраните и закройте.


Открыв в браузере ссылку — адрес/check.php, вы увидите информацию о PHP:









Узнать наличие модулей php в репозитории можно так (Ubuntu 14 и Debian)

sudo apt-cache search php5-


(Ubuntu 16)

sudo apt-cache search php7.0-


Установка модулей:

sudo apt install название модуля





Mysql



Установка для Ubuntu 14 и Debian:

sudo apt install mysql-server php5-mysql


Для Ubuntu 16:

sudo apt install mysql-server php7.0-mysql



В процессе нужно будет придумать пароль администратора (это не root системы, а root Mysql) Mysql.
Пароль не должен совпадать с паролем администратора компьютера.






PhpMyAdmin



Установка для Ubuntu 14 и Debian:

sudo apt install phpmyadmin php-gettext



Установка для Ubuntu 16:

sudo apt install phpmyadmin php7.0-mbstring php-gettext



Выбираем сервер (клавишей пробел):




Здесь нужно ответить Да:




Здесь нужно ввести пароль, который вы придумали ранее для пользователя root Mysql:




Здесь придумайте пароль для автоматически создаваемой базы phpmyadmin:




Дожидаемся окончания установки и переходим в браузере по ссылке — адрес/phpmyadmin



Выбираем русский язык, вводим пользователя (root) и пароль. Заходим в базу и вершим там свои великие дела.



Теперь надо сделать так, чтоб никто не знал где находится ваша база данных. Для этого необходимо изменить путь к phpmyadmin в файле /etc/phpmyadmin/apache.conf.

Открываем файл:

sudo nano /etc/phpmyadmin/apache.conf




Изменим строчку:

Alias /phpmyadmin /usr/share/phpmyadmin


На что-нибудь нелепое:

Alias /xrennaideshmyphpmyadmin /usr/share/phpmyadmin




Сохраняем и рестартуем apache:

sudo service apache2 restart


С этого момента адрес PhpMyAdmin знаете только Вы, а заходить в него будете так:

адрес/xrennaideshmyphpmyadmin




Nginx



Nginx будет принимать запросы на стандартном (80-ом) порту и передавать их апачу, который нужно перекинуть на другой порт, например на 81-ый, и разрешить ему принимать только локальные запросы. То есть апач будет невидим извне.


Редактируем файл /etc/apache2/ports.conf

sudo nano /etc/apache2/ports.conf


Меняем строку:

Listen 80


на

Listen localhost:81





Открываем конфиг сайта:

sudo nano /etc/apache2/sites-available/000-default.conf


Меняем строку:

<VirtualHost *:80>


на

<VirtualHost localhost:81>




Сохраняем и рестартуем apache:

sudo service apache2 restart



Теперь сайт виден только на localhost:81. То есть, удалённо вы на сайт зайти не можете.




Устанавливаем Nginx

sudo apt install nginx


Рестартуем nginx чтоб посмотреть нет ли ошибок:

sudo service nginx restart


Если всё хорошо, то для ubuntu 14 будет написано — * Restarting nginx nginx



… а для ubuntu 16 и debian никаких сообщений не будет.

Команды для проверки nginx
sudo nginx -h — помощь.
sudo nginx -v — версия.
sudo nginx -V — опций, с которыми запущен сервер.
sudo nginx -t — проверка синтаксиса конфигов.




Зайдите в браузер и обновите страничку. Если у вас Ubuntu 14, то увидите это…




… а если Ubuntu 16 или Debian, то будет уже знакомая картинка:



По умолчанию, в Ubuntu 14 nginx настроен работать из папки /usr/share/nginx/html, а в Ubuntu 16 и Debian из той же папки что и apache — /var/www/html, поэтому картинки разные. Собственно для нас это не имеет никакого значения так как далее всё будет перенастроенно.


В данный момент, контент отдаёт nginx, а apache не участвует в работе. Чтобы убедится в этом, нужно открыть лог nginx'а:

sudo tail -f /var/log/nginx/access.log


Обновив страничку в браузере вы увидите логи доступа:



А если открыть лог apache:

sudo tail -f /var/log/apache2/access.log

То ничего происходить не будет.




Организация файлов nginx схожа с apache:





В sites-available лежит конфиг виртуального хоста (default), а в sites-enabled ссылка инициализирующая виртуальный хост (@default).

nginx.conf — конфиг сервера, вот он то нам и нужен.

Сделаем его бекап:

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak


И откроем:

sudo nano /etc/nginx/nginx.conf


Удалим закомментированные строки чтоб было читабельно, разрешим сжатие данных (gzip) и отключим папку /etc/nginx/conf.d/ так как она пустая. Получим аккуратный файлик…



user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
        worker_connections 768;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;
        gzip_disable "msie6";

        gzip_vary on; # Разрешить выдавать в ответе строку заголовка "Vary: Accept-Encoding"
        gzip_proxied any; # Разрешить сжатие для всех проксированных запросов
        gzip_comp_level 6; # Степень сжатия (от 1 до 9 цифра больше увеличивает степень сжатия и увеличивает нагрузку на ЦПУ)
        gzip_buffers 16 8k; # Размер буферов, в которые будет сжиматься ответ
        gzip_http_version 1.1; # Устанавливает минимальную HTTP-версию запроса для сжатия ответа
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        #include /etc/nginx/conf.d/*.conf; # Если папка conf.d пустая, то можно закомментировать
        include /etc/nginx/sites-enabled/*;
}



Теперь нам нужен конфиг сайта. Сделаем копию…

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak


Откроем:

sudo nano /etc/nginx/sites-available/default


Удаляем всё и вставляем это:


server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;

        root /var/www/html;
        index index.html index.php index.htm;

        server_name localhost;

        # xrennaideshmyphpmyadmin - это ваш секретный путь к phpMyadmin, таким образом всё
        # что касается phpMyadmin, будет отдавать Apache и страница будет корректно отображаться.
        # Картинки и прочее отдаёт Nginx

        location ~* ^(?!/xrennaideshmyphpmyadmin/).+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
                access_log off;
                expires 30d;
        }


        # запрет на доступ к .htaccess
        location ~ /\.ht {
                deny all;
        }


        # передача запроса апачу
        location / {
                proxy_pass http://127.0.0.1:81/; # Порт на котором висит Apache
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-for $remote_addr;
                proxy_set_header Host $host;
                proxy_connect_timeout 300;
                proxy_send_timeout 300;
                proxy_read_timeout 300;
                proxy_redirect off;
                proxy_set_header Connection close;
                proxy_pass_header Content-Type;
                proxy_pass_header Content-Disposition;
                proxy_pass_header Content-Length;
        }
}



Рестартуем nginx:

sudo service nginx restart


Открываем лог apache:

sudo tail -f /var/log/apache2/access.log


Обновляем страничку в браузере и видим логи:


Apache включился в работу. Все запросы идут от nginx с локального адреса (127.0.0.1).


Для того чтоб apache получал ip-адреса клиентов нужно установить модуль libapache2-mod-rpaf

sudo apt-get install libapache2-mod-rpaf



Запустите лог nginx:

sudo tail -f /var/log/nginx/access.log



Здесь нормальные адреса.


Осталось проверить доступность PhpMyAdmin зайдя по — адрес/xrennaideshmyphpmyadmin/index.php (если не открывается, то посмотрите не появился ли в адресной строке 81-ый порт и удалите его).




Несколько сайтов



На сервере будет два сайта — istarik.ru и irinartzone.ru…


Apache


Удаляем папку /var/www/html, больше она не понадобится:

sudo rm -rf /var/www/html



Создаём в корневой директории сервера две отдельные папки, в них будут размещены сайты:

sudo mkdir /var/www/istarik

sudo mkdir /var/www/irinartzone

У Вас будут свои названия папок.


И копируем в эти папки содержимое своих сайтов. Если сайтов пока нет, тогда создаём index-файлы с соответствующим содержимым:

sudo nano /var/www/istarik/index.php


Вставить это:

<?php echo "istarik"; ?>



sudo nano /var/www/irinartzone/index.php


Вставить это:

<?php echo "irinartzone"; ?>




Задаём пользователя и группу для них:

sudo chown -R www-data:www-data /var/www/istarik

sudo chown -R www-data:www-data /var/www/irinartzone



Отключаем дефолтный конфиг апача:

sudo a2dissite 000-default.conf



Создаём из дефолтного конфига, конфиги новых сайтов:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/istarik.conf

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/irinartzone.conf



Дефолтный конфиг можно удалить:

sudo rm /etc/apache2/sites-available/000-default.conf



Редактируем конфиг первого сайта:

sudo nano /etc/apache2/sites-available/istarik.conf


Удаляем всё (или редактируем) и делаем как в примере. Изменяем название сайта и меняем путь к папке:


<VirtualHost localhost:81>
        ServerAdmin webmaster@localhost
        ServerName istarik.ru
        ServerAlias www.istarik.ru

        DocumentRoot /var/www/istarik

#       <Directory /var/www/istarik/>
#               Options Indexes FollowSymLinks
#               AllowOverride All
#               Require all granted
#       </Directory>

        LogLevel warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>




То же самое для второго сайта:

sudo nano /etc/apache2/sites-available/irinartzone.conf



<VirtualHost localhost:81>
        ServerAdmin webmaster@localhost
        ServerName irinartzone.ru
        ServerAlias www.irinartzone.ru

        DocumentRoot /var/www/irinartzone

#       <Directory /var/www/irinartzone/>
#               Options Indexes FollowSymLinks
#               AllowOverride All
#               Require all granted
#       </Directory>

        LogLevel warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>





Активируем сайт istarik:

sudo a2ensite istarik.conf


Проверяем синтаксис:

sudo apache2ctl -t


Рестартуем apache:

sudo service apache2 restart


Идём в браузер и проверяем.



Чтоб проверить работу второго сайта надо отключить первый:

sudo a2dissite istarik.conf

Когда перенесёте свои сайты со своими доменными именами на хостинг, тогда будут работать оба.



Активируем сайт irinartzone:

sudo a2ensite irinartzone.conf


Проверяем синтаксис:

sudo apache2ctl -t


Рестартуем apache:

sudo service apache2 restart


Проверяем в браузере…


И снова активируем сайт istarik:

sudo a2ensite istarik.conf


Рестартуем apache:

sudo service apache2 restart




Nginx


Создаём из дефолтного конфига, конфиги для istarik и irinartzone:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/istarik.conf

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/irinartzone.conf


Удаляем дефолтный конфиг и ссылку на него:

sudo rm /etc/nginx/sites-available/default

sudo rm /etc/nginx/sites-enabled/default


Редактируем первый сайт:

sudo nano /etc/nginx/sites-available/istarik.conf


Удаляем всё (или редактируем) и вставляем это:


server {
        listen 80;

        root /var/www/istarik;
        index index.html index.php index.htm;

        server_name istarik.ru www.istarik.ru;

        # xrennaideshmyphpmyadmin - это ваш секретный путь к phpMyadmin, таким образом всё
        # что касается phpMyadmin, будет отдавать Apache и страница будет корректно отображаться.
        # Картинки и прочее отдаёт Nginx

        location ~* ^(?!/xrennaideshmyphpmyadmin/).+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|b$
                access_log off;
                expires 30d;
        }


        # запрет на доступ к .htaccess
        location ~ /\.ht {
                deny all;
        }


        # передача запроса апачу
        location / {
                proxy_pass http://127.0.0.1:81/; # Порт на котором висит Apache
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-for $remote_addr;
                proxy_set_header Host $host;
                proxy_connect_timeout 300;
                proxy_send_timeout 300;
                proxy_read_timeout 300;
                proxy_redirect off;
                proxy_set_header Connection close;
                proxy_pass_header Content-Type;
                proxy_pass_header Content-Disposition;
                proxy_pass_header Content-Length;
        }
}

Сохраняем.

Создаём ссылку на новый конфиг:

sudo ln -s /etc/nginx/sites-available/istarik.conf /etc/nginx/sites-enabled/istarik.conf


Рестартуем nginx:

sudo service nginx restart


Проверяем в бруазере…

Чтоб отключить конфиг его нужно просто удалить из папки /etc/nginx/sites-enabled и перезапустить сервер.



Редактируем второй сайт:

sudo nano /etc/nginx/sites-available/irinartzone.conf


Делаем так:


server {
        listen 80;

        root /var/www/irinartzone;
        index index.html index.php index.htm;

        server_name irinartzone.ru www.irinartzone.ru;

        # запрет на доступ к .htaccess
        location ~ /\.ht {
                deny all;
        }

        # передача запроса апачу
        location / {
                proxy_pass http://127.0.0.1:81/; # Порт на котором висит Apache
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-for $remote_addr;
                proxy_set_header Host $host;
                proxy_connect_timeout 300;
                proxy_send_timeout 300;
                proxy_read_timeout 300;
                proxy_redirect off;
                proxy_set_header Connection close;
                proxy_pass_header Content-Type;
                proxy_pass_header Content-Disposition;
                proxy_pass_header Content-Length;
        }
}

Сохраняем.

Создаём ссылку на второй конфиг:

sudo ln -s /etc/nginx/sites-available/irinartzone.conf /etc/nginx/sites-enabled/irinartzone.conf


Рестартуем nginx:

sudo service nginx restart


Чтоб убедится в работе irinartzone отключите конфиги istarik в apache и nginx.




На этом всё, дополнительные настройки, равно как и работа с CMS выходят за рамки этого повествования...


И таки да, без сомнения, это apache apache apache nginx надо обязательно прочитать или по крайней мере ознакомиться...


Когда писал статью, все действия проделывал на трёх операционках и вроде бы нигде не ошибся, однако всякое бывает и если вы найдёте какие-то огрехи, то напишите в комментах. Спасибо.


  • 0
  • 7907

Комментарии (30)

0
Всё получилось, и работает на Ура! А как закрыть порт 81? И как закрыть входящий трафик по всем другим портам?
0
Поздравляю.
Зачем закрывать 81-й порт?

Просто так порты закрывать нельзя, многие из них используются. Это тема обширная и требующая вдумчивого изучения.
0
Хорошо, с портами разберусь.
Есть ещё такой момент:
При определенных запросах получал 413 (Request Entity Too Large)
Пришлось прописать в ngnix.conf
sendfile        on;
        #tcp_nopush     on;
        client_max_body_size 100M;

Правильно ли это? Или может есть какие нибудь рекомендации?
0
А не много ли? Кто-то заливает на ваш сервер стомегабайтные файлы?
0
Спасибо за хорошую статью, единственная актуальная статья которую мне удалось найти на 12.09.2016 число.

Настроил 4 сайта по разделу «Несколько сайтов» до этого настраивал по другим статьям не много кривовато было, но хоть как то работало. А после настройки по данной статье на отрез перестали работать все начали ссылаться на один и тот же сайт.

Разбирался около часа в чем дело. Я настраивал apache на 8080 порт.
И проблема была в том что у одного сайта был хост указан как:
<VirtualHost localhost:8080>
А у других:
<VirtualHost *:8080>

И в итоге все ссылались на сайт у которого хост был указан через localhost. С начало думал проблема в переменной localhost, оказалось нет все норм. Надо просто все сайты настраивать одинаково так:
<VirtualHost localhost:8080>
или так:
<VirtualHost *:8080>

и все будет работать! Главное что бы все сайты были одинаково настроены.

P.S. Сначала когда разобрался с проблемой думал просто уйти как обычно и не чего не написать, но в этот раз че то совесть замучила подумал вдруг у кого то тоже такая проблема будет и он так же как и я будет мучится. И так как это самая грамотная и актуальная статья из найденных мной решил все же оставить комент, в благодарность автору!
0
Дык Вы nginx ставили?
0
Да, в nginx — proxy_pass localhost:8080/; Сейчас все норм работает. После даже уже динамические поддомены настроил.
0
proxy_pass http://localhost:8080/;
0
Апач нужно настраивать так:

<VirtualHost localhost:8080>


А если так:

<VirtualHost *:8080>

То апач будет виден извне, на 8080-ом порту.
0
Спасибо, уже понял. Когда с толкнулся с этой проблемой. Ошибочная настройка была настроена по другой статье) И с начало не обратил внимание на это, когда перенастраивал.
0
Надо просто все сайты настраивать одинаково так

Виртуальные хомты можно настраивать как угодно:

<VirtualHost localhost:8080>
<VirtualHost *:8082>
<VirtualHost *:80>
<VirtualHost localhost:8088>
<VirtualHost localhost:81>

Весь вопрос в доменных именах и видимости/невидимости извне, а так же прокроксировании/не проксировании нгисом.
0
Меняем строку:
Listen 80
на
Listen localhost:81

Подскажите пожалуйста почему после смены этого пункта апач не хочет запускаться, ошибка —
(98)Address already in use: AH00072: make_sock: could not bind to address 127.0.0.1:81
no listening sockets available, shutting down
AH00015: Unable to open logs
Action 'start' failed.
The Apache error log may have more information.

И еще вопрос у меня чего то не хочет записывать данные в бд после такой связки nginx + apach. Когда сам апач работает то все хорошо, а в связки не хочет (
0
По первому вопросу: кто-то занимает 81-й порт, посмотреть можно командой:

sudo netstat -anutp
0
Я пробовал менять и на 82 — результат тот же
0
Проверил командой и нет таких
0
А если поставить — Listen 127.0.0.1:81 то заработало, но правильно ли оно так?
0
Да, так даже правильней. 127.0.0.1 — это и есть localhost. Просто я привык писать localhost.

А что с БД?
0
Да, и покажите файл /etc/hosts
0
Добрый день, очень полезная статья, я как раз в данный момент настраиваю сервер по ней. Возник один вопрос: дело в том что настроив nginx и apache по вышей статье у меня доступ к phpmyadmin остался и с 80-го порта и с 81-го. Так как первый раз настраиваю эту связку то кропотливо копировал по 50 раз проверяя все настройки во всех конфигах прямо со статьи, фактически nginx и apache настроены в точности как вы описали. Просто как бы чутье подсказывает что phpmyadmin должен был стать недоступным судя из ваших слов:
[code]
Осталось проверить доступность PhpMyAdmin зайдя по — адрес/xrennaideshmyphpmyadmin/index.php (если не открывается, то посмотрите не появился ли в адресной строке 81-ый порт и удалите его).
[/code]
0
Сам же и разобрался со своим вопросом)) Если вбивать localhost то да, phpmyadmin будет доступен и по 80-му и по 81-му порту. Если же к примеру вбить локальный адрес машины 192.168.1.33 то тогда будет работать как надо, с 81-го доступа не будет.
0
Назрел очень серьезный вопрос, собственно я так понимаю что одновременно два, три, десять сайтов работать по такой схеме не получится заставить, ну как если бы я просто использовал всего лишь apache без nginx?
0
А еще автор статьи забыл указать что WordPress с такими настройками не будет работать. В частности у меня не работают ссылки.
0
остался и с 80-го порта и с 81-го
81-ый порт виден только если вы находитесь непосредственно на этой же машине.

по такой схеме не получится заставить
По такой схеме работает половина интернета, сайтов может быть сколько угодно, просто добавляйте их по описанной схеме.

А еще автор статьи забыл указать что WordPress с такими настройками не будет работать.
С WordPress я не знаком, чтоб ссылки работали, нужно редиректы правильно настроить.
0
если не открывается, то посмотрите не появился ли в адресной строке 81-ый порт и удалите его
81 порт появляется постоянно когда заходишь в phpmyadmin (и не только). Если установить допустим на сайт скрипт регистрации с VK или Steam то после подтверждения действий допустим на сайте Steam и редиректа назад на ваш сайт опять появляется 81 порт и регистрация не проходит. Как это исправить?
0
Затрудняюсь ответить, мало информации.
0
Сделал все по вашей статье но 81 порт появляется постоянно когда пытаешься залогиниться (не только phpmyadmin).
0
Попробую добавить:
proxy_redirect default; 
proxy_redirect http://127.0.0.1:81/ http://127.0.0.1/;

Как решу проблему отпишусь.
0
В /etc/nginx/sites-available/default вместо:
proxy_redirect off;

Добавил:
proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;

Не уверен что это достаточно хорошо но 81-й порт перестал появляться в адресной строке.
Подробно описано ТУТ
0
Вопрос редиректов достаточно объёмен, сложен и индивидуален для разных CMS, фреймворков и т.д. Вам нужно вдумчиво изучить этот вопрос, чтоб избежать неприятностей.

Статья же, описывает только начальную настройку, о чём и написано в самом конце.
0
После Редактируем первый сайт:
sudo nano /etc/nginx/sites-available/istarik.conf

Создаём ссылку на новый конфиг:
sudo ln -s /etc/nginx/sites-available/istarik.conf /etc/nginx/sites-enabled/istarik.conf

Рестартуем nginx:
sudo service nginx restart

ошибка вот такая… как это исправить???
Job for nginx.service failed because the control process exited with error code. See «systemctl status nginx.service» and «journalctl -xe» for details.

systemctl status nginx.service
● nginx.service — A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
Active: failed (Result: exit-code) since Пт 2017-03-10 22:51:27 EET; 12s ago
Process: 23684 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5
Process: 24803 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process
Main PID: 939 (code=exited, status=0/SUCCESS)

мар 10 22:51:27 dexp systemd[1]: Starting A high performance web server and a re
мар 10 22:51:27 dexp nginx[24803]: nginx: [emerg] directive «location» has no op
мар 10 22:51:27 dexp nginx[24803]: nginx: configuration file /etc/nginx/nginx.co
мар 10 22:51:27 dexp systemd[1]: nginx.service: Control process exited, code=exi
мар 10 22:51:27 dexp systemd[1]: Failed to start A high performance web server a
мар 10 22:51:27 dexp systemd[1]: nginx.service: Unit entered failed state.
мар 10 22:51:27 dexp systemd[1]: nginx.service: Failed with result 'exit-code'.
lines 1-14/14 (END)

nginx -v
nginx version: nginx/1.10.0 (Ubuntu 16.04 LTS)

php -v
PHP 7.0.15-0ubuntu0.16.04.4 (cli) ( NTS )
Copyright © 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright © 1998-2017 Zend Technologies
with Zend OPcache v7.0.15-0ubuntu0.16.04.4, Copyright © 1999-2017, by Zend Technologies
  • avatar
  • zaz
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.