Настройка Nginx (веб-сервер и обратный прокси-сервер) + и Apache в Ubuntu

Системный администратор должен уметь настраивать эффективные сборки для сайтов...

 

Настройка Nginx (веб-сервер и обратный прокси-сервер) + и Apache в Ubuntu  - это эффективная и популярная сборка, которая часто применяется, когда нужно на одном сервере установить 2 и более сайтов. 

В данном случае запросы идут на 80 порт, который обрабатывает Nginx, далее идут на Apache - который обрабатывает бэкенд. Модуль Apache - mod_rpaf - позволяет подменять переменные сервера и создается ощущение, что все как бы работает на Apache. Но Nginx обрабатывает быстрее большое количество запросов, поэтому его ставят на вход.

Мы настроим два домена test1.ru и test2.ru для примера. Для обслуживания PHP - в Apache будет настроен PHP-FPM, который более производительный чем mod_php.

 Что потребуется:

1 шаг - Установка Apache и PHP-FPM

Помимо Apache и PHP-FPM мы также установим модуль PHP FastCGI Apache, libapache2-mod-fastcgi, для поддержки веб-приложений FastCGI.

 

Обновим список пакетов

sudo apt update

 

Установим Apache и PHP-FPM:

sudo apt install apache2 php-fpm

 

Модуль FastCGI Apache недоступен в хранилище Ubuntu, и поэтому грузим его с kernel.org и устанавливаем с помощью команды dpkg.

 

wget https://mirrors.edge.kernel.org/ubuntu/pool/multiverse/liba/libapache-mod-fastcgi/libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb


sudo dpkg -i libapache2-mod-fastcgi_2.4.7~0910052141-1.2_amd64.deb

 

Шаг 2 — Настройка Apache и PHP-FPM

Для использования PHP-FPM необходимо поменять конфигурацию Apache:

Для начала настроим порт 8080 и только потом будем переходить к 80 порту.

Давайте изменим номер порта Apache на 8080 и настроим его для работы с PHP-FPM с использованием модуля mod_fastcgi. Переименуем файл конфигурации Apache ports.conf:

sudo mv /etc/apache2/ports.conf /etc/apache2/ports.conf.default

 

Создаем новый файл ports.conf и установите в нем порт 8080:

echo "Listen 8080" | sudo tee /etc/apache2/ports.conf

 

Отключаем виртуальный хост по умолчанию:

sudo a2dissite 000-default

 

Далее создаем новый файл виртуального хоста, используя существующий сайт по умолчанию:

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

 

Вместо этого 001-default.conf можно использовать название домена, если у вас много сайтов, но для начала, чтобы не запутаться лучше сделайте также.

 

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

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

 

Меняем порт на 8080:

<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

 

Сохраняем файл и активируем его - это новый файл конфигурации:

sudo a2ensite 001-default

 

Перезагружаем Apache:

sudo systemctl reload apache2

 

Проверяем, что Apache слушает именно 8080 порт:

sudo netstat -tlpn

 

будет что-то такое:

tcp6 0 0 :::8080 :::* LISTEN 4678/apache2

 

 

Только убедившись в этом, переходим к настройке поддержки PHP и FastCGI.

Шаг 3 — Настройка Apache для использования mod_fastcgi

Мы добавим блок конфигурации для mod_fastcgi, который зависит от mod_action.

 

По умолчанию Apache обслуживает запросы от PHP по модулю mod_php  , но для работы с PHP-FPM его необходимо донастроить. Мы добавим настройку mod_fastcgi, который как раз зависит от mod_php.

 

 

По умолчанию mod_action отключен, и предварительно его нужно включить, поэтому делаем это:

sudo a2enmod actions

 

Переименуем существующий файл конфигурации FastCGI (на всякий случай):

sudo mv /etc/apache2/mods-enabled/fastcgi.conf /etc/apache2/mods-enabled/fastcgi.conf.default

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

sudo nano /etc/apache2/mods-enabled/fastcgi.conf

 

Прописываем следующие директивы для передачи запросов файлов .php в сокет PHP-FPM UNIX:

<IfModule mod_fastcgi.c>
    AddHandler fastcgi-script .fcgi
    FastCgiIpcDir /var/lib/apache2/fastcgi
    AddType application/x-httpd-fastphp .php
    Action application/x-httpd-fastphp /php-fcgi
    Alias /php-fcgi /usr/lib/cgi-bin/php-fcgi
    FastCgiExternalServer /usr/lib/cgi-bin/php-fcgi -socket /run/php/php8.1-fpm.sock -pass-header Authorization
    <Directory /usr/lib/cgi-bin>
        Require all granted
    </Directory>
