静态文件上的Nginx反向代理404

前端之家收集整理的这篇文章主要介绍了静态文件上的Nginx反向代理404前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我希望反向代理一个URL /路径到端点上的不同端口,代表托管自己的Web应用程序的不同服务器.

我有proxy_pass工作,但静态文件失败,因为资源是相对于他们的实例.

我有例如 – server_name = myproxy.com:

location /app1/{
    proxy_pass: http://192.168.1.1:8080/;
    proxy_set_header Host 192.168.1.1;
}
location /app2/{
    proxy_pass: http://192.168.1.1:8081/;
    proxy_set_header Host 192.168.1.2;
}
location /{
    proxy_pass: http://192.168.1.1:8080/;
    proxy_set_header Host 192.168.1.1;
}

除了与app2关联的静态文件外,反向代理的工作原理很棒. App1静态文件工作正常,但App2静态文件导致404.这是有道理的,因为App1资源文件位于/assets/app1.css这是有效的,因为我有一个位置/到位的重定向,可以解析回App1但App2资源文件完全不同/assets/app2.css导致404.

那么,有没有办法将/assets/app2.css中的App2静态请求重写到各自的代理位置?就像是:

location /app1/{
    proxy_pass: http://192.168.1.1:8080/;
    proxy_set_header Host 192.168.1.1;
}
location /app2/{
    proxy_pass: http://192.168.1.1:8081/;
    proxy_set_header Host 192.168.1.2;

    *rewrite app2 static urls frome /assets/* to /app2/assets/*
}
location /{
    proxy_pass: http://192.168.1.1:8080/;
    proxy_set_header Host 192.168.1.1;
}
最佳答案
文件/assets/app1.css(App1)按位置/ app1 /的规则加载时,然后按位置/的规则加载为/assets/app1.css. App2具有相同的行为,但您的位置/配置为App1,而不是App2.

您的配置必须是:

location /app1/ {
    proxy_pass: http://192.168.1.1:8080/app1/;        
}

location /app2/ {
    proxy_pass: http://192.168.1.1:8081/app1/;      
}

必需:代理和upsteam服务器上的别名app1应该相同.在upsteam服务器上,它可能是原始webroot应用程序的符号链接.

或者您可以使用不同的子域或端口….

server_name app1.localhost;
location / {
    proxy_pass: http://192.168.1.1:8081/;      
}

附:

我通过代理探索了Nginx配置的许多操作. Nginx无法正常使用一条规则:

location /app1/ {
    proxy_pass: http://192.168.1.1:8080/;        
}

例如:
将加载css和js文件
– proxy_server / css …
– proxy_server / js …

从请求proxy_server / app1 / index.html,您将获得404.

您可以将location / css / rule添加到config.但是你的app2也可以使用这个位置.并且您无法通过他检测上游服务器代理.您可以使用reffer来检测上游

 server {
    listen          80;

    if ($uri ~ app1/) {
      break;
    }

    if ($http_referer ~ app1/ ) {
      rewrite (.*) /app1/$1 redirect;
    }

    location /app1/ {
        proxy_pass http://192.168.1.1:8080/;
    }
}

重定向后POST数据将被销毁.

如果有必要按位置仅将配置调整到代理服务器,那将是很好的.但这是一个梦想.

原文链接:https://www.f2er.com/nginx/435060.html

猜你在找的Nginx相关文章