nginx:提供不同反向代理应用程序的静态文件

时间:2018-06-28 10:51:36

标签: nginx webserver reverse-proxy

我正在使用nginx为两个不同的应用程序创建反向代理,其中一个托管在服务器上,其中nginx托管在端口8011上,另一个托管在另一台服务器上,端口号为8015。使用反向代理,第一个应用程序可以在ROOT:80/上访问,而第二个应用程序可以在ROOT:80/blog上访问。

现在,两个应用程序的静态文件都位于各自的static文件夹中,该文件夹位于两个不同的路径中(与nginx托管在同一服务器上的第一个应用程序的静态路径:PATH_ONE/static和static)第二个应用程序的路径:PATH_TWO/static)。现在,在ROOT:80/下托管的应用程序将从下面使用的配置中正确提取其静态文件。但是,我无法弄清楚如何为第二个应用程序配置相同的内容。-

如何确保使用nginx托管在不同URL上的两个应用程序都使用各自的静态文件?

nginx配置:

upstream test_hosts {
   least_conn;
   server IP_ADDR_ONE:8011;
   server IP_ADDR_TWO:8011;
}

server{
    listen 80;

    location / {
        proxy_pass "http://test_hosts";
    }

    location /blog {s
        rewrite ^/blog(.*) /$1 break;
        proxy_pass "http://IP_ADDR_TWO:8015";
    }

    #browser caching of static assets
    location ~*  \.(jpg|jpeg|png|gif|ico|css|js|html)$ {
            expires 7d;
            root /PATH_ONE;
    }

} 

1 个答案:

答案 0 :(得分:1)

有多种解决方法。取决于您的用例工作方式。如果您可以在blog网址本身上/blog,那么这可能是最简单的事情

location /blog {
    proxy_pass http://IP_ADDR_TWO:8015;
}    

location /blog/static {
    alias <App2 static path>;
}

如果您无法执行此操作,则可以执行以下操作,在这两个应用程序都具有公共根文件夹的情况下

#browser caching of static assets
location ~*  \.(jpg|jpeg|png|gif|ico|css|js|html)$ {
        expires 7d;
        root /home;
        try_files /blog/server/$uri /app/server/$uri = 404;
}

这将首先检查Blog中的文件,如果存在则返回相同的文件(如果不存在),并根据您的问题检查其他路径/ROOT_ONE

如果两个应用程序对静态文件使用相同的名称并具有相同的路径,则可能会创建错误并提供错误的文件。

如果两个应用程序在同一台服务器上都没有静态文件,则可以尝试以下操作

#browser caching of static assets
location ~*  \.(jpg|jpeg|png|gif|ico|css|js|html)$ {
        expires 7d;
        root /home;
        try_files /app/server/$uri = @try_blogs;
}

location @try_blogs {
     proxy_pass http://IP_ADDR_TWO:8015$uri;
}