В предыдущей статье Arch Linux «LEMP» были рассмотрены только базовые вещи, от установки сетевых служб. (Nginx, база данных MySQL и PhpMyAdmin) и настройте минимальную безопасность, необходимую для сервера MySQL и PhpMyadmin.
Этот раздел строго связан с предыдущей установкой LEMP в Arch Linux и проведет вас через настройку более сложных конфигураций для стека LEMP, особенно Nginx конфигурации веб-сервера, например создание Виртуальные хосты, использовать Каталоги, защищенные паролем, создать и настроить Уровень защищенных сокетов HTTP, Небезопасный HTTP перенаправляет на HTTPS а также представлю вам несколько полезных сценариев Bash, которые облегчат работу по активации виртуальных хостов и созданию SSL-сертификат и ключи.
Установите LEMP с базой данных MariaDB в Arch Linux
Один из самых простых способов включить Виртуальные хосты использует включают операторы в основном файле конфигурации Nginx, что упрощает дальнейшую настройку. и эффективен, потому что вы можете создавать простые файлы для каждого нового хоста и сохранять основной файл конфигурации очиститель.
Этот подход работает так же, как и на Веб-сервер Apache, первое, что вам нужно сделать, это указать новый URI путь, по которому Nginx должен читать файловые директивы.
1. Итак, откройте nginx.conf основной файл, расположенный на /etc/nginx/ системный путь и внизу, перед последней фигурной скобкой «}»Добавьте путь, по которому будут располагаться будущие файлы конфигурации виртуального хоста.
$ sudo nano /etc/nginx/nginx.conf
Внизу добавьте следующее заявление.
включить /etc/nginx/sites-enabled/*.conf;
Эта директива сообщает Nginx, что он должен читать все файлы, которые находятся в /etc/nginx/sites-enabled/ это заканчивается .conf расширение.
2. Следующим шагом будет создание сайты с поддержкой каталог и еще один, называемый сайты-доступные, где вы храните все файлы конфигурации виртуальных хостов.
$ sudo mkdir / etc / nginx / sites-available / etc / nginx / sites-enabled
3. Пришло время создать новый виртуальный хост. В этом примере в качестве имени виртуального хоста будет использоваться IP-адрес системы, поэтому создайте новый файл с именем имя-ip.conf.
sudo nano /etc/nginx/sites-available/name-ip.conf
Добавьте следующий контент.
## Содержание файла ##сервер {слушать 80; имя_сервера 192.168.1.33; access_log /var/log/nginx/192.168.1.33.access.log; error_log /var/log/nginx/192.168.1.33.error.log; корень / SRV / http; местоположение / {index index.html index.htm index.php; автоиндекс включен; autoindex_exact_size выключен; autoindex_localtime on; } location / phpmyadmin {rewrite ^ / * / phpMyAdmin last; } расположение ~ \ .php $ {#fastcgi_pass 127.0.0.1:9000; (в зависимости от конфигурации вашего сокета php-fpm) fastcgi_pass unix: /run/php-fpm/php-fpm.sock; fastcgi_index index.php; включить fastcgi.conf; } }
Директива, активирующая виртуальный хост: имя сервера заявление под слушающим портом. Кроме того, здесь есть еще одна важная директива корень утверждение, которое указывает виртуальному хосту Nginx для обслуживания содержимого файла из /srv/http/ системный путь.
4. Последний шаг - создать /srv/http/ каталог и сделать имя-ip.conf конфигурацию файла, доступную для чтения Nginx (с использованием символической ссылки), затем перезапустите демон, чтобы сделать новые конфигурации видимыми.
$ sudo mkdir / srv / http / $ sudo ln -s /etc/nginx/sites-available/name-ip.conf / etc / nginx / sites-enabled / $ sudo systemctl перезапустить nginx
5. Чтобы проверить это, укажите в браузере IP-адрес системы Arch, и вы увидите, что веб-контент отличается от http://localhost. Здесь я добавил небольшой скрипт php, который также проверяет FastCGI PHP конфигурации как на скриншоте ниже.
$ sudo nano /srv/http/info.php
## Содержание файла ##php. phpinfo ();
6. Еще один метод, который я разработал для включения или отключения виртуальных хостов на Nginx, более элегантен и вдохновлен Apache. a2eniste сценарий.
Чтобы использовать этот метод, откройте редактор файлов и создайте новый файл с именем n2ensite, на ваше $ HOME путь с приведенным ниже содержимым, сделайте его исполняемым, запустите с привилегиями root и передайте в качестве опции вашему новому имени виртуального хоста без .conf окончание (заполните его, чтобы изменить в соответствии с вашими потребностями).
$ sudo nano n2ensite
## Содержание файла ###! / bin / bash. если test -d / etc / nginx / sites-available && test -d / etc / nginx / sites-enabled; потом. эхо "" еще. mkdir / etc / nginx / sites-available. mkdir / etc / nginx / sites-enabled. fi avail = / etc / nginx / sites-available / $ 1.conf. включен = / etc / nginx / sites-enabled / site = `ls / etc / nginx / sites-available /` если ["$ #"! = "1"]; затем echo "Use script: n2ensite virtual_site" echo -e "\ nAvailable virtual hosts: \ n $ site" exit 0. иначе, если test -e $ avail; потом. sudo ln -s $ avail $ включен. еще. echo -e "Виртуальный хост $ avail не существует! Создайте его! \ N $ site " выход 0. fi. если test -e $ enabled / $ 1.conf; потом. echo "Успех!! Теперь перезапустите сервер nginx: sudo systemctl restart nginx " еще. echo -e "Виртуальный хост $ avail не существует! \ nПросмотрите доступные виртуальные хосты: \ n $ site" выход 0. fi. фи
Сделайте его исполняемым и запустите как показано.
$ sudo chmod + x n2ensite. $ sudo ./n2ensite your_virtual_host
7. Чтобы отключить виртуальные хосты, создайте новый n2диссит файл со следующим содержимым и примените те же настройки, что и выше.
$ sudo nano n2dissite
## Содержание файла ###! / bin / bash. avail = / etc / nginx / sites-enabled / $ 1.conf. enabled = / etc / nginx / sites-enabled. site = `ls / etc / nginx / sites-enabled /` если ["$ #"! = "1"]; затем echo "Use script: n2dissite virtual_site" echo -e "\ nAvailable virtual hosts: \ n $ site" exit 0. еще. если test -e $ avail; потом. sudo rm $ avail. еще. echo -e "Виртуальный хост $ avail не существует! Выход! " выход 0. fi. если test -e $ enabled / $ 1.conf; потом. echo "Ошибка!! Не удалось удалить виртуальный хост $ avail! " еще. echo -e "Успех! $ avail удален! \ nПерезапустите Nginx: sudo systemctl restart nginx " выход 0. fi. фи
8. Теперь вы можете использовать эти два сценария для включения или отключения любого виртуального хоста, но если вы хотите применить его как общесистемные команды, просто скопируйте оба сценария в /usr/local/bin/ а затем вы можете использовать его без указания пути.
$ sudo cp n2ensite n2dissite / usr / local / bin /
SSL (Уровень защищенных гнезд) - это протокол, предназначенный для шифрования HTTP-соединений через сети или Интернет, что делает поток данных передается по защищенному каналу с использованием симметричных / асимметричных ключей шифрования и предоставляется в Arch Linux компанией Пакет OpenSSL.
$ sudo pacman -S openssl
9. Чтобы включить HTTPS-соединения с Nginx, первое, что вам нужно сделать, - это сгенерировать ключи виртуальных хостов. Кроме того, чтобы упростить задачу, я разработал небольшой скрипт, который автоматически генерирует криптографические ключи на /etc/nginx/ssl путь к каталогу с использованием имен виртуальных хостов в качестве имен ключей.
Создайте файл с именем nginx_gen_ssl и добавьте следующий контент.
$ sudo nano nginx_gen_ssl
## Содержание файла ###! / bin / bash. mkdir / и т. д. / nginx / ssl. cd / etc / nginx / ssl echo -e "Введите полное доменное имя виртуального хоста: \ nЭто сгенерирует имя по умолчанию для SSL-сертификата Nginx!" прочитать сертификат openssl genpkey -алгоритм RSA -pkeyopt rsa_keygen_bits: 2048 -out $ cert.key. chmod 600 $ сертификат. openssl req -new -key $ cert.key -out $ cert.csr. openssl x509 -req -days 365 -in $ cert.csr -signkey $ cert.key -out $ cert.crt echo -e "Сертификат $ cert был создан! \ nПожалуйста, свяжите его с веб-сайтом, доступным по ssl nginx!" ls -all / и т.д. / nginx / ssl. выход 0
10. После создания сценария добавьте разрешения на выполнение, запустите его и укажите параметры сертификата, наиболее важным из которых является Распространенное имя (добавьте сюда официальное доменное имя) и оставьте поля Пароль и Необязательная компания пустыми.
$ sudo chmod + x nginx_gen_ssl. $ sudo ./nginx_gen_ssl
В конце задачи генерации ключей будет отображен список со всеми доступными ключами в каталоге ssl Nginx.
Также, если вы хотите, чтобы этот сценарий использовался как системная команда, скопируйте или переместите его в /usr/local/bin/.
$ sudo mv nginx_gen_ssl / usr / местный / бен
11. После того, как мы сгенерировали ключи, необходимые для виртуального хоста SSL Nginx, самое время создать файл конфигурации виртуального хоста SSL. Используйте тот же системный IP-адрес для виртуального хоста, как указано выше на имя сервера директиву, но немного измените имя файла виртуального хоста, добавив ssl перед .conf, чтобы напомнить вам, что этот файл означает имя-ip Виртуальный хост SSL.
$ sudo nano /etc/nginx/sites-availabe/name-ip-ssl.conf
При изменении этого файла Слушать заявление о переносе на 443 ssl и укажите пути к файлам ключей SSL и сертификатов с уже созданными, чтобы они выглядели как в приведенном ниже фрагменте.
## Содержание файла ##сервер {слушать 443 ssl; имя_сервера 192.168.1.33; ssl_certificate /etc/nginx/ssl/192.168.1.33.crt; ssl_certificate_key /etc/nginx/ssl/192.168.1.33.key; ssl_session_cache общий: SSL: 1 м; ssl_session_timeout 5 мин; ssl_ciphers HIGH:! aNULL:! MD5; ssl_prefer_server_ciphers на; access_log /var/log/nginx/192.168.1.33-ssl.access.log; error_log /var/log/nginx/192.168.1.33-ssl.error.log; корень / SRV / http; местоположение / {index index.html index.htm index.php; автоиндекс включен; autoindex_exact_size выключен; autoindex_localtime on; } location / phpmyadmin {rewrite ^ / * / phpMyAdmin last; } расположение ~ \ .php $ {#fastcgi_pass 127.0.0.1:9000; (в зависимости от конфигурации вашего сокета php-fpm) fastcgi_pass unix: /run/php-fpm/php-fpm.sock; fastcgi_index index.php; включить fastcgi.conf; } }
12. После создания файла используйте n2ensite сценарий или пер командная строка для его активации (создает символическую ссылку на файл в сайты с поддержкой каталог), затем перезапустите демон Nginx, чтобы применить настройки.
$ sudo ./n2ensite имя-ip-ssl. ИЛИ. $ sudo ln -s /etc/nginx/sites-available/name-ip-ssl.conf / etc / nginx / sites-enabled / $ sudo systemctl перезапустить nginx
13. Снова укажите в браузере Arch IP URL но на этот раз по протоколу HTTPS - https://192.168.1.33 в моей системе и Соединение ненадежное должна появиться ошибка безопасности ( Добавить и подтвердить исключение безопасности идти дальше по странице).
Как вы теперь можете видеть, ваш виртуальный хост Nginx обслуживает тот же контент, что и предыдущий. имя-ip host, но на этот раз с использованием защищенного HTTP-соединения.
Если виртуальный хост включен на Nginx, у нас больше нет доступа к http://localhost содержимое пути (localhost обычно обслуживает контент, используя IP-адрес обратной связи или системный IP-адрес, если он не настроен иначе), потому что мы использовали IP-адрес системы Arch как имя сервера Итак, наш путь к контенту изменился.
14. Самый простой способ получить доступ к PhpMyAdmin через Интернет - это создание символической связи между /usr/share/webapps/phpMyAdmin/ путь и наш новый определенный путь виртуального хоста (/srv/http).
$ sudo ln -s / usr / share / webapps / phpMyAdmin / / SRV / http /
15. После того, как вы выполнили указанную выше команду, обновите свою страницу, и вы увидите новую папку phpMyAdmin, если автоиндекс оператор включен на виртуальном хосте Nginx или укажите свой URL-адрес прямо в папку PhpMyAdmin https://arch_IP/phpMyAdmin.
16. Если вы хотите очистить строку phpMyAdmin в браузере, отредактируйте файлы виртуальных хостов и добавьте следующий контент в блок сервера.
расположение / phpmyadmin {rewrite ^ / * / phpMyAdmin last; }
В отличие от Apache, Nginx использует HttpAuthBasic модуль для включения Каталоги, защищенные паролем но не предоставляет никаких инструментов для создания зашифрованного .htpasswd файл.
17. Чтобы обеспечить защиту паролем каталога с помощью Nginx в Arch Linux, установите веб-сервер Apache и используйте его инструменты для создания зашифрованного .htaccess файл.
$ sudo pacman -S apache
18. После установки Apache создайте новый каталог в /etc/nginx/ назван интуитивно passwd, где .htpasswd файл будет храниться и использоваться htpasswd команда с –C включите первого добавленного пользователя для создания файла, затем, если вы хотите добавить больше пользователей, используйте htpasswd без –C выключатель.
$ sudo mkdir / etc / nginx / passwd $ sudo htpasswd -c /etc/nginx/passwd/.htpasswd first_user. $ sudo htpasswd /etc/nginx/passwd/.htpasswd second_user. $ sudo htpasswd /etc/nginx/passwd/.htpasswd third_user
19. Для защиты имя-ip-ssl Корень виртуального хоста /srv/http/ обслуживаемый путь со всеми его подпапками и файлами под ним, добавьте следующие инструкции в блок сервера виртуального хоста под корневой директивой и укажите его на абсолютный .htpasswd Путь к файлу.
auth_basic «Веб-сайт с ограниченным доступом»; auth_basic_user_file /etc/nginx/passwd/.htpasswd;
20. После перезапуска службы Nginx обновите страницу и Требуется авторизация должно появиться всплывающее окно с запросом ваших учетных данных.
Теперь вы успешно включили Nginx. Каталоги, защищенные паролем но имейте в виду, что в то же время в вашей системе установлен веб-сервер Apache, поэтому убедитесь, что он остается отключенным, и ни в коем случае не запускайте его, потому что это может привести к конфликту портов с Nginx.
21. Если вы хотите, чтобы браузеры автоматически перенаправляли все небезопасные HTTP-запросы на протокол HTTPS, открывайте и редактируйте, вы не-SSL Виртуальный хост и добавьте следующую инструкцию в имя сервера директива.
переписать ^ https://$server_name$request_uri? постоянный;
Все настройки, представленные в этой статье, сделаны под Arch Linux система, которая действует как сервер, но большинство из них, особенно те, которые касаются файлов конфигурации Nginx, доступны в большинстве систем Linux с небольшими отличиями.