</IfModule>

 

 Обратите внимание на php8.1-fpm - тут должна быть ваша версия, иначе работать не будет.

 Сохраняемся и проверяем файл настройки:

sudo apachectl -t

Если ок, то перезагружаем:

sudo systemctl reload apache2

 

Обратите внимание: ошибка может быть вида "Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message" - ничего страшного, ниже мы донастроим имена серверов.

 

Шаг 4 — Проверка функционала PHP

Ну вот, пришла пора тестировать работает ли PHP, обычно это делается банально просто устанавливают функцию phpinfo() , мы сделаем также:

Создаем файл /var/www/html/info.php, вызывающий функцию phpinfo:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

 

Чтобы посмотреть на результат, открываем браузер и вбиваем http://your_server_ip:8080/info.php

Главное, что тут нужно посмотреть:

  • Server API - со значением FPM/FastCGI
  • Раздел «Переменные PHP» ниже должен покзаать, что параметр SERVER_SOFTWARE имеет значение Apache на Ubuntu. Это означает, что модуль mod_fastcgi успешно активирован и уже работает, и что Apache использует PHP-FPM для обработки файлов PHP.

 

Шаг 5 — Создание виртуальных хостов для Apache

Для начала создаем файлы виртуальных хостов Apache для доменов test1.ru и test2.ru. Для этого мы создадим корневые каталоги документов document root для обоих сайтов и разместим в эти каталоги файлы - для легкого теста нашего конфига.

Создадим корневые каталоги документа:

sudo mkdir -v /var/www/test1.ru /var/www/test2.ru

 

Создадим еще index файлы 

echo "<h1 style='color: green;'>Foo Bar</h1>" | sudo tee /var/www/test1.ru/index.html
echo "<h1 style='color: red;'>Test IO</h1>" | sudo tee /var/www/test2.ru/index.html

 

Создаем info.php также для каждого сайта

echo "<?php phpinfo(); ?>" | sudo tee /var/www/test1.ru/info.php
echo "<?php phpinfo(); ?>" | sudo tee /var/www/test2.ru/info.php

 

Далее создаем файл виртуального хоста для домена test1.ru

sudo nano /etc/apache2/sites-available/test1.ru.conf

и вставьте это (табы вставьте или 4 пробела для красоты)

<VirtualHost *:8080>
    ServerName test1.ru
    ServerAlias www.test1.ru
    DocumentRoot /var/www/test1.ru
    <Directory /var/www/test1.ru>
        AllowOverride All
    </Directory>
</VirtualHost>

Строка AllowOverride All активирует поддержку .htaccess.

Тут будет полная настройка хостов Apache в Ubuntu

А далее создайте также файл виртуального хоста для домена test2.ru

 

Теперь, когда мы создали оба виртуальных хоста Apache, разрешим сайтам использовать команду a2ensite. Это создаст символическую связь с файлом виртуального хоста в каталоге sites-enabled:

sudo a2ensite test1.ru
sudo a2ensite test2.ru

 

Как обычно, проверяем настройки Apache - на наличие ошибок:

sudo apachectl -t

Если пишет Syntax Ok , тогда перезагружаем Апач

sudo systemctl reload apache2

 

Чтобы убедиться, что все ок, переходим в браузер и открываем ссылки http://test1.ru:8080 и http://test2.ru:8080 и убедитесь, что для каждого из сайтов отображается файл index.html.

И смотрим http://test1.ru:8080/info.php  и http://test2.ru:8080/info.php

 

Ну все, первую часть мы сделали и настроили порт 8080 на отображение результатов работы Apache, далее настроим Nginx , а потом и их связку.

 

Шаг 6 — Установка и настройка Nginx

В данном шаге мы установим Nginx и создадим виртуальные хосты для наших двух доменов (тут будет полное руководство чуть позже).

Установим Nginx:

sudo apt install nginx

 

Удалим symlink по умолчанию виртуального хоста, поскольку нам он не нужен и мы не будем его использовать:

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

 

Виртуальные хосты для Nginx создаются аналогично Apache и для начала создадим нужные каталоги для наших сайтов:

sudo mkdir -v /usr/share/nginx/test1.ru /usr/share/nginx/test2.ru

 

Nginx требует хранить сайты тут /usr/share/nginx так мы и сделаем, хотя в конце нашего мануала сайт будет браться с разделов, который требует Apache - /var/www/html .

 

