首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nignx尝试不同位置的不同目录中的文件

Nignx尝试不同位置的不同目录中的文件
EN

Stack Overflow用户
提问于 2014-10-10 02:23:09
回答 1查看 571关注 0票数 0

我有一个使用FastCGI的uses应用程序。此应用程序被部署为不同的“站点”。我有一个应用程序的一般nginx配置,然后,我包括每个网站的upstram和位置文件。每个站点都需要一些.js和.css文件。现在,我已经通过通用配置文件的root设置了这些参数。我现在的要求是,我希望能够为不同的站点使用不同的.css和.js。因此,文件的查找应该首先从站点/位置级别开始,如果找不到,则在一般root中进行搜索。

一般的nginx conf文件是:

代码语言:javascript
复制
    # Change this directory depending on the server
    include /etc/nginx/conf.d/app/upstreams/*.conf;


    server
      {
        server_name 24.39.17.76;

        root /var/www/app/files/;

        listen       443;
        ssl                  on;
        ssl_certificate   /etc/nginx/conf.d/app/ssl/new/app.pem;
        ssl_certificate_key    /etc/nginx/conf.d/app/ssl/new/app.com.key;

        location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|svg|woff|ttf)$ {

            access_log off; # this is because otherwise, with jail2ban the user may be banned
            # add_header Access-Control-Allow-Origin "*";
            expires max;
            add_header Cache-Control "public, must-revalidate, proxy-revalidate";
            add_header Pragma public;

        }

        # Change this directory depending on the server
        include /etc/nginx/conf.d/app/locations/*.conf;

      }

请注意其中包含所有位置、conf和upstream文件的行。

然后是一个特定的站点,有一个上游文件,如下所示:

代码语言:javascript
复制
    upstream siteX
    {
    server localhost:9021;
    server localhost:9022;
    server localhost:9023;
    }

和如下所示的位置文件:

代码语言:javascript
复制
location ~ ^/siteX/reps {

        access_log  /var/log/nginx/app/siteX_reps_access.log;
        error_log  /var/log/nginx/app/siteX_reps_error info;
            if ($arg_service = "true") {
                    rewrite  ^/(.*)$ /service/$1 last;
            }
        rewrite ^/siteX/(.*)$ /$1 break;
        try_files $uri @fastcgiSiteX;

    }


    location @fastcgiSiteX {

        include fastcgi_params;
        fastcgi_param REQUEST_URI $uri?$args;
        fastcgi_pass fastcgiSiteX;
        fastcgi_next_upstream error invalid_header http_500;

    }

我的包含css和js的网页的html如下所示:

代码语言:javascript
复制
 <script type="text/javascript" src="/JQDevelopmentLibrary/jQuery.js"></script>
 <link rel="stylesheet" type="text/css" href="/TBSDevelopmentLibrary/css/bootstrap.css"/>

但如果对任何可能的解决方案有帮助,我可以很容易地添加一个前缀,例如:

代码语言:javascript
复制
 <script type="text/javascript" src="/siteX/webfiles/JQDevelopmentLibrary/jQuery.js"></script>
 <link rel="stylesheet" type="text/css" href="/siteX/webfiles/TBSDevelopmentLibrary/css/bootstrap.css"/>

SO...the通用文件位于/var/www/app/ files /下。但是,我希望对于siteX,首先在另一个路径中搜索文件,例如/var/www/siteX/files,只有在没有找到的情况下,才在常规路径中搜索。

我尝试过的一个解决方案是定义这个try_files表达式,但没有奏效:

代码语言:javascript
复制
  try_files /siteX/webfiles$uri $uri @fastcgiSiteX;

然后,我将所有的文件夹和文件放在$document_root/siteX/webfiles中,即/var/www/app/files/siteX/webfiles/。我认为这个解决方案应该行得通,但它没有。

有什么想法吗?

提前谢谢你,

EN

回答 1

Stack Overflow用户

发布于 2014-10-10 12:53:30

这是一种黑客行为,但它是可以做到的。

代码语言:javascript
复制
location ~ ^/siteX/reps {

        access_log  /var/log/nginx/app/siteX_reps_access.log;
        error_log  /var/log/nginx/app/siteX_reps_error info;
            if ($arg_service = "true") {
                    rewrite  ^/(.*)$ /service/$1 last;
            }
        rewrite ^/siteX/(.*)$ /$1 break;
        try_files $uri @hack;

    }

     location @hack {
     root  /var/www/siteX/files;
     try_files $uri $uri/ @fastcgiSiteX;
     }

    location @fastcgiSiteX {

        include fastcgi_params;
        fastcgi_param REQUEST_URI $uri?$args;
        fastcgi_pass fastcgiSiteX;
        fastcgi_next_upstream error invalid_header http_500;

    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26285450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档