#nginx #reverse-proxy
#nginx #обратный прокси
Вопрос:
Я использую веб-сервер NGINX для прокси / обхода запросов на основе определенных URI к некоторым приложениям JAVA (продуктам atlassian) и создал целевую страницу по умолчанию для корневых вызовов в моем домене, и все прошло нормально. Но теперь я пытаюсь доставить другую статическую страницу с помощью определенного определения местоположения в конфигурации моих сайтов, и у меня нет подсказки, как исправить доставку css / js / image как определение относительного пути на этих страницах.
Вот структура моего пути к серверу:
# 01 default landing page
/var/www/df-default/
d css
d js
d img
d fonts
d _external
f index.html
# 02: external source
/var/www/df-default/_external
d css
d js
d img
f impressum.html
f datenschutz.html
Вот моя текущая конфигурация сайта nginx:
server {
listen 80;
listen [::]:80;
listen 443 default ssl;
server_name dunkelfrosch.com
#
# ... some ssl stuff here ...
#
root /var/www/df-defau<
# default landing page
location / {
try_files $uri $uri/ /index.html;
}
# proxy config for bitbucket application server
location /go/to/bitbucket {
# set 20min proxy timeout
proxy_read_timeout 1600s;
proxy_send_timeout 1600s;
proxy_connect_timeout 1600s;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
proxy_pass http://localhost:7990/go/to/bitbucket;
}
# external content 01: static imprint page
# should available by calling dunkelfrosch.com/show/me/phpugdd/imprint
# - no css,js or image files will delivered using this config
# - I've to insert complete url to css/img/js inside my templates
# and have to config the location block as shown below to deliver the page
location /show/me/phpugdd/imprint {
try_files $uri $uri/ /_external/web/impressum.html;
}
# external content 02: static privacy page
# should available by calling dunkelfrosch.com/show/me/phpugdd/privacy
# - no css,js or image files will delivered using this config
# - I've to insert complete url to css/img/js inside my templates
# and have to config the location block as shown below to deliver the page
location /show/me/phpugdd/privacy {
try_files $uri $uri/ /_external/web/datenschutz.html;
}
}
Я думал, что я просто представил блок определения местоположения и переопределил корневой путь проекта / страницы, чтобы через него проходил любой $ uri, но, к сожалению, этого не произойдет. Каждый вызов uri css / js / img, который я сделал для этих статических страниц, принудительно доставит первую целевую страницу, а не связанные файлы. Итак, я должен добавить свои ссылки на внешние ссылки для этих файлов в полной форме URL, чтобы мои статические страницы отображались «нормально». Кто-нибудь может мне помочь это исправить?
Обновить
Я попытался использовать следующую конфигурацию, та же проблема — файлы css, js или изображения предоставлены не будут…
location /show/me/phpugdd/privacy {
root /var/www/df-default/_external/web;
index datenschutz.html;
try_files $uri $uri/ /datenschutz.html;
}
location /show/me/phpugdd/imprint {
root /var/www/df-default/_external/web;
index impressum.html;
try_files $uri $uri/ /impressum.html;
}
Ответ №1:
Вы действительно близки к решению. Одним из преимуществ NGINX является то, что он действительно хорош в доставке статического контента. Однако для этого потребуется, чтобы вы знали начало URI всех ваших статических файлов, например, /static/js/private/myscript.js/
начинается с /static/
. Если вы знаете это, то вы можете сделать что-то следующим образом:
location ^~ /static/ {
alias /var/www/df-default/static/;
}
Конечно, это всего лишь предположение, потому что я не знаю URI, которые вы используете при обслуживании статических файлов. Если они начинаются с /css/
или /js/
и т.п., это должно было быть зафиксировано вашим первым блоком location в try_files
директиве. Однако, поскольку этого не происходит, я предполагаю, что это не так. Если это решение не работает, пожалуйста, прокомментируйте и покажите, каковы URI для статических ресурсов.
Комментарии:
1. Спасибо, Кинан! Я попробую ваше решение и отправлю вам отзыв, как только закончу тестирование 🙂
2. Конечно, пожалуйста, дайте мне знать. P.S Спасибо за такое подробное описание вашей проблемы 🙂
3. Это работает! Я определил специальную подпапку «assets» для моих изображений, css и js файлов и поместил специальный блок определения местоположения в конфигурацию моего сайта, изменил структуру путей в моих статических HTML файлах, и все работает отлично!
4. … отлично!!! Но если я хочу добавить дополнительные подстраницы, я всегда должен устанавливать специальный псевдоним местоположения, основанный на вашем предложении (например, asset.0 , asset.2 и т.д.). Возможно ли привязать определение псевдонима ресурса для этих статических файлов непосредственно к URI местоположения моего входящего запроса или может быть внутри моего основного раздела определения местоположения?
5. Потрясающе! Ожидаемый результат. Вам не нужно устанавливать отдельные псевдонимы как таковые. В общем случае подстраница должна наследоваться от базовой страницы. Таким образом, он по своей сути будет иметь тот же корень, что и другие ваши статические файлы. Если это не так, вы можете определить свои ресурсы для своих подстраниц так, чтобы они находились во вложенных папках в вашей основной папке, если это указано в URL.