在NGINX代理中传递静态内容

时间:2016-10-24 04:41:33

标签: nginx reverse-proxy

我正在使用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-default;

    # 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;
    }        
}

我认为我只提供位置定义块并重新定义项目/页面 root 路径,以便任何 $ uri 将通过 - 但不幸的是它不会。我为这些静态页面调用的每个css / js / img uri都将强制传递第一个登录页面而不是相关文件。因此,我要以完整的网址形式为这些文件添加我的外部链接引用,以显示我的静态网页"罚款"。任何人都可以帮我解决这个问题吗?

更新

我尝试使用以下配置,同样的问题 - 不会提供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 个答案:

答案 0 :(得分:0)

您真的很接近解决方案。 NGINX的一个好处是它非常擅长提供静态内容。但是,这将要求您知道所有静态文件的URI的开头,例如/static/js/private/myscript.js//static/开头。如果您知道这一点,那么您可以执行以下操作:

location ^~ /static/ {
    alias /var/www/df-default/static/;
}

当然,这只是猜测,因为我不知道您在提供静态文件时使用的URI。如果它们以/css//js/等开头,它应该被try_files指令中的第一个位置块捕获。但是,由于没有发生这种情况,我认为情况并非如此。如果此解决方案不起作用,请评论并显示静态资源的URI。