Также, пока что, для проверки работоспособности создадим тут файлы index.html и info.php

echo "<h1 style='color: green;'>Example.com</h1>" | sudo tee /usr/share/nginx/test1.ru/index.html
echo "<h1 style='color: red;'>Sample.org</h1>" | sudo tee /usr/share/nginx/test2.ru/index.html
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/test1.ru/info.php
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/test2.ru/info.php

 

Создаем файлы виртуального хоста Nginx:

sudo nano /etc/nginx/sites-available/test1.ru

 

Nginx обрабатывает директивы server и так как его мы назначаем "на вход", то есть изначально он будет принимать запросы, то прописываем default_server configuration - что делает его виртуальным хостом по умолчанию для обработки запросов HTTP.

server {
    listen 80 default_server;
    root /usr/share/nginx/test1.ru;
    index index.php index.html index.htm;
    #server_name test1.ru www.test1.ru; #эту строчку почему то закомментировали и заработало - тут вопрос пока у меня тоже
    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        include snippets/fastcgi-php.conf;
    }
}

 

Аналогичный файл создаем и для test2.ru

 

После сохранения файлов, активируем наши сайты с помощью символических ссылок:

sudo ln -s /etc/nginx/sites-available/test1.ru /etc/nginx/sites-enabled/test1.ru
sudo ln -s /etc/nginx/sites-available/test2.ru /etc/nginx/sites-enabled/test2.ru

 

Тестируем все ли норм:

sudo nginx -t

 

Перезагружаем, если нет ошибок:

sudo systemctl reload nginx

 

Настало время тестировать, переходим по адресу http://test.ru/info.php - должна отработать функция phpinfo().

Смотрим раздел PHP Variables:

  • [SERVER_SOFTWARE] должен иметь значение nginx, указывая, что файлы обслуживются Nginx напрямую.
  • [DOCUMENT_ROOT] - должен соответствовать нашему значению /usr/share/nginx/test1.ru

!!! тут работать скорее всего не будет, надо еще разрешить 80 порта в firewall 

ufw allow 80

 

Шаг 7 — Настройка Nginx для виртуальных хостов Apache

Пришло время подружить Nginx и Apache.

Создадим дополнительный виртуальный хост Nginx с несколькими именами доменов в директивах server_name. Запросы этих доменов будут перенаправляться через прокси-сервер в Apache.

Создаем новый файл виртуального хоста Nginx для перенаправления запросов в Apache:

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

 

