IPB

Здравствуйте, гость ( Авторизация | Регистрация )


7 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topicGo to the end of the page
> Делаю сайт, Впервые!
indеx
сообщение 26.07.2017 - 17:24
Сообщение #21


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Однако, при разработке сайта менять файлы приходится очень часто, и каждый раз устанавливать нужные значения прав на каталоги очень неудобно. Было бы гораздо лучше, если файлы и каталоги сразу распаковывались бы с нужными правами. Как выяснилось, это архиватор 7z распаковывает каталоги с такими правами. Почему? Ответ мне пока неизвестен. Как сделать, чтобы он распаковывал их сразу с нужными правами? Тоже не нашёл я ответа. Попробовал использовать архиватор zip... В Тотал Командире он уже есть, а вот на сервер его нужно установить:
Код
apt install zip

Упаковал файлы в своём любимом Тотал Командире, затем переслал архив arhiv.ZIP на сервер, и выполнил там команду:
Код
unzip arhiv.ZIP

В результате все файлы и каталоги распаковались с теми правами, которые мне нужны. И это выход! Конечно, архиватор 7z намного лучше сжимает информацию, чем zip, и поэтому я буду продолжать искать решение с 7z. Но в моём случае степень сжатия архива не так важна, как удобство при работе с архивами, поэтому пока я буду использовать zip.

В общем, теперь после распаковки архивов, мне не нужно менять никакие права, и html-страницы сайта в браузере сразу предстают передо мной в полноценном виде. Но html-страницы, это так называемая "статика", т.е. страницы, содержание которых определено заранее и хранится в самом файле. А на моём сайте уже есть и так называемая "динамика", т.е. страницы, содержание которых наполняется информацией из базы данных. И эти страницы сейчас не работают. Более того, файлы *.php даже не запускаются. Вместо этого, они зачем-то начинают скачиваться с сайта. Выше я писал, что в работе сайта принимают участие три основных программы: 1) веб-сервер, 2) база данных, 3) PHP. Давайте проверим, все ли три программы у нас работают... Для этого введём в консоли команду:
Код
pstree

Результат выглядит так:
» Кликните сюда для просмотра оффтоп текста.. «

