我正在使用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;
}
}
答案 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;
}