nginx proxy_pass 不适用于包含的文件

nginx proxy_pass 不适用于包含的文件

我有一个在某个随机域上运行的服务(假设example.com),我想从我的本地机器(又名localhost)创建一个简单的外观。

location /some-app {
  # This is for LDAP auth, not sure if important
  auth_ldap_servers ldapserver;

  proxy_pass http://example.com;
}

我确信它确实将我的请求重定向到该example.com页面,但它没有从example.com索引中获取链接的文件,例如 CSS 和 JavaScript 文件。我得到了如下内容:

172.17.0.1 - [email protected] [11/Aug/2016:10:20:35 +0000] "GET /components/navbar/navbar.controller.js HTTP/1.1" 404 570 "http://localhost:8080/some-app" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"

我尝试过proxy_set_header Host $host;,但似乎没有什么区别。我很确定我忽略了一些明显的东西,但我真的说不出来是什么。我看过rewrite规则,但我想这可能比这更容易。

worker_processes  1;

events {
  worker_connections  1024;
}


http {

  include mime.types;
  default_type application/octet-stream;
  sendfile on;
  keepalive_timeout 65;

  ldap_server ldapserver {
    # boring ldap config 
  }

  ldap_server ldapserver2 {
    # boring ldap config
  }

  server {

    listen 80;
    server_name localhost;

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    auth_ldap_servers ldapserver;

    location / {
        root html;
        index index.html index.htm;
    }

    location /some-app {
      auth_ldap_servers ldapserver2;

      proxy_pass http://example.com:9000;
    }

    error_page 500 502 503 504  /50x.html;
    location = /50x.html {
        root html;
    }

  }

}

答案1

编辑:根据评论更新。

下面的配置服务器仅index.html来自 nginx,所有其他请求都传递给应用程序服务器。

代替:

location / {
    root html;
    index index.html index.htm;
}

location /some-app {
    auth_ldap_servers ldapserver2;

    proxy_pass http://example.com:9000;
}

你应该使用:

location / {
    root html;
    index index.html index.htm;
}

location ~ ^/(.+)$ {
    auth_ldap_servers ldapserver2;

    proxy_pass http://example.com:9000;
}

相关内容