Конечно, разноцветных линий, стрелочек и букв в консоли не было. Это я добавил, чтобы показать, где там что. И мы видим, что все три основных программы, на которых работает сайт, у нас работают. Значит, они просто неправильно настроены. В нашем случае php-файлы должны исполняться, а не скачиваться. За выбор этого действия отвечает веб-сервер, nginx. Значит, смотрим настройки nginx, которые, как мы уже знаем, расположены в файле /etc/nginx/nginx.conf. Открываем этот файл и видим множество строк с разными настройками, от которых нам становится страшно. Но все эти настройка нам пока не нужны, мы успокаиваемся и ищем в этих строках раздел "server". Такого раздела в файле нет, однако, есть строка:
Код
include /etc/nginx/sites-enabled/*;

Которая означает, что в этом месте наши настройки дополняются настройками из всех файлов, расположенных в каталоге /etc/nginx/sites-enabled. Звёздочка перед точкой с запятой как раз означает "все файлы". Переходим в каталог /etc/nginx/sites-enabled и смотрим в него. Видим один файл с названием default. Значит, настройки из этого файла добавляются к настройкам основного файла. Открываем файл, чтобы посмотреть, нет ли там раздела "server", и видим, что он там есть. Вот текст всего файла:
» Кликните сюда для просмотра оффтоп текста.. «

Выглядит как огромный страшный файл с армией неприступных настроек. Однако, любая строка, начинающаяся с символа "#", является комментарием, т.е. не обязательна, и такие строки можно удалить. После удаления у нас получается вот такой файл:
» Кликните сюда для просмотра оффтоп текста.. «
То есть, осталось всего 10 скромненьких строчек, совсем не страшных и даже очень милых ag.gif

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 26.07.2017 - 22:56
Сообщение #22


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Итак, нам нужно разобраться в этих 10 строчках. А именно, выяснить, как сделать так, чтобы php-файлы не скачивались браузером, а запускались на выполнение, ибо php-файлы это по сути программы, которые выполняются на стороне сервера, и выполняет их программа php-fpm, которую мы устанавливали. Что нужно написать в файле default, чтобы php-файлы выполнялись программой php-fpm? Чтобы это выяснить, как обычно, лезем во всезнающий Интернет. И оказывается, написать нужно несколько строк, которые мы удалили вместе с другими комментариями. Эти строки нужно было не удалять, а "раскомментировать", т.е. убрать символы "#" в начале соответствующих строк. Так, какие именно строки? А вот эти:
Код
    #location ~ \.php$ {
    #    include snippets/fastcgi-php.conf;
    #
    #    # With php7.0-cgi alone:
    #    fastcgi_pass 127.0.0.1:9000;
    #    # With php7.0-fpm:
    #    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    #}

Удаляем символы "#", находящиеся в начале строки, затем, удаляем строку "fastcgi_pass 127.0.0.1:9000;", т.к. у нас работает не php7.0-cgi, а php7.0-fpm, а также удаляем две строки с комментариями, где стоят ещё по одному символу "#". И у нас остаётся:
Код
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

Добавляем эти 4 строки в файл default к имеющимся 10 строкам, и получается:
Код
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name _;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}

Сохраняем файл, и тем самым меняем настройки веб-сервера nginx. Однако, nginx уже работает, а "на ходу" настройки не меняются. То есть, нужно ещё и перезапустить nginx. Перезапускаем:
Код
systemctl restart nginx

Заходим на сайт, на динамическую страницу, и видим, что php-файлы уже не скачиваются, а выполняются программой php-fpm, как мы и хотели. Однако, всё равно результат не такой, как мы ожидали. Браузер показывает не страницу, заполненную информацией из базы данных, а страницу с ошибкой:
» Кликните сюда для просмотра оффтоп текста.. «

В самом начале ошибки написано "SQL ERROR [mysqli]", из-за чего может показаться, что это наша база данных MySQL ругается. Однако, ниже почему-то идут ссылки на файлы *.php. Так в чём же дело? Давайте попробуем перевести с английского языка содержательную часть этого ругательства:
Цитата
mysqli_connect function does not exist, is mysqli extension installed?

И вот наш перевод:
Цитата
Функция mysqli_connect не существует, установлено ли расширение mysqli?

Ага, всё понятно. mysqli_connect — это функция в языке PHP. Но для того, чтобы она работала, нужно установить расширение mysqli для PHP. Устанавливаем:
Код
apt install php7.0-mysqli
Теперь перезапускаем PHP:
Код
systemctl restart php7.0-fpm

Обновляем страницу сайта, и радуемся, что ошибка та пропала! Та пропала, но появилась новая ошибка ca.gif
С которой сегодня мы уже не будем бороться, а лучше пойдём смотреть вторую серию того странного сериала, что обнаружили на днях...

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 27.07.2017 - 13:52
Сообщение #23


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

А ошибка следующая:
» Кликните сюда для просмотра оффтоп текста.. «

Что означает: "Отказано в доступе для пользователя..." Вот это уже действительно ответ от СУБД MySQL (системы управления базами данных). И ответ логичный — мы же нигде не указывали, с каким логином и паролем наша программа на PHP будет подключаться к MySQL. Более того, в MySQL мы не создали ни одной базы данных с информацией. Всё это нам нужно сделать. Давайте начнём с подключения. Вспоминаем, какой там логин у администратора MySQL... Логин: root. А пароль мы указывали при установке. Значит, эти логин с паролем нужно прописать в нашей программе, написанной на языке PHP, в файлах *.php. Открываю свой файл config.php (у Вас он может называться по-другому), и прописываю там:
1) хост: "localhost",
2) логин: "root",
3) пароль: "***********" (здесь нужно в открытом виде указать пароль).
Как именно выглядит файл config.php, и как именно прописывать эти значения, мы рассмотрим позже, когда будем писать программу сайта на языке PHP.
Сохраняем файл и снова обновляем страницу сайта. Видим следующее:
» Кликните сюда для просмотра оффтоп текста.. «

Старая ошибка пропала, но опять появилась новая, чтоб ей пусто было. "Unknown database db_name" означает "Неизвестная база данных db_name". И в отличии от предыдущей ошибки, это означает, что мы уже подключились к MySQL, прошли этот этап. Теперь следующий — создание базы данных.
Чтобы создать новую, пустую базы данных, мы можем подключиться к MySQL через нашу уже любимую консоль, следующим образом:
Код
mysql -u root -p

Система попросит ввести пароль, мы его вводим и на экране появляется следующее:
» Кликните сюда для просмотра оффтоп текста.. «

Это означает, что мы подключились к MySQL через консоль. И теперь всё, что мы вводим в консоли, будет являться не командами для операционной системы Ubuntu, а командами для СУБД MySQL. То есть, теперь нам нужно писать команды на другом языке, на языке SQL, который понравился нам своей красотой. Как же будет выглядеть на этом языке команда создания новой базы данных? А вот как:
Код
CREATE DATABASE `my_db` CHARACTER SET utf8 COLLATE utf8_general_ci;
Что означает "Создать базу данных с именем my_db и с использованием кодировки utf8". Кодировка — это способ кодирования символов в компьютере. Кодировки бывают разные, но UTF8 — это универсальная кодировка, которая всё шире и шире используется в сети. Более подробно мы будем разбираться с кодировкой далее. А пока нужно обратить внимание на кавычки, в которые заключено имя базы данных my_db. Эти кавычки не обычные, а обратные, их можно ввести с клавиатуры, если нажать кнопку с буквой "ё", только в английской раскладке. Если ввести другие кавычки, то MySQL не примет у нас команду. Если же кавычки правильные, то MySQL ответит:
Код
Query OK, 1 row affected (0.00 sec)
» Кликните сюда для просмотра оффтоп текста.. «
Что означает "Запрос принят, задействована 1 строка". То есть, база данных с именем my_db создана. Это то, чего нам не хватало, и из-за чего возникала ошибка. Указываем имя новой базы данных my_db в файле config.php, сохраняем файл и снова обновляем страницу. В результате снова видим новую ошибку:
» Кликните сюда для просмотра оффтоп текста.. «
Которую рассмотрим в следующий раз.

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 28.07.2017 - 13:53
Сообщение #24


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Основное сообщение в тексте ошибки следующее:
Код
Table 'my_db.phpbb_ext' doesn't exist
Что переводится как: "Таблица 'my_db.phpbb_ext' не существует".
Дело в том, что любая база данных, в том числе и my_db, которую мы создали, состоит из так называемых таблиц. Каждая таблица — это, собственно, таблица, состоящая из колонок и строк, как любая обычная таблица. В эти таблицы можно добавлять строки, можно удалять из них строки, менять значения в строках, выполнять поиск значений по всей таблице, делать выборку значений и т.д. То есть, вся информация в базе данных хранится в этих самых таблицах. Например, мы можем создать в базе данных my_db таблицу с названием "cars", где каждая строка будет соответствовать одному автомобилю. В этой строке будет марка автомобиля, модель, цена, а также другие характеристики. В этой же базе данных мы можем создать ещё одну или несколько других таблиц для заполнения их другой информацией, которую мы хотим хранить и использовать в работе сайта. Так вот, в нашей новой базе данных никаких таблиц ещё нет, и данных тоже нет. А файлы сайта требуют таблицы и требуют данные, поэтому и возникает такая ошибка. Дело в том, что при переносе сайта с одного хостинга на другой, перенести только лишь одни файлы — мало. Кроме файлов нужно перенести ещё и базу данных со всеми таблицами и всеми данными. А я базу данных не перенёс, а перенёс только файлы. Ошибка? Нет, это я специально так сделал, чтобы здесь на форуме последовательно описать всё по порядку.

Итак, у меня есть база данных с предыдущего хостинга, сохранённая в файле, и мне нужно перенести её на этот новый хостинг. Это можно сделать и через консоль, если загрузить файл на сервер. Но мне удобнее пользоваться программой MySQL Workbench, которая может удалённо (то есть, с моего домашнего или офисного компьютера) подключаться к СУБД MySQL. Эта программа удобна тем, что в ней, как в обычных программах для Windows всё наглядно, есть окошки и возможность работать мышкой. По сравнению с текстовой консолью это намного удобнее. Скачать программу MySQL Workbench можно бесплатно по ссылке: https://dev.mysql.com/downloads/workbench/ После установки, нужно создать в программе подключение к нашей СУБД MySQL. Делается это следующим образом... Нажимаем мышкой плюсик:
» Кликните сюда для просмотра оффтоп текста.. «
Появляется новое окошко:
» Кликните сюда для просмотра оффтоп текста.. «
В котором мы щёлкаем выпадающий список и выбираем в нём пункт "Standard TCP/IP over SSH":
» Кликните сюда для просмотра оффтоп текста.. «
После чего мы видим настройки, заполненные не нашими данными:
» Кликните сюда для просмотра оффтоп текста.. «
Соответственно, заполняем их нашими данными:
» Кликните сюда для просмотра оффтоп текста.. «
Красными стрелками указаны кнопки, которые нужно по очереди нажать, и по очереди появятся два маленьких окошка:
» Кликните сюда для просмотра оффтоп текста.. «
в которых нужно ввести два пароля:
1) пароль пользователя kamikadze9705 в системе,
2) пароль пользователя root в СУБД MySQL, который мы вводили при установке MySQL.
В каждом окошке нажать кнопку "ОК", и затем общую кнопку "ОК" в окне настроек. После этого в основном окне программы появится ярлык настроенного подключения:
» Кликните сюда для просмотра оффтоп текста.. «
И если все настройки были введены правильно, то при нажатии на этот ярлык произойдёт подключение к СУБД MySQL, и в программе появится новая вкладка с интерфейсом управления базами данных:

И в этом интерфейсе в списке слева мы с Вами уже можем наблюдать название нашей новой базы данных "my_db", которую мы создавали через текстовую консоль. Эта база данных пока пустая, но мы как раз и подключились с помощью программы MySQL Workbench, чтобы наполнить её данными из файла. И вот как это делается... В основном меню программы выбираем "Server -> Data Import":
» Кликните сюда для просмотра оффтоп текста.. «
Появляется формочка для заполнения:
» Кликните сюда для просмотра оффтоп текста.. «
В которой мы делаем 4 действия:
1) щёлкаем переключатель,
2) выбираем файл, в котором сохранены наши старые данные,
3) выбираем, в какую из существующих баз данных нужно эти данные внести,
4) нажимаем кнопку "Start Import".
» Кликните сюда для просмотра оффтоп текста.. «
После чего ждём, пока на этой странице не появится последнее слово "finished":
» Кликните сюда для просмотра оффтоп текста.. «
Это будет означает, что данные загрузились в базу. И не только данные загрузились, но и создались таблицы, в которых эти данные хранятся. Чтобы убедиться в этом, нужно нажать маленькую кнопочку "Обновить", и раскрыть список таблиц нашей базы данных my_db:
» Кликните сюда для просмотра оффтоп текста.. «
Как мы видим, в базе данных появилось много таблиц с разными названиями, в которых теперь лежат данные с нашего старого хостинга. А значит, последняя ошибка о том, что таблица не существует, должна исчезнуть с нашего сайта. Обновляем сайт:
» Кликните сюда для просмотра оффтоп текста.. «
И видим, что действительно, старая ошибка исчезла. Но как обычно, появилась ошибка новая, и исправлять мы её конечно же будем, только в следующей серии.

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 28.07.2017 - 22:20
Сообщение #25


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Итак, текст ошибки:
Цитата
Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'my_db.s.session_viewonline' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by [1055]
Вкратце это означает, что какой-то написанный в нашем сайте запрос к базе данных несовместим с одной настройкой sql_mode=only_full_group_by
Но на старом хостинге всё работало, не было никаких проблем. В чём же дело? Задаём вопрос Интернету... Там пишут, что начиная с версии MySQL 5.7, эта настройка по умолчанию включена. То есть, в предыдущих версиях, видимо, она была выключена. Давайте посмотрим, а какая версия MySQL работает у нас на сервере... Для этого в программе MySQL Workbench во вкладке "Management" нажимаем пункт "Server Status" и видим следующую информацию о сервере:
» Кликните сюда для просмотра оффтоп текста.. «
Среди которой видна и версия MySQL: version 5.7.19. Значит, на нашем сервере эта настройка включена, и поэтому у нас возникает ошибка. А на предыдущем хостинге, видимо, версия MySQL была ниже 5.7, настройка была выключена, и поэтому ошибки не было. Давайте попробуем выключить эту настройку. Снова лезем в Интернет за советом, как именно эта настройка выключается, и находим... Сначала давайте узнаем, какое значение имеет настройка в данный момент. Для этого в программе MySQL Workbench, во вкладке "Query 1" напишем следующий запрос:
Код
SELECT @@GLOBAL.sql_mode;
Затем жмём кнопку "Execute" ("Выполнить") и видим следующий результат:
» Кликните сюда для просмотра оффтоп текста.. «
После чего копируем этот результат нажатием правой кнопки мыши и выбором пункта "Copy Field" (Скопировать поле):
» Кликните сюда для просмотра оффтоп текста.. «
Затем вставляем в блокнот и видим:
Код
'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FO
R_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
Такое значение имеет настройка сейчас. А нам нужно было выключить only_full_group_by. Смотрим, в самом начале строки как раз написано ONLY_FULL_GROUP_BY. Попробуем убрать это и записать изменённую строку. Значит, новая строка у нас получается такая:
Код
'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
Записываем её следующим образом... Стираем "SELECT @@GLOBAL.sql_mode;" и пишем на том же месте:
Код
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
В конце ставим точку с запятой, снова нажимаем кнопку "Execute" и видим результат:
» Кликните сюда для просмотра оффтоп текста.. «
Где снизу, в журнале выполненных операций, можно заметить маленький зелёненький значок, означающий успешное выполнение операции.
Таким образом получается, что мы изменили настройку, из-за которой у нас возникала ошибка. Проверяем... Заходим на динамическую страницу нашего сайта и видим, что всё работает без ошибок. Ну наконец-то, мы это сделали! Оглядываясь вверх на все эти сообщения, прямо даже не верится, что мы САМИ проделали такую работу. А ведь поначалу всё это было так страшно ab.gif

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 29.07.2017 - 13:38
Сообщение #26


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Итак, подведём промежуточные итоги...
На данный момент на нашем сервере VPS работает:
    1) веб-сервер nginx,
    2) PHP,
    3) СУБД MySQL.
Это три основных компонента, которые обеспечивают работу сайта, и сайт работает.
При этом управление сервером происходит:
    1) общее — из консоли через подключение SSH,
    2) обмен файлами — по протоколу SFTP через туннель SSH,
    3) управление базами данных — из программы MySQL Workbench через туннель SSH.
То есть, всё управление идёт через защищённые подключения SSH, что обеспечивает нам информационную безопасность.

Теперь давайте посмотрим, что у нас ещё не сделано...
    1) на сервере работает только один сайт, а нам нужно сделать, чтобы работало несколько,
    2) для защиты пользовательских данных (логинов, паролей и т.д.) нужно настроить SSL-протокол,
    3) нужно защитить сайты от различных видов атак злоумышленников,
    4) на нашем сервере нет электронной почты, а нужно, чтобы была для поддержки пользователей.
И это всё является пока только созданием сервера для сайта, но не созданием самого сайта. Однако, сервер для сайта — это фундамент для него, и от правильной его работы зависят все сайты, работающие на сервере. Именно поэтому я решил подойти к этому делу так серьёзно. А после того, как сервер будет создан и полностью настроен, нужно будет продолжать делать сам сайт. Но не будем забегать вперёд, и приступим к настройке работы нескольких сайтов на сервере...

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 29.07.2017 - 15:43
Сообщение #27


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Чтобы работало несколько сайтов, нужно настроить веб-сервер nginx. А именно, в настройках нужно для каждого сайта создать свой раздел "server". Где у нас находится раздел "server"? В файле /etc/nginx/sites-enabled/default. И вот как он выглядит:
Код
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    server_name _;
    location / {
        try_files $uri $uri/ =404;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
}
Этот один раздел server соответствует одному сайту. Значит для ещё одного сайта нам нужно создать ниже ещё один такой же раздел. Такой же, да не такой. А какой? Чтобы разобраться в этом, давайте рассмотрим каждую строчку...
listen 80 default_server; — Означает, что веб-сервер работает на порту № 80. Это стандартный порт для протокола HTTP, на котором работают все сайты. То есть, когда в строке браузера мы пишем, например: tochek.net, то подразумевается, что используется 80-й порт. И если мы напишем tochek.net:80, то это будет то же самое, и браузер откроет нам наш любимый форум. А вот если мы напишем, например, tochek.net:81 или поставим какое-нибудь другое число вместо 80, то форум нам не ответит, т.к. он работает на порту № 80. Кроме того, слова default_server в строке означают "сайт по умолчанию". То есть, этот сайт откроется, если веб-сервер не смог определить, какой сайт нужен пользователю.
listen [::]:80 default_server; — Эта строка нужна для поддержки протокола IPv6, который нужен для будущего, но он пока ещё недостаточно распространён в сети. Просто оставляем эту строчку как есть.
root /var/www/html; — Это каталог на сервере, в котором расположены файлы данного сайта. То есть, для другого сайта нужно будет указать другой каталог, в котором находятся файлы этого другого сайта.
index index.html index.htm index.nginx-debian.html; — Здесь после слова index указывается, с какого файла сервер должен начать обзор сайта, если в браузере указано, например, просто tochek.net. В данном случае веб-сервер должен начать обзор сайта с файла index.html. А если такого файла нет, то начать с файла index.htm. И так далее, по порядку, если указано несколько файлов.
server_name _; — Это домен. То есть, имя и одновременно адрес сайта, по которому пользователи будут заходить на сайт. Например, для сайта tochek.net здесь должно быть указано tochek.net. В данном случае у нас указано имя "_". Такого домена не существует, поэтому на сайт можно зайти только если ввести в браузере IP-адрес сервера. Вопрос: Почему же тогда мы можем зайти на сайт по домену? Ответ: Потому что указана директива default_server, и попытка зайти на любой домен, привязанный к хостингу, но неизвестный для веб-сервера nginx, будет отправлять пользователя на данный сайт.
Далее идёт блок:
Код
    location / {
        try_files $uri $uri/ =404;
    }
Который означает, что все файлы, находящиеся в каталоге /var/www/html и в его подкаталогах, должны отправляться браузеру.
Следующий блок:
Код
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }
Означает, что все файлы с расширением .php, прежде чем отправляться браузеру, должны быть обработаны интерпретатором PHP (php-fpm), который является одним из трёх основных компонентов для работы сайта.
Так, разобрались. Значит, для двух разных сайтов, нам нужно сделать два таких раздела server с указанием 1) двух разных доменов и 2) двух разных каталогов с файлами, соответствующих каждому сайту.
Для начала давайте создадим два разных каталога. Допустим, у нас два сайта: 1) site1.ru, 2) site2.ru. Не будем ничего усложнять и в каталоге /var/www создадим два подкаталога: 1) site1.ru, 2) site2.ru. В первый каталог поместим файлы первого сайта, а во второй, соответственно, второго. Создать эти каталоги можно, например, из установленной нами на сервере программы Midnight Commander, если с её помощью зайти в каталог /var/www, нажать там кнопку F7 и ввести название нового каталога, например, site1.ru. Только обратите внимание, что создавать каталоги нужно от имени пользователя kamikadze9705, чтобы у веб-сервера не было проблем с доступом к файлам сайтов. То есть, в программу Midnight Commander нужно заходить не так: sudo mc, а так: mc. После этого можно создавать каталоги и копировать файлы сайтов.
Теперь в файле /etc/nginx/sites-enabled/default сделаем копию всего раздела server, чтобы получилось их два одинаковых. Вот так:
» Кликните сюда для просмотра оффтоп текста.. «
А затем исправим значения на нужные нам.
То есть, в первой копии раздела server:
    1) заменим root /var/www/html; на root /var/www/site1.ru;,
    2) заменим server_name _; на server_name site1.ru;,
    3) в строке index index.html index.htm index.nginx-debian.html; оставим только index index.html;, т.к. index.html будет единственный главный файл на нашем сайте.
А во второй копии раздела server:
    1) заменим root /var/www/html; на root /var/www/site2.ru;,
    2) заменим server_name _; на server_name site2.ru;,
    3) в строке index index.html index.htm index.nginx-debian.html; оставим только index index.html;, т.к. index.html будет единственный главный файл на нашем сайте.
    4) уберём слова default_server, т.к. сайт по умолчанию должен быть только один, и в нашем случае это будет site1.ru.
Итого, у нас получится:
» Кликните сюда для просмотра оффтоп текста.. «
Сохраняем файл с этими настройками. И, внимание, копируем его не в папку /etc/nginx/sites-enabled, а в папку /etc/nginx/sites-available. Потому что в первой папке на самом деле находится не сам файл, а ссылка на него. А сам файл находится во второй папке. И если мы изменим файл во второй папке, то автоматически изменится и в первой, т.к. это просто ссылка. Так сделано для удобства управления сайтами — чтобы легче было включать и выключать определённые сайты.
После изменения этих настроек, нужно перезапустить веб-сервер nginx:
Код
systemctl restart nginx

Таким образом мы создали на сервере два сайта: site1.ru и site2.ru. И если всё было сделано правильно, то из браузера мы сможем зайти как на первый наш сайт, так и на второй. То есть, мы платим за один хостинг, а сайта у нас два. Классно! qa.gif

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 30.07.2017 - 2:36
Сообщение #28


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Обнаружилось, что после рестарта сервера (вместе со всеми сайтами и программами), который делается вот так:
Код
reboot now
Снова возникает ошибка типа this is incompatible with sql_mode=only_full_group_by
Это происходит потому, что все переменные, установленные методом SET, сбрасываются после перезагрузки. И если мы хотим, чтобы они не сбрасывались, то нужно прописать их в файле /etc/mysql/my.cnf. В данном случае в этот файл нужно добавить следующие 2 строки:
Код
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_A
UTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Затем сохранить файл и перезапустить MySQL:
Код
systemctl restart mysql
После этого ошибка больше не появится даже после рестарта сервера.


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 30.07.2017 - 12:41
Сообщение #29


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

Теперь давайте настроим SSL-протоколы для наших сайтов, чтобы личные данные пользователей шифровались при передаче и не были перехвачены злоумышленниками. Обязательным компонентом SSL-протокола является SSL-сертификат. Каждому сайту выдаётся свой собственный SSL-сертификат, привязанный к домену сайта. Выдать своему сайту сертификат мы можем сами с помощью специальной программы, делается это несложно, и такой сертификат называется самоподписанным. А можем запросить сертификат у организации, являющейся доверенной в Интернете, и такой сертификат называется доверенным. В чём разница? Дело в том, что при входе на сайт с самоподписанным сертификатом, пользователь сначала не видит сайт, а видит предупреждение от системы безопасности браузера. Мол, сертификат данного сайта не является доверенным, неизвестно, как он работает, и безопасна ли передача личных данных при этом. Пользователи, не разбирающиеся в этом деле, сразу начинают сомневаться вообще заходить на такой сайт, что очень сильно снижает репутацию сайта. Поэтому очень важно установить на свой сайт именно доверенный сертификат, выданный доверенной организацией. Как я уже писал выше, существует много организаций, выдающих такие сертификаты платно, за деньги. Однако, недавно в Интернете появилась одна организация, выдающая их бесплатно. Сервис по выдаче сертификатов, который она предоставляет, называется Let's Encrypt. Сайт этого сервиса расположен по адресу: https://letsencrypt.org/.

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post
indеx
сообщение 31.07.2017 - 12:55
Сообщение #30


Почетный
*******

Текущее настроение:

Вст. ник | Цитата

Группа: Супер Стар
Сообщений: 3097
Регистрация: 29.12.2009
Пользователь №: 33839

Награды: 15
Подарки: 41

Пол: М


Репутация:   315  

И чтобы для наших сайтов установить SSL-сертификаты, нам на нашем сервере нужна программа-клиент, которая будет общаться с программой-сервером на сервере службы Let's Encrypt. Установить эту программу-клиент можно обычным способом:
Код
apt install letsencrypt

Обратите внимание, что сертификаты не будут попадать на наш домашний или офисный компьютер, а будут приходить с сервера Let's Encrypt на наш сервер напрямую.

Да, я совсем забыл, что такой сертификат может быть выдан для одного домена и для одного поддомена. Это означает, что мы можем получить один общий сертификат для site1.ru и для www.site1.ru, что очень удобно, ибо это одно и то же. Но поддомен www.site1.ru не описан у нас в настройках nginx, а описан только домен site1.ru. Давайте опишем и поддомены для каждого из двух доменов. Итого у нас получится 4 раздела server:
» Кликните сюда для просмотра оффтоп текста.. «
То есть, два домена site1.ru и www.site1.ru ссылаются на один и тот же сайт, файлы которого расположены в папке /var/www/site1.ru.
А два домена site2.ru и www.site2.ru ссылаются на один и тот же сайт, файлы которого расположены в папке /var/www/site2.ru.
Проверяем в браузере — действительно всё так.
Теперь мы можем получить общий SSL-сертификат для каждого домена и его поддомена с "www". Но сервер службы Let's Encrypt будет обязательно проверять, действительно ли это наш сервер. Проверка происходит следующим образом... Программа-клиент, которую мы только что установили, в подкаталог нашего сайта запишет какие-то свои файлы, а затем сервер их службы зайдёт на наш сайт в этот подкаталог и убедится, что это те же самые файлы. Таким образом служба убедится, что сайт и программа-клиент расположены на одном и том же компьютере. Подкаталог, который создаст программа-клиент, называется ".well-known", и мы должны открыть доступ к этому каталогу клиентам сайта. Для этого в настройках веб-сервера nginx нужно добавить блок:
Код
    location ~ /.well-known {
        allow all;
    }
Такой блок нужно добавить для каждого раздела server. И это делается только на время получения сертификата, а затем этот блок можно будет удалить. В итоге файл /etc/nginx/sites-available/default будет содержать следующие настройки:
» Кликните сюда для просмотра оффтоп текста.. «

И теперь, когда мы всё подготовили, давайте получим сертификаты. Для этого введём в консоли следующую команду:
Код
letsencrypt certonly -a webroot --webroot-path /var/www/site1.ru -d site1.ru -d www.site1.ru
Программа получения сертификата запустится, попросит нас ввести e-mail (для получения уведомлений об истечении срока сертификата, если вы вдруг не захотите настроить автопродление) и согласиться с лицензионным соглашением. Вводим почту, соглашаемся с соглашением и нажимаем Enter. Программа "зависнет" на какое-то время, после чего с поздравлениями сообщит нам, что сертификат для сайта получен. Сертификат для одного нашего сайта site1.ru. Для другого сайта site2.ru сертификат получаем точно так же:
Код
letsencrypt certonly -a webroot --webroot-path /var/www/site2.ru -d site2.ru -d www.site2.ru

Продолжение следует...


--------------------


--------------------
Подарки: (Всего подарков: 41 )
Подарок
Подарил(а): льдинка
Подарок
Подарил(а): Фарит
Подарок
Подарил(а): Фарит




Go to the top of the pageGo to the end of the page
 
+Quote Post

7 страниц V  < 1 2 3 4 5 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




> Статистика
Board Stats

Подарок форуму

10 евро

100 евро

10000 евро

1000000eur

  


Текстовая версия Сейчас: 28.03.2024 - 17:25