Рейтинг:0

Настройка NGINX с настройкой proxy_pass в подкаталоге, указывающим на сервер докеров, и обеспечение разрешения относительных URL-адресов (.js, .css)

флаг ky

у меня есть нгинкс 1.14.0 работает на сервере Ubuntu 18.04. На этом сервере я пытаюсь самостоятельно разместить множество различных приложений. Моя цель состоит в том, чтобы каждое местоположение существовало в подкаталоге моего URL-адреса, server.calebjay.com.

Например, прямо сейчас я хотел бы настроить свинарник2 быть доступным в server.calebjay.com/photos. Для этого у меня есть экземпляр докера, работающий на порту 800, и у меня есть нгинкс прокси к нему. Это частично работает, поскольку index.html нагрузки.

Однако относительные URL-адреса, такие как источник сценария, не рассасываются, я полагаю, потому что они сформированы как main.js вместо /фотографии/main.js.

Для теста могу ПОЛУЧАТЬ https://server.calebjay.com/photos, и решить index.html. Я получаю 404 для многих файлов .js и .css. Подтверждаю, если я возьму эти относительные URL-адреса и сделаю https://server.calebjay.com/photos/main-asdfasdf.js, я все еще получаю 404, {IP-адрес сервера}/photos/main-asdf.js и https://server.calebjay.com/photos/main-asdf.js оба правильно возвращают данный файл JS.

Есть много ответов по этому поводу, однако ни один из них не сработал для меня.

Моя базовая конфигурация nginx:

/etc/nginx/nginx.conf

www-данные пользователя;
рабочие_процессы авто;
pid /run/nginx.pid;
включить /etc/nginx/modules-enabled/*.conf;

События {
        worker_connections 768;
}

http {
        отправить файл включен;
        tcp_nopush включен;
        tcp_nodelay включен;
        keepalive_timeout 65;
        типы_хэш_макс_размер 2048;

        включить /etc/nginx/mime.types;
        default_type application/octet-stream;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Удаление SSLv3, ссылка: POODLE
        ssl_prefer_server_ciphers включен;

        журнал_доступа /var/log/nginx/access.log;
        журнал_ошибок /var/log/nginx/error.log;

        gzip включен;

        включить /etc/nginx/conf.d/*.conf;
        включить /etc/nginx/sites-enabled/*;
}

Для поддомена и одного сервера докеров, на который я сейчас проксирую:

/etc/nginx/sites-available/server.calebjay.com.conf

   сервер {
        слушать 80 default_server;
        слушать [::]:80 default_server;

        имя_сервера server.calebjay.com www.server.calebjay.com;
        вернуть 301 https://$server_name$request_uri;
  }

  сервер {
    имя_сервера server.calebjay.com; 

    gzip включен;


#местоположение ~ \.css {
# add_header Content-Type text/css;
#}
#местоположение ~ \.js {
# add_header Content-Type application/x-javascript;
#}

#место расположения / {
 # if ($http_referer ~ "^https?://[^/]+/photos/") {
 # переписать ^/(.*) https://$http_host/photos/$1 redirect;
 # }
# если ($http_referer = "https://server.calebjay.com/photos/") {
# переписать ^/(.*) https://server.calebjay.com/photos/$1 redirect;
# }
#}

   местоположение /фотографии/ {
    # переписать ^/photos(/.*)$ $1 break;
      прокси_пароль http://localhost:800/;
      прокси_http_версия 1.1;
      proxy_set_header Обновить $http_upgrade;
      proxy_set_header Соединение «обновление»;
     # sub_filter "<head>" "<head><base href=\"${scheme}://${host}/photos\">";
      proxy_set_header Хост $host;
      proxy_cache_bypass $http_upgrade;
    }


    слушать 443 ssl default_server;
    слушать [::]:443 ssl default_server;

    ssl_certificate /etc/letsencrypt/live/server.calebjay.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/server.calebjay.com/privkey.pem;
    включить /etc/letsencrypt/options-ssl-nginx.conf;
  }

Каждая из закомментированных частей представляет собой отдельные эксперименты, которые я пробовал из разных мест в сети стека:

Ни один переписать на основе http-реферер сработало, хотя в результате одно изображение разрешилось.

Наличие явного правила для изображений ни добавление заголовка mime-типа работал.

Ответы относительно статического контента и try_files не работали, и я не должен им верить, так как я проксирую на сервер.

Замена ссылок с помощью sub_filter не работал.

Параметр место расположения как /фотографии вместо /фотографии/ не работал.

У меня нет доступа к внутренностям докера, поэтому я не могу напрямую изменять html.

Как я могу получить свой ссылки разрешить против надлежащего домена, с подкаталогом /фотографии/?

(Я перезапускал nginx после каждого изменения конфигурации)

Более подробная информация:

нгинкс-V

версия nginx: nginx/1.14.0 (Ubuntu)
построен с OpenSSL 1.1.1 11 сентября 2018 г.
Поддержка TLS SNI включена
настроить аргументы: --with-cc-opt='-g -O2 -fdebug-prefix-map=/build/nginx-H4cN7P/nginx-1.14.0=.-fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl ,-z,now -fPIC' --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf --http-log-path=/var/log/nginx/access.log --error-log-path=/var/log/nginx/error.log --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid --modules-path= /usr/lib/nginx/modules --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http- proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --with-debug --with-pcre-jit --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-http_auth_request_module --with-http_v2_module --with-http_dav_module --with-http_slice_module --with -threads --with-http_addition_module --with-http_geoip_module=dynamic --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_fi lter_module=динамический --with-http_sub_module --with-http_xslt_module=динамический --with-stream=динамический --with-stream_ssl_module --with-mail=динамический --with-mail_ssl_module

РЕДАКТИРОВАТЬ: Ах, похоже, что http_referer переписать решение работает при загрузке js, css и т. д., но затем приложение JS изменяет URL-адрес клиента на стороне клиента, не отправляя запрос, на server.calebjay.com/, поэтому мой браузер показывает server.calebjay.com/логин, что приведет к тому, что будущие запросы пропустят http_referer. Это может быть невозможно исправить, так как я не знаю, как заставить javascript переписывать URL-адреса на основе подкаталога. Я могу быть вынужден просто разместить все свои приложения в отдельных поддоменах, если только данное приложение не использует конфигурацию подкаталога.

Рейтинг:0
флаг us

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

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

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