server {
    listen 80;
    server_name test1.ru www.test1.ru test2.ru www.test2.ru;
  location / {
        proxy_pass http://your_server_ip:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

 

тут your_server_ip - ставим ip сервера.

Создаем симлинк для активации нового файла виртуального хоста:

sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache

 

Тестируем и перезапускаем:

sudo nginx -t

 

если ошибок нет:

sudo systemctl reload nginx

 

Открываем браузер и URL-адрес http://test1.ru/info.php. Смотрим раздел PHP Variables и в этот раз видим:

  • SERVER_SOFTWARE - теперь указывает на Апач
  • а DOCUMENT_ROOT - на /var/www/test1.ru

 

Таким образом, мы понимаем, что запрос был обработан Apache.

Переменные HTTP_X_REAL_IP и HTTP_X_FORWARDED_FOR были добавлены Nginx и должны показывать публичный IP-адрес компьютера, используемого для доступа к URL-адресу.

Основную часть закончили и вот итог:

Мы успешно настроили Nginx для перенаправления запросов определенных доменов в Apache через прокси-сервер.

Далее сделаем немного маскировки и настроим Apache для установки переменной REMOTE_ADDR, как если бы эти запросы обрабатывались напрямую.

Шаг 8 — Установка и настройка mod_rpaf

Нам нужно перезаписать переменные REMOTE_ADDR, HTTPS и HTTP_PORT  на базе значений, предоставленных обратным прокси-сервером., чтобы это работало бесшовно - и в этом нам поможет модуль Apache под названием mod_rpaf (Ubuntu как libapache2-mod-rpaf - устаревшая версия)

Для работы модуля установим необходимые пакеты:

sudo apt install unzip build-essential apache2-dev

 

Загружаем  последний стабильный выпуск из GitHub:

wget https://github.com/gnif/mod_rpaf/archive/stable.zip

 

Извлекаем:

unzip stable.zip

 

Переходим в новый каталог:

cd mod_rpaf-stable

 

Компилируем и устанавливаем файлы:

make
sudo make install

 

Создадим в каталоге mods-available файл, который будет загружать модуль rpaf,

sudo nano /etc/apache2/mods-available/rpaf.load

 

со следующим содержимым:

LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so

 

Сохраняемся и создаем в этом каталоге другой файл с именем rpaf.conf, который будет содержать директивы конфигурации для mod_rpaf:

sudo nano /etc/apache2/mods-available/rpaf.conf

 

<IfModule mod_rpaf.c>
    RPAF_Enable On
    RPAF_Header X-Real-Ip
    RPAF_ProxyIPs your_server_ip
    RPAF_SetHostName On
    RPAF_SetHTTPS On
    RPAF_SetPort On
</IfModule>

 

где:

  • RPAF_Header — заголовок, используемый для реального IP-адреса клиента.
  • RPAF_ProxyIPs — IP-адрес прокси-сервера для корректировки запросов HTTP.
  • RPAF_SetHostName — обновляет имя vhost так, чтобы работали параметры ServerName и ServerAlias.
  • RPAF_SetHTTPS — задает переменную среды HTTPS на основе значения, содержащегося в X-Forwarded-Proto.
  • RPAF_SetPort — задает переменную среды SERVER_PORT. Полезна для использования, когда сервер Apache находится за прокси-сервером SSL.

не забываем заменить your_server_ip - на адрес вашего сервера.

Описание переменных - https://github.com/gnif/mod_rpaf/blob/stable/README.md#configuration-directives

 

Сохраняем rpaf.conf и активируйте модуль:

sudo a2enmod rpaf

 

При этом создаются символические ссылки файлов rpaf.load и rpaf.conf в каталоге mods-enabled.

Тестим:

sudo apachectl -t

 

Если нет ошибок, то перезагружаем:

sudo systemctl reload apache2

 

Проверим все ли верно, для этого откроем в браузере страницы phpinfo() по адресам http://test1.ru/info.php и http://test2.ru/info.php и проверьте раздел PHP Variables. Тут должно кое-что измениться, а именно - переменная REMOTE_ADDR также будет использоваться для публичного IP-адрса вашего локального компьютера.

Следующим шагом настроим шифрование TLS/SSL для каждого сайта - чтобы наши сайты были более защищенными.

 

Шаг 9 — Настройка сайтов HTTPS с Let’s Encrypt

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

Nginx поддерживает конечные узлы SSL, и поэтому мы можем настроить SSL без изменения файлов конфигурации Apache. Модуль mod_rpaf обеспечивает установку в Apache переменных среды, необходимых для бесшовной работы приложений за обратным прокси-сервером SSL.

Вначале мы разделим блоки server обоих доменов так, что у каждого из них будет собственный сертификат SSL. Откройте в своем редакторе файл /etc/nginx/sites-available/apache:

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

и наполним его таким содержимым:

server {
    listen 80;
    server_name test1.ru www.test1.ru;
 
     location / {
        proxy_pass http://your_server_ip:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
 
 server {
    listen 80;
    server_name test2.ru www.test2.ru;
 
     location / {
        proxy_pass http://your_server_ip:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

 

 

не забудьте подставить свои значения тут your_server_ip

 

Наиболее простое решение для генерации сертификатов TLS/SSL - это модуль Certbot. 

Плагин САМОСТОЯТЕЛЬНО изменит конфигурацию Nginx и перезагрузит ее, когда это потребуется.

Добавим официальное хранилище Certbot:

sudo add-apt-repository ppa:certbot/certbot

 

Нажмите ENTER в диалоге, чтобы подтвердить добавление нового хранилища.

 

Обновим список пакетов

sudo apt update

 

Установим пакет Certbot’s Nginx с apt:

sudo apt install python-certbot-nginx

!!! если у вас ubuntu 20 и выше, то команда будет такая: sudo apt install certbot python3-certbot-nginx

 

После установки используем команду certbot для генерирования сертификатов для наших доменов:

sudo certbot --nginx -d test1.ru -d www.test1.ru

в первый раз будет выведена просьба указать email , и далее подтвердить условия обслуживания.

 

Далее Certbot запросит желаемый вариант настройки HTTPS:

Output
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
-------------------------------------------------------------------------------
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

 

я тут не помню, что выбирал, даже вроде просто Enter нажал, но у меня все обновилось...по идее надо нажимать 2 - чтобы все прописалось и была автоматическая переадрессация на защищенное соединение https. После нажать Enter и будет перезагрузка Nginx с автопропиской новых параметров - а именно путей расположения ключей.

Но в целом получается обычные шаред хостинги оставляет видимо цифру 1 , а потом пользователи уже сами редирект настраивают в .htaccess  - так что я видимо также сделал.

 

Теперь откроем сайт по адресу  https://test1.ru/info.php и видим, что по защищенному https у нас открывается сайт - это круто!

и в PHP Variables для переменной SERVER_PORT задано значение 443 и протокол HTTPS включен, как если бы осуществлялся прямой доступ к Apache через HTTPS. При такой настройке переменных не нужно специально настраивать приложения PHP для работы за обратным прокси-сервером.

Далее отключим прямой доступ к Apache.

 

Шаг 10 — Блокировка прямого доступа к Apache

Поскольку Apache прослушивает порт 8080 на публичном IP-адресе, он доступен кому угодно - это нам не нужно, мы за безопасность. Его можно заблокировать с помощью следующей команды IPtables в наборе правил брандмауэра.

sudo iptables -I INPUT -p tcp --dport 8080 ! -s your_server_ip -j REJECT --reject-with tcp-reset

 

Проверяем и смотрим, что сайт уже перестал быть доступным по порту 8080:

http://example.com:8080

 

Далее один из последних шагов - настроим Nginx для обслуживания статических файлов для сайтов Apache.

Шаг 11 — Обслуживание статических файлов с помощью Nginx 

Когда Nginx перенаправляет запросы доменов Apache через прокси-сервер, каждый запрос файла этого домена отправляется в Apache. Nginx обслуживает статические файлы, такие как изображения, JavaScript и таблицы стилей, быстрее Apache. Поэтому мы настроим файл виртуального хоста Nginx apache для прямого обслуживания статических файлов и перенаправления запросов PHP в Apache.

Откроем для редактирования  /etc/nginx/sites-available/apache:

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

 

Пропишем дополнительные location для поиска статики и слегка поправим существующий:

1 вариант - без использование SSL и TLS - кому только он может понадобиться сегодня? ведь без https сайты поисковики недолюбливают

server {
    listen 80;
    server_name test1.ru www.test1.ru;
    root /var/www/test1.ru;
    index index.php index.htm index.html;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        proxy_pass http://your_server_ip:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /\.ht {
        deny all;
    }
}

server {
    listen 80;
    server_name test2.ru www.test2.ru;
    root /var/www/test2.ru;
    index index.php index.htm index.html;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        proxy_pass http://your_ip_address:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /\.ht {
        deny all;
    }

 


}

 

2 вариант - для SSL и TLS - этот используем в большинстве современных сайтов

server {
    listen 80;
    server_name test1.ru www.test1.ru;
    root /var/www/test1.ru;
    index index.php index.htm index.html;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        proxy_pass http://your_server_ip:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /\.ht {
        deny all;
    }

 

    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/test1.ru/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/test1.ru/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;


}

server {
    listen 80;
    server_name test2.ru www.test2.ru;
    root /var/www/test2.ru;
    index index.php index.htm index.html;

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        proxy_pass http://your_ip_address:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /\.ht {
        deny all;
    }

 

    listen 443 ssl;
        ssl_certificate /etc/letsencrypt/live/test2.ru/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/test2.ru/privkey.pem;
        include /etc/letsencrypt/options-ssl-nginx.conf;
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

 

 Обратите внимание:

  • Директива try_files указывает Nginx искать файлы в корне документа document root и выводить их напрямую. Если файл имеет расширение .php, запрос перенаправляется в Apache. Даже если файл отсутствует в document root, запрос перенаправляется в Apache, чтобы функции приложения (например, постоянные ссылки) работали без проблем.
  • Директива location ~ /\.ht очень важна, поскольку она не дает Nginx выводить содержимое файлов конфигурации Apache с важными данными, таких как .htaccess и .htpasswd.

 

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

sudo nginx -t

 

Перезапуск:

sudo service nginx reload

 

Чтобы убедиться, что все работает смотрим файлы журнала Apache в каталоге /var/log/apache2 и запросы GET для файлов info.php сайтов наших доменов. Использовать можно команду tail для просмотра последних нескольких строк файла и параметр -f для просмотра изменений файла:

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

 

Вроде бы и все настроили, но нет...я загрузил движок своего сайта на хостинг и он отказывался работать, так как в нем были файлы htaccess и в нем была директива mod_rewrite. После его установки, я установил сервер базы данных mysql и залил базу и все заработало.

 

 

 

Более старые статьи:

Добавить комментарий


Защитный код
Обновить

Вы здесь: Сайтостроение Сисадмин Настройка Nginx (веб-сервер и обратный прокси-сервер) + и Apache в Ubuntu