доставка статического содержимого внутри прокси-сервера NGINX

#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.