Link Search Menu Expand Document
17 Марта 2024 г.

Установка nginx перед apache

Содержание

Ставим apache

Можно поставить и последнюю версию, но мы поставим ту что есть в репозиториях.

# Установка
sudo apt install apache2
# Старт и включение сервиса
sudo systemctl start apache2
sudo systemctl enable apache2
# Проверка статуса
service apache2 status

Добавляем виртуальный хост

Сразу прописываем хост и порт 127.0.0.1:8080

# /etc/apache2/sites-available/crm.prod.conf
<VirtualHost 127.0.0.1:8080>
        ServerName crm.prod
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/crm.prod/public/
        ErrorLog ${APACHE_LOG_DIR}/error.crm.prod.log
        CustomLog ${APACHE_LOG_DIR}/access.crm.prod.log combined
        <Directory /var/www/crm.prod/public/>
                Options -Includes -Indexes -ExecCGI
                AllowOverride All
        </Directory>
</VirtualHost>

Создаем пользователя для хоста

sudo useradd -m crm
sudo passwd crm
superpass
sudo chsh -s /bin/bash crm

Далее создаем папки и файлы проекта от созданного пользователя.

Меняем сразу порт, чтобы nginx не ругался

# /etc/apache2/ports.conf
Listen 127.0.0.1:8080

Включаем хост и перезапускаем сервер

sudo a2ensite crm.prod.conf
sudo systemctl reload apache2

Ставим nginx

Поставим последнюю стабильную версию. Команды с официального сайта

sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx
sudo apt update
sudo apt install nginx
# Запускаем
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

Конфиг хоста для 80 порта

server {
        server_name crm.prod;
        charset off;
        index index.php;
        access_log /var/log/nginx/crm.prod.access.log;
        error_log /var/log/nginx/crm.prod.error.log notice;
        ssi on;
        set $root_path /var/www/crm.prod/public;
        root $root_path;
        location / {
                location ~ [^/]\.ph(p\d*|tml)$ {
                        try_files /does_not_exists @fallback;
                }
                location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
                        expires 24h;
                        try_files $uri $uri/ @fallback;
                }
                location / {
                        try_files /does_not_exists @fallback;
                }
                location ~ /\.ht {
                               deny all;
                }

    }
        location @fallback {
                                proxy_pass http://127.0.0.1:8080;
                                proxy_redirect http://127.0.0.1:8080 /;
                                proxy_set_header Host $host;
                                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                proxy_set_header X-Real-IP $remote_addr;
                                proxy_set_header X-Forwarded-Proto $scheme;
                                proxy_set_header X-Forwarded-Port $server_port;
                                access_log off;
        }
        listen 80;
}

Php

Ставим php нужной нам версии

sudo add-apt-repository ppa:ondrej/php
sudo apt-get install php7.1
php -v

Перезагружаем nginx и apache

sudo service nginx restart
sudo systemctl reload apache2

Проверяем хост уже все должно работать

Но счастье было бы не полным если у нас нет ssl сертификата.

SSL

Создадим самоподписанный сертификат и сохраним ключи по нужным на путям

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/crm.prod.key -out /etc/ssl/certs/crm.prod.pem

Добавим еще одну директиву server в наш конфиг nginx и включим http2 что идет из коробки

server {
        ssl_certificate /etc/ssl/certs/crm.prod.pem;
        ssl_certificate_key /etc/ssl/private/crm.prod.key;
        ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
        ssl_prefer_server_ciphers on;
        add_header Strict-Transport-Security "max-age=31536000;";
        ssl_protocols  TLSv1.2 TLSv1.3;
        charset off;
        index index.php;
        disable_symlinks if_not_owner from=$root_path;
        access_log /var/log/nginx/crm.prod.access.log;
        error_log /var/log/nginx/crm.prod.error.log notice;
        ssi on;
        set $root_path /var/www/crm.prod/public;

        root $root_path;
                location / {
                        location ~ [^/]\.ph(p\d*|tml)$ {
                                try_files /does_not_exists @fallback;
                }
                        location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
                        expires max;
                        try_files $uri $uri/ @fallback;
                }

                        location / {
                                try_files /does_not_exists @fallback;
                }
                        location ~ /\.ht {
                               deny all;
                }

        }
        location @fallback {
                                proxy_pass http://127.0.0.1:8080;
                                proxy_redirect http://127.0.0.1:8080 /;
                                proxy_set_header Host $host;
                                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                proxy_set_header X-Real-IP $remote_addr;
                                proxy_set_header X-Forwarded-Proto $scheme;
                                proxy_set_header X-Forwarded-Port $server_port;
                                access_log off;
        }
        listen 443 ssl http2;
}

Проверяем. Браузер должен ругнутся на самоподписанный сертификат, но открыть страницу по https по протоколу http2.


Возник вопрос или предложение пиши на почту alexsey_89@bk.ru или в Телеграмм канал

Дата публикации: 17 Марта 2024 г.

Содержание


Наверх

Последнее изменение страницы: 17 Марта 2024 г.