Рейтинг:-1

Nginx: путь proxy_pass домена к другому веб-серверу

флаг cn

Мы планируем обновить наше веб-приложение с собственного приложения на основе php до приложения на основе PHP Framework (Laravel), чтобы повысить безопасность и производительность приложения. Моя задача - разделить трафик, где каждый запрос указывал на домен app.localhost без постфикса /v3 по-прежнему перенаправляется в старое приложение на php-родной узел веб-сервера и проксировать все запросы с помощью /v3 путь к ларавель узел веб-сервера. Ниже приведена моя конфигурация, в результате которой все активы (css и js) и URL-адреса, сгенерированные Laravel, указывали на корневой путь.

Сгенерированный Laravel URL указывал на старое приложение

Фронтальный прокси (общедоступная сеть)

сервер {
    слушать 80;
    слушать [::]:80;
    имя_сервера app.localhost;

    # Собственное PHP-приложение
    место расположения / {
        proxy_set_header Хост $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://php-native/;
    }

    # Laravel (приложение v3)
    местоположение /v3/ {
        proxy_set_header Хост $host;
        proxy_set_header X-Real-IP $remote_addr;
        прокси_пасс http://laravel/;
    }
}

Веб-серверы (частная сеть)

php-родной Веб сервер

сервер {
    слушать 80;
    слушать [::]:80;
    имя_сервера app.localhost;

    корень /usr/share/nginx/html/webapp/app;

    место расположения / {
        индекс index.php index.html index.htm;

        try_files $uri $uri/ /index.php?$query_string;
    }

    расположение ~ \.php$ {
        fastcgi_pass php56-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html/webapp/app/$fastcgi_script_name;
        включить fastcgi_params;
    }
}

ларавель Веб сервер

сервер {
    слушать 80;
    имя_сервера app.localhost;

    корень /usr/share/nginx/html/webapp/app-v3/public;
    индекс index.php index.html index.htm;

    место расположения / {
        индекс index.php index.html index.htm;
        try_files $uri $uri/ /index.php?$query_string;
    }

    расположение ~ \.php$ {
        fastcgi_pass php74-fpm:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html/webapp/app-v3/public/$fastcgi_script_name;
        включить fastcgi_params;
    }
}

Спасибо

Обновлять

Мой вопрос: как разделить трафик, чтобы любой запрос указывал на app.localhost все еще направляется в php-родной веб-сервер и все запросы указывали на приложение.localhost/v3 указал на ларавель веб сервер ?

djdomi avatar
флаг za
Я не уверен, но в чем ошибка или вопрос, который у вас может возникнуть? я не вижу журналы или вопросы.
Ivan Shatsky avatar
флаг gr
Это ваше приложение laravel должно генерировать ссылки на все активы либо с использованием префикса `/v3`, либо как относительные. Вы также можете проверить [этот] (https://stackoverflow.com/a/62840133/7121513) ответ (однако каждый описанный подход - это просто лучший или худший обходной путь).
флаг cn
@djdomi я обновил свой вопрос. Благодарность
Рейтинг:0
флаг cn

я уже нашел свое решение.

Шаг 1: Добавьте X-Frowarded-Prefix к переднему прокси

сервер {
    слушать 80;
    слушать [::]:80;
    имя_сервера app.localhost;

    # Собственное PHP-приложение
    место расположения / {
        proxy_set_header Хост $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://php-native/;
    }

    # Laravel (приложение v3)
    местоположение /v3/ {
        proxy_set_header Хост $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Prefix "/v3";
        прокси_пасс http://laravel/;
    }
}

Шаг 2: отменить getTrustedHeaderNames функция

защищенная функция getTrustedHeaderNames()
{
    переключатель ($ this-> заголовки) {
        случай 'HEADER_X_FORWARDED_AWS_ELB':
        случай Запрос::HEADER_X_FORWARDED_AWS_ELB:
            запрос возврата::HEADER_X_FORWARDED_AWS_ELB;

        случай 'HEADER_FORWARDED':
        случай Запрос::HEADER_FORWARDED:
            запрос возврата::HEADER_FORWARDED;

        случай 'HEADER_X_FORWARDED_FOR':
        случай Запрос::HEADER_X_FORWARDED_FOR:
            запрос возврата::HEADER_X_FORWARDED_FOR;

        случай 'HEADER_X_FORWARDED_HOST':
        case Запрос::HEADER_X_FORWARDED_HOST:
            запрос возврата::HEADER_X_FORWARDED_HOST;

        случай 'HEADER_X_FORWARDED_PORT':
        случай Запрос::HEADER_X_FORWARDED_PORT:
            запрос возврата::HEADER_X_FORWARDED_PORT;

        случай 'HEADER_X_FORWARDED_PROTO':
        case Запрос::HEADER_X_FORWARDED_PROTO:
            запрос возврата::HEADER_X_FORWARDED_PROTO;

        // добавьте это для поддержки x-forwarded-prefix
        случай 'HEADER_X_FORWARDED_PREFIX':
        case Запрос::HEADER_X_FORWARDED_PREFIX:
            запрос возврата::HEADER_X_FORWARDED_PREFIX;

        // добавить | Запрос::HEADER_X_FORWARDED_PREFIX
        По умолчанию:
            запрос возврата::HEADER_X_FORWARDED_FOR | Запрос::HEADER_X_FORWARDED_HOST | Запрос::HEADER_X_FORWARDED_PORT | Запрос::HEADER_X_FORWARDED_PROTO | Запрос::HEADER_X_FORWARDED_AWS_ELB;
    }

    вернуть заголовки $this->;
}

это основано на выпуске Symfony Symfony-проблемы-44572

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.