у меня есть нгинкс 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-адреса на основе подкаталога. Я могу быть вынужден просто разместить все свои приложения в отдельных поддоменах, если только данное приложение не использует конфигурацию подкаталога.