Задать вопрос
Ответы пользователя по тегу Nginx
  • Как установить let's encrypt сертификат в docker совместно с nginx и certbot?

    neatsoft
    @neatsoft
    Life is too short for bad software
    Проблема в неправильном выборе инструмента. Для решения этой задачи гораздо лучше подходит Traefik: он умеет динамически подхватывать контейнеры, которым необходим доступ извне, автоматически получать let's encrypt сертификаты, роутить запросы на основании имени домена / пути, и выступать в качестве load balancer-а. Настраивается гораздо проще, чем Nginx: вся конфигурация - несколько строк.
    Ответ написан
    7 комментариев
  • Как сконфигурировать виртуальные хосты для NGINX для ajax?

    neatsoft
    @neatsoft
    Life is too short for bad software
    Существует три варианта решения этой проблемы:
    1. После сборки фронтенда можно помещать его в static files / assets бэкенда, и сервить так же, как и все остальные файлы. Этот метод плох тем, что утрачивается возможность применения cache forever / cache busting (добавления хэш суммы в имена файлов).
    2. Распределять запросы между сервисами используя договоренность о путях, например, /api/* и /admin/* отправлять в бэк, /static/* отдавать из каталога с VueJS статикой, а для всех остальных запросов возвращать dist/index.html (для избавления от # в путях и обеспечения поддержки history mode). Минус - об этой договоренности нужно помнить, и следить за её соблюдением. Появляется неявная зависимость между сервисами.
    3. Использовать разные поддомены, например, api.example.com для бэка, www.example.com - для фронта. Роутинг запросов в этом случае происходит наиболее естественным образом - на основании имени домена. Становятся доступны дополнительные способы масштабирования (размещение на разных серверах, dns round robin, использование разных reverse proxy), и появляется возможность тестирования / отладки фронта с апи из разных окружений (dev, staging, qa, prod).


    ps. Cоветую упаковать ваши сервисы в Docker контейнеры, а в качестве reverse proxy / tls proxy / load balancer использовать Traefik вместо Nginx. Его киллер-фичи - auto discovery и auto load balancing. Кроме того, его гораздо проще правильно настроить. Сам Traefik тоже в контейнере работает, поэтому на сервере не требуется ничего кроме docker и docker-compose

    traefik-architecture.svg
    Ответ написан
    Комментировать
  • Проблемна ли инвалидация кэша в Nginx?

    neatsoft
    @neatsoft
    Life is too short for bad software
    Только что закончил систему кэширования для высоконагруженного проекта на django + nginx, никаких проблем с инвалидацией не испытал. memcached + nginx microcaching. Принцип работы следующий:
    • nginx проверяет наличие данных в memcached с помощью memcached_pass, если нашел - возвращает;
    • django при рендеринге страницы помещает результат в memcached, при изменении - удаляет.

    В исходном виде у этой связки есть только одна проблема - обработка конкурирующих запросов. Если несколько клиентов одновременно попытаются запросить одну и ту же "непрогретую" страницу, то все запросы уйдут в бэкенд (ab -n 1000 -c 100). К счастью, nginx легко позволяет это предотвратить с помощью микрокэширования (uwsgi_cache_valid any 1s; uwsgi_cache_use_stale updating;). В бэкенд при этом уходит только самый первый запрос, параллельные получают результат из файлового кэша, последующие - из memcached. Не слишком элегантно, появляется дополнительный слой кэширования (файловый), но работает отлично. На реальных данных удалось получить ускорение в 1200 раз и неограниченную возможность масштабирования (с помощью дополнительных серверов с nginx в режиме микрокэширования между клиентом и основным сервером).
    Ответ написан
    Комментировать
  • Возможно ли развернуть два веб-сервера на 1 домене?

    neatsoft
    @neatsoft
    Life is too short for bad software
    кусок конфигурации с реального сервера:
    server {
        ...
        location /services {
            proxy_pass http://127.0.0.1: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;
        }
        ...
    }

    Документация: nginx reverse proxy
    Ответ написан
    5 комментариев
  • Как заставить nginx выдавать не ответ php-fpm, а стандартную страницу 404, если php-fpm возвращает 404?

    neatsoft
    @neatsoft
    Life is too short for bad software
    В конфиг nginx нужно добавить:
    fastcgi_intercept_errors on;
    nginx.org/en/docs/http/ngx_http_fastcgi_module.htm...
    Ответ написан
    Комментировать