Ответы пользователя по тегу Nginx
  • Почему не работает внутреняя авторизация на nginx ларавел?

    @MadridianFox
    Web-программист, многостаночник
    Не работает потому что nginx и веб-приложение используют один и тот же http заголовок для передачи данных авторизации. Универсального решения нет.
    Как вариант, если приложение и так закрыто своей авторизацией, то basic можно и не делать. Или можно изменить заголовок авторизации в веб-приложении. Или попытаться разнести бэк и фронт на разные домены, чтобы одно было закрыто бейсиком, а другое собственной авторизацией.
    Ответ написан
  • Как отдавать docker container с сервера по адресу домена?

    @MadridianFox
    Web-программист, многостаночник
    Домен привязывается не к контейнеру, а к ip адресу.
    Вы не уточнили где именно поднята эта виртуальная машина и с какой целью.

    Если у вас на компьютере для личного использования, то проще всего использовать nip.io или прописать соотвествие домена и ip адреса виртуальной машины в файле hosts.

    Если вы арендовали виртуальную машину у какого-то провайдера и хотите сделать её доступной для всех по домену, то нужно купить домен и в его настройках указать ip адрес виртуальной машины.
    Ну или использовать всё тот же nip.io если это общий сервис для малого круга лиц.

    UPD:

    чтобы по разным доменам открывались разные веб-приложения, вам необходим http прокси, который на основании домена, указанного в http запросе, будет проксировать этот запрос на тот или иной внутренний адрес.
    Обычно для этого устанавливают nginx, который сам слушает 80 и 443 порты.
    Все домены настраивают так, чтобы вели на адрес этого сервера.
    В конфиге nginx описывают какое приложение должно отвечать по определённому домену, примерно вот так:

    server {
        listen 80;
        server_name site-1.domain.com;
        location / {
            proxy_pass http://127.0.0.1:27073;
        }
    }
    server {
        listen 80;
        server_name site-2.domain.com;
        location / {
            proxy_pass http://127.0.0.1:12345;
        }
    }
    Ответ написан
    8 комментариев
  • Как открыть другой сайт не меняя текущий адрес при проксирование в nginx?

    @MadridianFox
    Web-программист, многостаночник
    Вообще poxy_pass делает ровно то, что вам нужно.
    Посмотрите что именно отвечает сервер, когда вы делаете запрос. Может быть такое, что ваш nginx правильно проксирует, но сервер гугла видит, что запросе что-то не так, и возвращает редирект, конечно же на свой домен, а не на ваш. В таком случае браузер сделает ещё один запрос и поменяет домен в адресной строке.

    Если это так, попробуйе добавить заголовок с хостом гугла при обращении к гуглу:
    proxy_pass https://google.com/;
    proxy_set_header Host google.com;
    Ответ написан
  • Как выполнить http-запрос между двумя сайтами в laradock?

    @MadridianFox
    Web-программист, многостаночник
    Конкретно про ларадок не скажу, но объясню как оно вообще работает.

    Когда контейнеры запускаются в одной сети, они доступны друг другу по доменам, которые равны названию контейнера. При запуске через docker-compose немного не так. Контейнеры видят друг друга по именам сервисов.
    Т.е. если у вас вот такой docker-compose.yml
    services:
       front:
          image: ....
       back:
           image: ....

    то фронт сможет обратиться к бэку по домену back, примерно вот так:
    file_get_contents("http://back:8080/path/to/file.txt");

    Ещё, если вы хотите чтобы сервисы обращались друг к другу по публичным доменам, а не по внутренним, можете задать в docker-compose.yml у контейнеров hostname.
    но в docker-compose.yml у контейнера можно задать его hostname,
    вот так:
    services:
       front:
          hostname: site1.ru
          image: ....
       back:
           hostname: site2.ru
           image: ....
    Ответ написан
    Комментировать
  • Как решить проблему nginx при сборке docker-compose?

    @MadridianFox
    Web-программист, многостаночник
    Попробуйте использовать директиву upstream. Она более лояльна к отсутствию целевого хоста на момент страта nginx.
    Ответ написан
    Комментировать
  • Могу ли я читать данные в Nginx?

    @MadridianFox
    Web-программист, многостаночник
    Можно, для этого есть конструкция map
    которая даже умеет подтягивать варианты из отдельного файла

    Однако это довольно статичный вариант, подходящий для случаев, когда вам достаточно один раз настроить и забыть.
    Если нужна интерактивность, то можно попытаться добавить её через модуль njs - он позволяет написать код на js, который устанавливает значение переменной.
    Однако этот довольно нетипичный вариант и с 99% случаев его использование это костыли и велосипеды.

    В случае, когда вам нужно проксирование на ддинамически формируемый список сервисов, посмотрите в сторону разного рода настраиваемых прокси и service discovery, например HAProxy или Consul.
    Ответ написан
    4 комментария
  • Как решить проблему запроса на сервер?

    @MadridianFox
    Web-программист, многостаночник
    CORS - это защита встроенная в браузер.
    Именно браузер блокирует запросы на другой домен, если не настроены заголовки CORS.
    Соотвественно, чтобы браузер пропускал запросы, вам необходимо настроить CORS на сервере.
    Ответ написан
    Комментировать
  • Nginx в режиме обратного прокси нужно сайта сдвинуть в?

    @MadridianFox
    Web-программист, многостаночник
    Как уже написали в комментарии - то где искать стили решает приложение и по хорошему надо в каждом бэке сделать пути для подгрузки статики настраиваемыми.

    Однако, если все бэки находятся на одной машине, можно подставить костыль.
    Вы можете создать особый location, даже несколько, которые будут искать запрошенный файл сначала в одной папке, потом в другой, потом в третьей.
    location ~* \.(css|js)$ {
        root /path/to/back1;
        try_files $uri @back2;
    }
    
    location @back2 {
       root /path/to/back2;
       try_files $uri @back3;
    }
    
    location @back3 {
       root /path/to/back3;
       try_files $uri =404;
    }


    Если один из бэков находится не на этой же машине, то можно его поставить в конец и делать на него проксирование:
    location @back3 {
       proxy_pass http://external-service.com;
    }


    Ещё, можно рассмотреть вариант с условиями, которые смотрят на загловки запроса, ну там referer какой-нибудь или origin, и в зависимости от этого проксируют на тот или иной бэк.
    Ответ написан
  • Редирект с nginx + upstream. Как?

    @MadridianFox
    Web-программист, многостаночник
    У вас основная секция server слушает 443, а новые правила редиректов вы вставили в server, который слушает 80 и предназначен для редиректов http -> https
    Кроме того, в www редиректе вы не меняете хост, т.е. даже если он отработает, то он вызовет бесконечный редирект.
    Ответ написан
    Комментировать
  • Нужен совет: корректна ли связка Nginx - Docker - Nginx (proxy)?

    @MadridianFox
    Web-программист, многостаночник
    В этом нет ничего криминального. Если вам надо именно так - делайте. Если видите способ упростить систему - упрощайте.
    Главное не забыть прокинуть реальный ip и схему в заголовке.

    Кстати, k8s например примерно так и работает. Там 80,443 порт слушает т.н. ингрес - обычно тот же nginx, конфиг которого задаётся через yml файл. И вот он принимает все запросы и в зависимости от настроек проксирует их на бэкэнды, в том числе и на внутренние nginx'ы.
    Ответ написан
    Комментировать
  • Кто нибудь делил приложение Node.JS на несколько частей?

    @MadridianFox
    Web-программист, многостаночник
    Годно
    Ответ написан
    Комментировать
  • Как сконфигурировать nginx для того чтобы он работал как http прокси?

    @MadridianFox
    Web-программист, многостаночник
    Чтобы nginx проксировал запросы другому серверу надо в папку /etc/nginc/conf.d/ добавить файл с расширением .conf в котором написано:
    server{
      listen 5556
      server_name _;
      location / {
        proxy_pass localhost:5555
      }
    }


    Но если можно сконфигугрировать вашу вещь, которая слушает localhost:5555 чтобы она слушала 0.0.0.0:5555 то она и сама станет доступной из локальной сети.
    Ответ написан
    Комментировать