# Установка и настройка Nginx на сервер с SSL и PHP

### Устанавливаем Nginx, выполнив следующую команду:

{% code lineNumbers="true" %}

```
apt-get install nginx -y
```

{% endcode %}

### Настройка Nginx

Переходим в sFTP по адресу `/etc/nginx/sites-available` и создаем файл `server_name.conf` (имя может быть любым), в который добавляем следующий текст, заменяя данные на свои:

{% code title="server\_name.conf" lineNumbers="true" %}

```
server {
    listen       *:80;
    server_name  u1host.com; # домен сайта
    client_max_body_size 1000M; # максимальный размер файла, переданного через сайт
    error_page 404 = @notfound;
    location / {
        root   /home/site/u1host; # путь до сайта
        try_files $uri $uri.html $uri/ @extensionless-php;
        index  index.html index.php;
    }
    # Подключения PHP, если не нужен, то стираем с 13 по 21 строку
    location ~ \.(php|html|htm)$ {
        try_files $uri =404;
        root   /home/site/u1host; # путь до сайта
        fastcgi_pass unix:/run/php/php7.0-fpm.sock; # путь до php 
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        include /etc/nginx/fastcgi_params;
    }
}
```

{% endcode %}

### Перезагружаем **Nginx**:

```
service nginx restart
```

### Подключение PHP к Nginx

{% hint style="info" %}
PHP не является обязательным для работы с Nginx. Включайте этот блок только для сайтов, которым необходимо выполнение PHP-скриптов.
{% endhint %}

#### Выполним следующие команды последовательно:

```
wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
echo "deb https://packages.sury.org/php/ stretch main" | tee /etc/apt/sources.list.d/php.list
sudo apt-get -y install php7.4 php7.4-{mcrypt,mysql,fpm}
```

### Перезагружаем **Nginx**:

```
service nginx restart
```

### Включение SSL (протокол шифрования)

{% hint style="info" %}
Является не обязательным пунктом, повышающим доверие к вашему сайту
{% endhint %}

### Редактируем ранее созданный конфигурационный файл, приводя его к следующему виду:

```
server {
    listen 80;
    server_name u1host.com; # домен сайта
    return 301 https://$server_name$request_uri; # редирект с http на https
}

server {
    listen 443 ssl http2;
    server_name u1host.com; # домен сайта

    root /var/www/u1host; # путь до сайта
    index index.html index.htm index.php; # индексные страницы

    access_log /var/log/nginx/u1host.app-access.log; # логи успешных подключений
    error_log  /var/log/nginx/u1host.app-error.log error; # логи ошибочных подключений

    # если требуется что-то отключить, вместо пути до файла пишем «off»

    client_max_body_size 1000m; # максимальный размер файла, переданного через сайт
    client_body_timeout 120s; # значение тайм-аута

    sendfile off; # после включения Nginx будет отправлять заголовки HTTP-ответов одним пакетом, а не отдельными частями.

    # SSL Configuration
    ssl_certificate /etc/letsencrypt/live/u1host.com/fullchain.pem; # публичный ключ SSL сертификата
    ssl_certificate_key /etc/letsencrypt/live/u1host.com/privkey.pem; # приватный ключ SSL сертификата
    ssl_session_cache shared:SSL:10m; # объем кеша сессий SSL
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384";
    ssl_prefer_server_ciphers on; # уменьшает время загрузки страниц сайта

    location ~ \.(php|html|htm)$ {
try_files $uri =404;
root /var/www/u1host; # путь до сайта
fastcgi_pass unix:/run/php/php7.2-fpm.sock; # путь до php файла
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include /etc/nginx/fastcgi_params;
    }
}
```

#### Перезагружаем **Nginx**:

```
service nginx restart
```

### Проверка на Apache2

{% hint style="info" %}
При одновременном использовании Nginx и Apache2 они будут конфликтовать за порт 80, что приведет к некорректной работе. Поэтому необходимо удалить один из веб-серверов.
{% endhint %}

#### Проверим наличие **Apache2**:

```
service apache2 status
```

{% hint style="info" %}
Если вы не увидите большое сообщение с информацией, значит **Apache2 не установлен.**
{% endhint %}

#### Для удаления **Apache2** пропишем:

```
apt-get remove --purge apache2* -y
```

### Удаление Nginx

Для удаления **Nginx** пропишем команду его **остановки**:

```
service nginx stop
```

И далее команду для полного **удаления Nginx**:

```
apt-get remove --purge nginx*
```

***

### Наши ресурсы

**Telegram-канал:** <https://t.me/u1host>\
**U1HOST:** [https://u1host.com](https://u1host.com/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://wiki.u1host.com/software-setup/nginx-installation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
