nginx ...为什么我需要额外的位置块?

时间:2016-07-25 16:52:47

标签: nginx nginx-location

我想知道你是否可以澄清为什么添加我所做的能够解决我的问题,虽然我的问题已得到解决,但我不确定它为什么会起作用而且它之前没有在设置中工作

旧设置:

我在以下地址提供的文件: http://192.168.33.1:3000/bower_components/... 例如,(http://192.168.33.1:3000/bower_components/animate.css/animate.css

我有一个nginx反向代理设置 http://192.168.33.10:80/

我有以下位置区块:

location /content {
   proxy_pass http://192.168.33.1:3000/;
   proxy_redirect off;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_max_temp_file_size 0;
   client_max_body_size 10m;
   client_body_buffer_size 128k;
   proxy_connect_timeout 90;
   proxy_send_timeout 90;
   proxy_read_timeout 90;
   proxy_buffer_size 4k;
   proxy_buffers 4 32k;
   proxy_busy_buffers_size 64k;
   proxy_temp_file_write_size 64k;
}

在此设置中,将加载以下网址: http://192.168.33.10/content/app/index.css

但是下面的url会给我一个404,即使直接访问该文件会加载正常: http://192.168.33.10/content/bower_components/animate.css/animate.css (或bower_components文件夹中的任何其他内容)

修复:

在玩了一下之后,我发现如果我添加了以下位置块,那么事情就会起作用:

location /content/bower_components {
     proxy_pass http://192.168.33.1:3000/bower_components;
}

我理解为什么这个额外的位置块会起作用,但我不明白为什么原始位置块不包含我添加的添加位置块的规则。

有关进展情况的任何建议吗?

1 个答案:

答案 0 :(得分:0)

这可能是也可能不是正确答案,但是......

位置栏:

location /content {
    proxy_pass http://192.168.33.1:3000/;
    ...
}

是以/content/开头的URI的别名,缺少终止/

我会用:

location /content/ {
    proxy_pass http://192.168.33.1:3000/;
    ...
}

然后根据需要修复/content的特定情况。

我不知道为什么http://192.168.33.10/content/app/index.css似乎有效。

有关详细信息,请参阅this document