BrowserSync: прокси-субдомены - PullRequest
0 голосов
/ 24 мая 2019

У меня есть приложение Django, которое обслуживает несколько сайтов на разных поддоменах.В процессе разработки я захожу на сайты по адресу:

  • www.myapp.local: 8000
  • data.myapp.local: 8000
  • publish.myapp.local:8000
  • admin.myapp.local: 8000

Обратите внимание, это работает с использованием библиотеки django_hosts и путем изменения / etc / hosts *Файл 1017 *, например:

127.0.0.1 www.myapp.local
127.0.0.1 data.myapp.local
127.0.0.1 publish.myapp.local
127.0.0.1 admin.myapp.local

Однако я не могу выяснить, как настроить BrowserSync в моем рабочем процессе на основе Gulp, чтобы проксировать все субдомены, обеспечивая бесперебойную работу какЯ перемещаюсь по сайтам и перезагружаю браузер по мере разработки.

Настройка BrowserSync для прокси основного сайта, например,

browserSync.init(
    [paths.css + "/*.css", paths.js + "*.js", paths.templates + '/**/*.html'], {
    proxy: 'www.myapp.local:8000' 
})

только «захватывает» основной сайт, если вы нажметессылка на один из поддоменов, вы выходите из сеанса BrowserSync и будет обслуживаться непосредственно Django на порт 8000.

1 Ответ

0 голосов
/ 24 мая 2019

Получил это, чтобы работать отлично, используя комбинацию промежуточного программного обеспечения (используя http-proxy-middleware ) и rewriteRules :

const proxy = require('http-proxy-middleware'),

browserSync.init([paths.css + "/*.css", paths.js + "*.js", paths.templates + '/**/*.html'], {
    middleware: [
        function (req, res, next) {
            let target = 'http://' + req.headers.host.replace('myapp.local:3000', 'myapp.local:8000');
            proxy({
                target,
                changeOrigin: true
            })(req, res, next);
        }
    ],
    rewriteRules: [
        {
            match: /myapp.local:8000/g,
            fn: function (req, res, match) {
                return 'myapp.local:3000';
            }
        }
    ]
});

Промежуточное программное обеспечение сопоставляет любой URL с родительским доменом myapp.local:3000 и передает запрос на порт 8000, прослушиваемый Django, без изменения субдомена.RewriteRules используются для перезаписи любых ссылок в ответе, поэтому последующая навигация корректно возвращается обратно через прокси.

...