Nginx将静态文件重定向到root的子目录

时间:2015-12-01 13:45:37

标签: javascript css image nginx static

我有一个在http://192.168.0.2:8080/运行的应用。 index.html页面位于/web文件夹中,它在/css处请求静态文件(例如css)。

我想使用nginx作为反向代理并让myapp.mydomain.com重定向到我的应用。 我在nginx.conf中有以下配置:

server {
        listen       80;
        server_name  myapp.mydomain.com;
        satisfy any;
        location / {
                proxy_pass  http://192.168.0.2:8080/web/;
                index  index.html index.htm;
        }
}

但它不适用于css个文件,因为它在/web/css查找它们。 我的解决方法是让nginx.conf以这种方式配置(不使用/web):

server {
            listen       80;
            server_name  myapp.mydomain.com;
            satisfy any;
            location / {
                    proxy_pass  http://192.168.0.2:8080/;
                    index  index.html index.htm;
            }
    }
每次

并请求http://myapp.mydomain.com/web

但我希望能够请求http://myapp.mydomain.com/并让nginx管理。

我认为类似的东西可能会有所帮助,但我无法找到:

location ~ .(css|img|js)/(.+)$ {
                try_files $uri /$uri /$1/$2;
        }

location / {
                proxy_pass  http://192.168.0.2:8080/web/;
                index  index.html index.htm;
        }

这是我的完整文件,包含auth等:

upstream app { server 192.168.0.2:8080; }
server {
        listen       80;
        server_name  myapp.mydomain.com myapp.myOtherDomain.com;
        satisfy any;
        allow 192.168.0.0/24;
        deny all;
        auth_basic "closed site";
        auth_basic_user_file /etc/nginx/auth/passwords;
        location / { proxy_pass http://app/web/; }
        location /css { proxy_pass http://app; }
        location /img { proxy_pass http://app; }
        location /js { proxy_pass http://app; }
}

知道如何解决这个问题吗?

感谢。

1 个答案:

答案 0 :(得分:0)

根据我的理解,您有一个有效的配置,问题是您希望将网址http://myapp.mydomain.com/映射到http://192.168.0.2:8080/web/

您的工作配置是:

server {
  listen       80;
  server_name  myapp.mydomain.com;
  satisfy any;
  location / {
    proxy_pass  http://192.168.0.2:8080/;
    index  index.html index.htm;
  }
}

最简单的解决方案是为/ URI添加完全匹配。如:

server {
  listen       80;
  server_name  myapp.mydomain.com;
  satisfy any;
  location = / { rewrite ^ /web/; }
  location / {
    proxy_pass  http://192.168.0.2:8080/;
    index  index.html index.htm;
  }
}