С недавних пор пришлось озаботиться доступом к сайтам на локалхосте из локальной сети. Кому-то эго потешить, кому-то дать доступ к внутрикорпоративному порталу, кому-то просто, чтобы дома можно было работать не только за одним компьютером.
Итак, поехали.
Будем считать, что у нас есть сайт на виртуальном хосте. Например,, пусть это будет site.loc. Также даны два компьютера — один под Open SUSE (Apache2 + PHP + MySQL, IP: 192.168.0.100, например), второй — под WinXP (пусть это будет ноутбук, если кому-то интересно). Мне нужно, чтобы я мог зайти в phpMyAdmin и работать с админкой site.loc c ноутбука. Ну, или просто посмотреть из-под винды, как оно будет выглядеть 🙂
Настроим сеть
Для начала, на компьютере, откуда хотим получить доступ (в нашем случае, с WinXP), открываем файл C:/Windows/System32/drivers/etc/hosts и добавляем строчку после
192.168.0.100 site.loc
Сохраняем файл. что тут написано — при наборе адреса «site.loc» идти на IP «192.168.0.100«. Это вместо того, чтобы поднимать DNS ради одного-двух-пяти сайтов.
Если второй компьютер на Linux — файл будет /etc/hosts, действия — те же.
phpMyAdmin
Если с phpMyAdmin все относительно просто — пишем http://192.168.0.100/phpMyAdmin (регистр тут важен) и все открывается, то с виртуальными хостами придется расковырять пару файлов.
Виртуальные хосты
site.loc, соответственно, живет на виртуальном хосте, который прописан так:
sudo nano /etc/apache2/vhosts.d/site.loc.conf <VirtualHost 127.0.0.1:80> DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin [email protected] <Directory /srv/www/vhosts/site.loc> AllowOverride All Order allow,deny Allow from all </Directory> UserDir public_html </VirtualHost>
Все прекрасно работает на локалхосте, но при попытке зайти на site.loc cо второго компьютера, нас ждет облом. Откроется страница, находящаяся в папке WWW (по умолчанию там будет написано «It worws!«). Вот тут-то мы и начинаем.
Для начала, апачу нужно сказать, какие порты слушать и на каких интерфейсах (он же не телепат, правильно?). Открываем файл /etc/apache2/listen.conf и видим там нечто следующее (исключая коммментарии, конечно):
sudo nano /etc/apache2/listen.conf Listen 80 <IfDefine SSL> <IfDefine !NOSSL> <IfModule mod_ssl.c> Listen 443 </IfModule> </IfDefine> </IfDefine>
К этому всему добру надо указать апачу слушать два интерфейса — локальный (127.0.0.1), чтобы можно было смотреть сайт на локалхосте как раньше, и внешний (192.168.0.100), чтобы апач принимал запросы еще и с того интерфейса, который смотрит в локалку.
NameVirtualHost 192.168.0.100:80 NameVirtualHost 127.0.0.1:80
Можно добавить это в самый конец файла, можно в начало.
Чтобы апач слушал все интерфейсы на 80 порту — вместо того, что выше, добавляем
NameVirtualHost *:80
Этот вариант хорош именно в нашем случае, когда у нас по сути 2 интерфейса (значимых для дела) — 127.0.0.1 и 192.168.0.100
Чтобы все интерфейсы на всех портах (а надо ли?)
NameVirtualHost *
В принципе, все это описано в комментариях в этом же файле. Правда, на английском…
Теперь открываем известный нам уже файл /etc/apache2/vhosts.d/site.loc.conf и добавляем в него блок:
<VirtualHost 127.0.0.1:80> DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin [email protected] <Directory /srv/www/vhosts/site.loc> AllowOverride All Order allow,deny Allow from all </Directory> UserDir public_html </VirtualHost>
Таким образом, должно получиться так:
sudo nano /etc/apache2/vhosts.d/site.loc.conf <VirtualHost 192.168.0.100:80> DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin [email protected] <Directory /srv/www/vhosts/site.loc> AllowOverride All Order allow,deny Allow from all </Directory> UserDir public_html </VirtualHost> <VirtualHost 127.0.0.1:80> DocumentRoot /srv/www/vhosts/site.loc ServerName site.loc ServerAdmin [email protected] <Directory /srv/www/vhosts/site.loc> AllowOverride All Order allow,deny Allow from all </Directory> UserDir public_html </VirtualHost>
Собственно, осталось перезапустить апач:
sudo /etc/init.d/apache2 restart
и проверять. Все должно работать на обоих компьютерах.
Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!
04.06.2013
Здравствуйте уважаемые читатели блога
Что такое карта сайта?
Карта сайта – это древовидный (упорядоченный) список всех разделов и/или страниц сайта, который состоит из ссылок на эти страницы. Карты сайта бывают двух видов: для посетителей сайта (HTML версия) и для поисковых роботов (XML версия).
Зачем нужна карта сайта?
HTML карта сайта служит навигацией для ваших посетителей, благодаря ей они должны быстро сориентироваться в структуре вашего сайта и перейти в нужный им раздел.
XML карта сайта помогает найти поисковым роботам страницы вашего сайта, которые нужно проиндексировать. В случае большого количества страниц и уровней вложенности на сайте, XML карта даёт нам гарантию, что поисковые системы не пропустят страницы, которые должны быть проиндексированы. Также это показывает ваше желание помочь поисковым роботам, что повысит их доверие к вашему сайту.
Ещё одно различие обычной (HTML) карты сайта от XML версии помимо всего прочего заключается в том, что в XML нам не нужно строить упорядоченный, древовидный список (чтобы было красиво и понятно), мы можем указывать URL вразброс, так как важен сам факт их наличия, а не наглядность или последовательность.
Я считаю, что, если наличие HTML версии нужно далеко не всегда, то XML я использую даже для трёхстраничных сайтов, как минимум ради «галочки» в кабинете поисковых систем и мизерного повышения траста к своим сайтам. Делать её всего пару минут, а лишней она точно не будет.
Положительные стороны наличия XML карты сайта:
- Более быстрая индексация новых страниц.
- Гарантия, что робот найдёт нужные страницы.
- Возможность распределения приоритетов при индексировании.
- Возможность указания частоты обновления информации на каждой странице.
- Возможность указания даты последнего обновления страницы.
- Капля в сосуд доверия к вашему сайту.
Внимание!
Для файлов Sitemap должна использоваться кодировка UTF-8.
Размер XML карты сайта не должен превышать 10 MB и не должен содержать больше 50000 URL. Если ваша карта превышает данные показатели, вы можете разбить её на несколько файлов и создать файл индекса sitemap. Подробнее об этом дальше.
В XML версии все ссылки должны быть абсолютными! То есть начинаться с
http://имя_домена/
Как создать sitemap.xml своими руками?
Вначале вы должны создать файл с произвольным именем и расширением .xml, либо .txt или RSS канал, но XML формат даёт больше возможностей и более привычен. Также рекомендуется размещать его именно в корне вашего сайта и называть sitemap.xml
http://site-on.net/sitemap.xml
Далее открываем файл на редактирование, например, с помощью редактора кода Sublime Text 2 или phpDesigner 8 и первой строчкой, без пробелов и табуляций пишем xml-пролог, в котором мы указываем кодировку:
<?xml version="1.0" encoding="UTF-8"?>
После этого идёт обязательный корневой XML-тег:
<urlset>
Он должен содержать стандарт текущего протокола:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
Затем мы перечисляем всё ссылки и их параметры, для того чтобы начать описание новой ссылки мы должны написать обязательный тег
<url></url>
В дочерних тегах которого будет адрес ссылки и её параметры. Чтобы указать URL адрес страницы мы должны записать его абсолютный путь внутри тега
<loc></loc>
Который, как я уже писал, будет вложен в тег <url>. В конце последнего <url> не забываем закрыть корневой элемент </urlset>. Итого минимальная карта сайта будет иметь вид:
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://site-on.net/</loc> </url> </urlset>
Ещё раз повторю, что все теги, написанные здесь обязательны — без них ваша карта сайта не будет работать вообще, так как XML не допускает ошибок! А теперь давайте поговорим о необязательных тегах, благодаря которым мы можем указывать дополнительную информацию о каждом конкретном URL, они, как и обязательный тег loc пишутся внутри тега url.
Тег lastmod
Тег
<lastmod>
Предназначен для указания даты последнего изменения страницы, дата должна быть записана по стандарту W3C Datetime. Например:
<url> <loc>http://site-on.net/</loc> <lastmod>2013-06-04T08:34:46+01:00</lastmod> </url>
Можно опустить точное время и записывать lastmod в более привычном виде:
<lastmod>2013-06-04</lastmod>
Тег changefreq
Тег
<changefreq>
Позволяет указать приблизительную частоту изменений страницы. Его допустимые значения:
- always
- hourly
- daily
- weekly
- monthly
- yearly
- never
Например:
<url> <loc>http://site-on.net/</loc> <lastmod>2013-06-04</lastmod> <changefreq>weekly</changefreq> </url>
В данном примере мы указали частоту обновления главной страницы: раз в неделю. Обращаю ваше внимание, что как и в случае с директивами robots.txt – тег changefreq носит лишь рекомендательный характер, поэтому если вы укажите частоту обновления страницы раз в год, то это ещё не значит что роботы будут посещать её всего лишь 1 раз в год, они могут наведываться хоть каждую неделю, если посчитают нужным.
Тег priority
И последним тегом, которым вы можете пользоваться при составлении своего файла sitemap.xml является:
<priority></priority>
Он показывает, какие страницы нужно проиндексировать как можно скорее, а какие можно и потом, то есть данный тег расставляет приоритет важности (очередь на сканирование). Значение задаётся от 0.0 до 1.0, значение для всех URL по умолчанию равно 0.5.
Внимание!
Priority – это относительная величина, поэтому нет смысла писать для всех страниц (с целью накрутки) приоритет – 1.0, это действие бессмысленно.
Priority – не влияет на позиции страниц в поисковой выдаче! Его значение влияет только на очередь индексирования между страницами вашего сайта.
Пример:
<url> <loc>http://site-on.net/create</loc> <priority>1.0</priority> </url> <url> <loc>http://site-on.net/create/html</loc> <priority>0.8</priority> </url>
В каждом URL вашей карты сайта вы можете использовать разные сочетания необязательных тегов (атрибутов):
<?xml version="1.0" encoding="UTF-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <url> <loc>http://site-on.net/</loc> <lastmod>2013-06-04</lastmod> <changefreq>weekly</changefreq> <priority>1.0</priority> </url> <url> <loc>http://site-on.net/about</loc> <lastmod>2013-06-04T08:34:48+01:00</lastmod> <priority>1.0</priority> </url> <url> <loc>http://site-on.net/create</loc> <priority>1.0</priority> </url> </urlset>
Маскирование символов
По стандарту, в sitemap.xml все нижеприведённые символы должны быть замаскированы с помощью соответствующих им значений в таблице:
Вам необязательно маскировать символы вручную, вы можете воспользоваться этим сервисом: www.accessify.com
Создание файла индекса Sitemap для использования нескольких sitemap.xml
По стандарту, если у вас несколько файлов sitemap.xml, то они должны быть перечислены в файле индекса – это, как бы парадоксально не звучало, карта ваших карт сайта. То есть в файле индекса содержится перечень всех ваших файлов sitemap, в нём вы также можете пользоваться необязательным атрибутом lastmod.
Структура файла индекса полностью идентична структуре обычной карты сайта, поэтому чтобы не растягивать статью просто приведу вам пример:
<?xml version="1.0" encoding="UTF-8"?> <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc>http://site-on.net/sitemap1.xml</loc> <lastmod>2013-06-04</lastmod> </sitemap> <sitemap> <loc>http://site-on.net/sitemap2.xml</loc> </sitemap> </sitemapindex>
Вся вышеприведённая информация взята с официального источника: www.sitemaps.org
Как создать правильную карту сайта для Joomla
Если ваш сайт имеет пару десятков страниц и не собирается увеличивать их количество, то вы, конечно же, можете создать карту сайта вручную. Между прочим, я считаю такой способ более предпочтительным по ряду причин:
- Вам не нужно устанавливать дополнительные компоненты и плагины;
- Они в свою очередь могут иметь изъяны безопасности;
- Карта сайта будет быстрее загружаться, так как не будет отрисовываться на лету.
Однако если количество страниц вашего сайта давно перевалило за 20 и постоянно растёт, то составление карты сайта своими руками теряет свою целесообразность на фоне всех неудобств и затрат времени. Поэтому ребята из Guillermo Vargas решили создать замечательный компонент для Joomla под названием XMAP, который помимо самой Джумлы имеет поддержку большинства популярных компонентов (VirtueMart, Zoo, K2 и др.).
Благодаря этому компоненту вы всего за пару минут создадите правильную карту (HTML и XML) для сайта любого объёма!
Компонент для создания карты сайта на Joomla + VirtueMart – XMAP
Актуальная версия Joomla на момент написания статьи: 2.5.11, актуальная версия XMAP: 2.3.3. Итак, скачиваем бесплатный компонент XMAP с официального сайта разработчиков, этот компонент доступен для любой версии Joomla и VirtueMart, не забудьте выбрать именно вашу версию:
Далее устанавливаем его стандартным способом с помощью «Менеджера расширений», затем заходим в административную панель Джумла: Компоненты/Xmap и сразу зайдём во вкладку «Расширения», чтобы включить нужные нам плагины:
Обычно это Content, WebLinks и VirtueMart для интернет-магазинов. После чего возвращаемся на предыдущую страницу и нажимаем красивую жёлтую кнопочку «Создать» вверху справа:
Теперь вы должны поставить галочки для меню, страницы которых будут автоматически появляться в вашей карте сайта, также здесь вы можете выставить необязательные атрибуты (приоритет и частота обновления), о которых мы уже говорили.
В остальном вам должно быть всё понятно, разве что я рекомендую отключить опцию «Украшать XML», так как она вовсе не к чему:
После всех настроек не забываем поставить состояние «опубликовано» и нажать «сохранить и закрыть»:
Теперь нам остаётся лишь нажать на ссылку «XML Sitemap» и скопировать URL карты сайта в robots.txt и кабинеты Яндекса и Гугл:
Примечание:
Чтобы в вашей карте сайта появились товары из VirtueMart, вы должны создать отдельный пункт меню для категорий VirtueMart и проследить, чтобы в настройках XMAP стояла галочка напротив этого меню.
Если что-то осталось непонятным или вы с чем-то не согласны – оставляйте свои комментарии, я обязательно отвечу.
Всем спасибо за внимание, вы можете подписаться на выход новых статей, используя форму ниже или с помощью кнопок в самом вверху (или справа) страницы. Всем удачного дня и до встречи в новых статьях!
Пожалуйста, оцените эту статью
Средняя оценка: 4.82 из 5 (проголосовало: 131)Статья оказалась вам полезной? Подпишитесь, чтобы не пропустить новые!
Вы можете помочь развитию проекта, сделав всего 1 клик:
Спасибо!генерация ssl ключей и настройка apache
При разработке AMP версии одного проекта, столкнулся с тем, что формы требуют наличие https для домена. Разработку веду на локальном веб-сервере, поэтому https-а там не было. В этой статье расскажу как настроить..
В этот раз я использовал локальный веб-сервер «Apache 2», поэтому далее речь пойдет именно про его настройку.
Прежде всего, создаем папку для сертификатов и переходим в неё:
sudo mkdir -p /etc/ssl/apache2 cd /etc/ssl/apache2
sudo mkdir -p /etc/ssl/apache2 cd /etc/ssl/apache2
|
Теперь генерируем сертификат для localhost:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout localhost.key \ -out localhost.crt
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout localhost.key \ -out localhost.crt
|
Отвечаем на простые вопросы, вводимая информация особо не важна, т.е. можно ввести что угодно
Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York Organization Name (eg, company) [Internet Widgits Pty Ltd]:Home Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:localhost Email Address []:no-reply@localhost
Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:New York Organization Name (eg, company) [Internet Widgits Pty Ltd]:Home Organizational Unit Name (eg, section) []:IT Common Name (e.g. server FQDN or YOUR name) []:localhost Email Address []:no-reply@localhost
|
На выходе, получаем два файлика: localhost.key и localhost.crt
Теперь, добавляем модуль mod_ssl в апач:
Далее открываем файл конфигурации виртуального хоста и добавляем инструкции по подключению SSL.
Например, если для обычного http у вас была вот такая запись конфигурации
<VirtualHost *:80> ServerName mysite.loc ServerAlias www.mysite.loc ServerAdmin [email protected] DocumentRoot /work/progr/webamp/sites/mysite.loc/public_html/web <Directory «/work/progr/webamp/sites/mysite.loc/public_html/web»> AllowOverride All Options FollowSymLinks Require all granted RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php DirectoryIndex index.php index.html </Directory> <IfModule mpm_itk_module> AssignUserId vitto vitto </IfModule> php_admin_value open_basedir «/work/progr/webamp/sites/mysite.loc/public_html:/work/progr/webamp/sites/mysite.loc/tmp:/tmp» php_value upload_tmp_dir «/work/progr/webamp/sites/mysite.loc/tmp» php_value session.save_path «/work/progr/webamp/sites/mysite.loc/tmp» php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on php_flag log_errors off php_value error_reporting -1 ErrorLog /work/progr/webamp/sites/mysite.loc/logs/error.log CustomLog /work/progr/webamp/sites/mysite.loc/logs/access.log combined </VirtualHost>
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<VirtualHost *:80>
ServerName mysite.loc ServerAlias www.mysite.loc ServerAdmin [email protected] DocumentRoot /work/progr/webamp/sites/mysite.loc/public_html/web
<Directory «/work/progr/webamp/sites/mysite.loc/public_html/web»> AllowOverride All Options FollowSymLinks Require all granted
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
DirectoryIndex index.php index.html </Directory>
<IfModule mpm_itk_module> AssignUserId vitto vitto </IfModule>
php_admin_value open_basedir «/work/progr/webamp/sites/mysite.loc/public_html:/work/progr/webamp/sites/mysite.loc/tmp:/tmp» php_value upload_tmp_dir «/work/progr/webamp/sites/mysite.loc/tmp» php_value session.save_path «/work/progr/webamp/sites/mysite.loc/tmp»
php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on php_flag log_errors off php_value error_reporting -1
ErrorLog /work/progr/webamp/sites/mysite.loc/logs/error.log CustomLog /work/progr/webamp/sites/mysite.loc/logs/access.log combined
</VirtualHost>
|
то добавляем еще одну конфигурацию, вот такую
<VirtualHost *:443> ServerName mysite.loc ServerAlias www.mysite.loc ServerAdmin [email protected] DocumentRoot /work/progr/webamp/sites/mysite.loc/public_html/web SSLEngine on SSLCertificateFile /etc/ssl/apache2/localhost.crt SSLCertificateKeyFile /etc/ssl/apache2/localhost.key <Directory «/work/progr/webamp/sites/mysite.loc/public_html/web»> AllowOverride All Options FollowSymLinks Require all granted RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php DirectoryIndex index.php index.html </Directory> <IfModule mpm_itk_module> AssignUserId vitto vitto </IfModule> php_admin_value open_basedir «/work/progr/webamp/sites/mysite.loc/public_html:/work/progr/webamp/sites/mysite.loc/tmp:/tmp» php_value upload_tmp_dir «/work/progr/webamp/sites/mysite.loc/tmp» php_value session.save_path «/work/progr/webamp/sites/mysite.loc/tmp» php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on php_flag log_errors off php_value error_reporting -1 ErrorLog /work/progr/webamp/sites/mysite.loc/logs/error.log CustomLog /work/progr/webamp/sites/mysite.loc/logs/access.log combined </VirtualHost>
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<VirtualHost *:443>
ServerName mysite.loc ServerAlias www.mysite.loc ServerAdmin [email protected] DocumentRoot /work/progr/webamp/sites/mysite.loc/public_html/web
SSLEngine on SSLCertificateFile /etc/ssl/apache2/localhost.crt SSLCertificateKeyFile /etc/ssl/apache2/localhost.key
<Directory «/work/progr/webamp/sites/mysite.loc/public_html/web»> AllowOverride All Options FollowSymLinks Require all granted
RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . index.php
DirectoryIndex index.php index.html </Directory>
<IfModule mpm_itk_module> AssignUserId vitto vitto </IfModule>
php_admin_value open_basedir «/work/progr/webamp/sites/mysite.loc/public_html:/work/progr/webamp/sites/mysite.loc/tmp:/tmp» php_value upload_tmp_dir «/work/progr/webamp/sites/mysite.loc/tmp» php_value session.save_path «/work/progr/webamp/sites/mysite.loc/tmp»
php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on php_flag log_errors off php_value error_reporting -1
ErrorLog /work/progr/webamp/sites/mysite.loc/logs/error.log CustomLog /work/progr/webamp/sites/mysite.loc/logs/access.log combined
</VirtualHost>
|
В ней мы поменяли порт с 80 на 443 в теге VirtualHost и добавили подключение SSL сертификатов, вот этими командами:
… SSLEngine on SSLCertificateFile /etc/ssl/apache2/localhost.crt SSLCertificateKeyFile /etc/ssl/apache2/localhost.key …
… SSLEngine on SSLCertificateFile /etc/ssl/apache2/localhost.crt SSLCertificateKeyFile /etc/ssl/apache2/localhost.key …
|
Теперь перезапускаем apache:
sudo systemctl restart apache2
sudo systemctl restart apache2
|
И можно переходить на https версию сайта.
Т.к. это самоподписанный сертификат, то мы получим предупреждение от браузера типа такого:
Сообщение «HTTPS: Your connection is not secure»
Нажимаем кнопку [Advanced] и в открывшейся панельке [Add Exception..]
Панель «Advanced panel»
В появившемся окне, нажимаем [Get certificate] и затем [Confirm Security Exception]
Добавление исключения безопасности
После этих манипуляций, сайт заработает через https протокол.
—[добавлено 30.08.2018]—
Так же можно добавить автоматический редирект всех запросов с http на https. Для этого в файл .htaccess в корне сайта, добавляем (желательно сразу после RewriteEngine on)
RewriteEngine on … # Если не https, редиректим на https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] …
RewriteEngine on … # Если не https, редиректим на https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] …
|
Теперь если зайти по адресу http://domain.tld/param, вас автоматически перенаправит на https://domain.tld/param
Настройка виртуальных хостов в Apache под Mac OS X
По умолчанию настройки виртуальных хостов Apache на Mac OS X находятся в файле /etc/apache2/extra/httpd-vhosts.conf
Для начала открываем терминал и переходим в root режим:
Далее редактируем файл конфигураций Apache:
vi /etc/apache2/httpd.conf
Найдите в нем следующую строчку:
#Include /private/etc/apache2/extra/httpd-vhosts.conf
И замените ее на:
Include /private/etc/apache2/vhosts/*.conf
Теперь нам необходимо создать эту папку:
mkdir /etc/apache2/vhosts
cd /etc/apache2/vhosts
Создайте конфигурационный файл виртуального хоста по умолчанию:
И добавляем в него:
DocumentRoot "/Library/WebServer/Documents"
Этот файл служит в качестве виртуального хоста по умолчанию. Когда Apache не может найти соответствующий виртуальный хост, он будет использовать первую конфигурацию. Технически этот файл не нужен, поскольку он просто повторяет конфигурации из http.conf. Тем не менее, он обеспечивает локальную настройку сервера.
Создайте файл конфигурации виртуального хоста:
И добавьте в него следующее:
DocumentRoot "/your/path/"
ServerName site.loc
ErrorLog "/your/path/local-error_log"
CustomLog "/your/path/local-access_log" common
AllowOverride All
Require all granted
Перезагрузим веб — сервер Apache:
Если у вас возникли какие-нибудь проблемы, попробуйте выполнить команду, которая проверит настройки:
Настройка виртуальных хостов
Для того, чтобы у вас заработал сайт в браузере, по пути site.loc необходимо отредактировать файл hosts:
Добавьте строчку в конце файла. Имя хоста должно соответствовать ServerName в настройках Apache:
Чтобы очистить локальный кеш DNS, выполните следующую команду:
Теперь можно запрашивать наш сайт по http://site.loc
Проверить ошибки в настройках сервера можно с помощью команды:
И немного о правах
При запросе вашего сайта, вы можете получить в ответ 403 Forbidden, вероятно, это проблема с правами на чтение. Проще говоря, пользователь Apache не имеет на это прав.
Выполните следующую команду, чтобы это исправить:
Цели
- Использовать текущий на момент написания статьи софт
- Чтоб разграничить локальные домены, будем использовать специальный домен .loc
- Переключения версий PHP реализуем через поддомен c помощью fast-cgi
- Автоматическое создание хоста с помощью vhost_alias и dnsmasq
Что имеем в итоге. При переходе на
56.test.locApache запустит c версией PHP 5.6.36
/var/www/test.loc/public_html/index.phpПоменяв поддомен на
72.test.locбудет запущен тот же файл но уже с версией PHP 7.2.7
Другие версии доставляются аналогичным описанным ниже способом.
Для создания еще одного сайта просто создаем в /var/www/ папку имеющую окончание .loc, внутри которой должна быть папка public_html являющаяся корнем сайта
Вот собственно и все. Как без дополнительных мучений, перезапусков, и редактирований конфигов имеем автоматическую систему для работы с сайтами.
Всё это я проверну на LinuxMint19, он на базе Ubuntu18.04, так что с ним все будет аналогично.
Для начала поставим необходимые пакеты
sudo apt update
sudo apt install build-essential pkg-config libxml2-dev libfcgi-dev apache2 libapache2-mod-fcgid postfix
Postfix ставим в качестве плюшки, как простое решение(в мастере установки, всё по умолчанию выбираем) для отправки почты с локальной машины.
Так как это локальная разработка и я единственный пользователь. То мне удобней перенести папку с проектами в мою домашнюю дерикторию. Она у меня маунтится отдельным диском и мигрирует при переустановке системы. Самый простой способ это создать ссылку, тогда не нужно менять пути в настройках да и путь привычный для всех.
Скопируем папку созданную апачем в домашний каталог, создадим на ее месте ссылку, не забыв поменять пользователя на себя и обменяться группами с апачем.
sudo mv /var/www/ ~/www
sudo ln -s ~/www /var/www
sudo chown $USER:$USER -R ~/www
sudo usermod -a -G www-data $USER
sudo usermod -a -G $USER www-data
Создадим папку в которой будем собирать исходники PHP для разных версий
sudo mkdir /usr/local/src/php-build
Также нам понадобится папки для CGI скриптов
sudo mkdir /var/www/cgi-bin
И runtime папка для этих же скриптов, с правами
sudo mkdir /var/run/mod_fcgid
sudo chmod 777 /var/run/mod_fcgid
И так как каталог у нас находится в оперативной памяти, добавим его создание при старте системы, для этого добавим в /etc/tmpfiles.d/fcgid.conf
#Type Path Mode UID GID Age Argument
d /var/run/mod_fcgid 0755 www-data www-data - -
У меня dnsmasq-base идет с коробки, если нет то его всегда можно доставить.
sudo apt install dnsmasq
Добавим правило в его конфигурацию. Найти файл конфигурации dnsmasq.conf можно так
sudo updatedb
locate dnsmasq.conf
Либо если он как и у меня является частью NetworkManager то создать новый файл конфигурации в /etc/NetworkManager/dnsmasq.d/local.conf
Добавим в него строчку для перенаправление нашего локального домена на локальную машину.
address=/loc/127.0.0.1
Также нужно включить необходимые модули апача
sudo a2enmod fcgid vhost_alias actions rewrite
Предварительная подготовка завершена, приступаем к сборке различных локальных версий PHP. Для каждой версии PHP проделываем следующие 4 шага. На примере 5.6.36
1. Скачиваем исходники нужной версии и распаковываем их
cd /usr/local/src/php-build
sudo wget http://pl1.php.net/get/php-5.6.36.tar.bz2/from/this/mirror -O php-5.6.36.tar.bz2
sudo tar jxf php-5.6.36.tar.bz2
2. Cобираем из исходников нужную версию PHP, и помещаем ее в /opt/php-5.6.36
sudo mkdir /opt/php-5.6.36
cd php-5.6.36
sudo ./configure --prefix=/opt/php-5.6.36 --with-config-file-path=/opt/php-5.6.36 --enable-cgi
sudo make
sudo make install
sudo make clean
3. Создаем CGI для обработки этой версии в /var/www/cgi-bin/php-5.6.36.fcgi
#!/bin/bash
PHPRC=/opt/php-5.6.36/php.ini
PHP_CGI=/opt/php-5.6.36/bin/php-cgi
PHP_FCGI_CHILDREN=8
PHP_FCGI_MAX_REQUESTS=3000
export PHPRC
export PHP_FCGI_CHILDREN
export PHP_FCGI_MAX_REQUESTS
exec /opt/php-5.6.36/bin/php-cgi
4. Делаем файл исполняемым
sudo chmod +x /var/www/cgi-bin/php-5.6.36.fcgi
5. Добавляем экшен для обработки каждой версии в /etc/apache2/mods-available/fcgid.conf
<IfModule mod_fcgid.c>
AddHandler fcgid-script fcg fcgi fpl
Action application/x-httpd-php-5.6.36 /cgi-bin/php-5.6.36.fcgi
AddType application/x-httpd-php-5.6.36 .php
#Action application/x-httpd-php-7.2.7 /cgi-bin/php-7.2.7.fcgi
#AddType application/x-httpd-php-7.2.7 .php
FcgidIPCDir /var/run/mod_fcgid
FcgidProcessTableFile /var/run/mod_fcgid/fcgid_shm
FcgidConnectTimeout 20
<IfModule mod_mime.c>
AddHandler fcgid-script .fcgi
</IfModule>
</IfModule>
6. Добавляем правило для обработки каждой версии в /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
#Универсальный ServerNamе
ServerAlias *.loc
#Алиас для CGI скриптов
ScriptAlias /cgi-bin /var/www/cgi-bin
#Универсальный DocumentRoot
VirtualDocumentRoot /var/www/%2+/public_html
#Директория тоже должна быть универсальной
<Directory /var/www/*.loc/>
Options +ExecCGI -Indexes
AllowOverride All
Order allow,deny
Allow from all
<FilesMatch \.php$>
#Ниже все условия для каждой из версий
<If "%{SERVER_NAME} =~ /56\..*?\.loc/">
SetHandler application/x-httpd-php-5.6.36
</If>
<Else>
#По умолчанию, если версия не указанна, запускаем на последней
SetHandler application/x-httpd-php-7.2.7
</Else>
</FilesMatch>
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Ну вот и всё. Осталось только перезапустить apache и dnsmasq и пользоваться
sudo service apache2 restart
sudo service network-manager restart
Поместим в index.php нового тестового сайта phpinfo() и проверим что все работает.
GitHub — alexandrSS / site.loc
перейти к содержанию Зарегистрироваться- Почему GitHub?
Особенности →
- Обзор кода
- Управление проектами
- Интеграции
- Действия
- Пакеты
- Безопасность
- Управление командой
- Хостинг
- Отзывы клиентов →
- Безопасность →
- команда
- предприятие
- Проводить исследования
- Исследуйте GitHub →
учиться и внести свой вклад
- Темы
- Коллекции
- Тенденции
- Learning Lab
- Руководства с открытым исходным кодом
Общайтесь с другими
- События
- Общественный форум
- GitHub Education
GitHub — RomanBayt / site.loc: VCS для site.loc
перейти к содержанию Зарегистрироваться- Почему GitHub?
Особенности →
- Обзор кода
- Управление проектами
- Интеграции
- Действия
- Пакеты
- Безопасность
- Управление командой
- Хостинг
- Отзывы клиентов →
- Безопасность →
- команда
- предприятие
- Проводить исследования
- Исследуйте GitHub →
учиться и внести свой вклад
- Темы
- Коллекции
- Тенденции
- Learning Lab
- Руководства с открытым исходным кодом
Общайтесь с другими
- События
- Общественный форум
- GitHub Education
GitHub — SashaPeople / site.loc
перейти к содержанию Зарегистрироваться- Почему GitHub?
Особенности →
- Обзор кода
- Управление проектами
- Интеграции
- Действия
- Пакеты
- Безопасность
- Управление командой
- Хостинг
- Отзывы клиентов →
- Безопасность →
- команда
- предприятие
- Проводить исследования
- Исследуйте GitHub →
учиться и внести свой вклад
- Темы
- Коллекции
- Тенденции
- Learning Lab
- Руководства с открытым исходным кодом
Общайтесь с другими
- События
- Общественный форум
- GitHub Education
GitHub — Prots1987 / site.loc
перейти к содержанию Зарегистрироваться- Почему GitHub?
Особенности →
- Обзор кода
- Управление проектами
- Интеграции
- Действия
- Пакеты
- Безопасность
- Управление командой
- Хостинг
- Отзывы клиентов →
- Безопасность →
- команда
- предприятие
- Проводить исследования
- Исследуйте GitHub →
учиться и внести свой вклад
- Темы
- Коллекции
- Тенденции
- Learning Lab
- Руководства с открытым исходным кодом
Общайтесь с другими
- События
- Общественный форум
- GitHub Education