Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx配置不工作_Nginx - Fatal编程技术网

Nginx配置不工作

Nginx配置不工作,nginx,Nginx,我刚从Apache切换到nginx,但仍然需要一些时间来适应(还有很多学习) 我正在运行具有以下配置的Pagekit网站: 不幸的是,许多人(包括我)都有这样一个问题:扩展名为js | css | jpg |的文件得到了403响应,因为它们位于应用程序或包目录中 我尝试了多个正则表达式,试图在nginx中为这些文件的位置赋予更高的优先级,但它们似乎没有效果 如何更改此配置文件以允许这些类型的文件,但仍对这些目录中的所有其他文件返回403 编辑:文件URL看起来像https://example.c

我刚从Apache切换到nginx,但仍然需要一些时间来适应(还有很多学习)

我正在运行具有以下配置的Pagekit网站:

不幸的是,许多人(包括我)都有这样一个问题:扩展名为
js | css | jpg |
的文件得到了
403
响应,因为它们位于
应用程序或包
目录中

我尝试了多个正则表达式,试图在nginx中为这些文件的
位置
赋予更高的优先级,但它们似乎没有效果

如何更改此配置文件以允许这些类型的文件,但仍对这些目录中的所有其他文件返回403

编辑:文件URL看起来像
https://example.com/app/js/something.min.js?v=1921
可能是因为
?v=1921

根据:

nginx按照配置文件中列出的顺序检查正则表达式给定的位置

因此,首先需要将最后一个
位置移动到顶部

那么尝试匹配静态文件的正则表达式也不正确。美元符号“
$
”应该与路径的结尾匹配,但它被前面的反斜杠“
\
”转义(因此它实际上与字符“$”匹配)。删除反斜杠将解决您的问题:

location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff)$ {
    ...
}
根据:

nginx按照配置文件中列出的顺序检查正则表达式给定的位置

因此,首先需要将最后一个
位置移动到顶部

那么尝试匹配静态文件的正则表达式也不正确。美元符号“
$
”应该与路径的结尾匹配,但它被前面的反斜杠“
\
”转义(因此它实际上与字符“$”匹配)。删除反斜杠将解决您的问题:

location ~* \.(?:ico|css|js|gif|jpe?g|png|ttf|woff)$ {
    ...
}

我也试过了,但也没用,所以我恢复了那个改变。编辑:检查更新的问题,也许这可以解释问题?有趣。。。我在我的nginx配置中有类似的规则,它工作得很好。在更改了nginx的配置后,您是否重新加载了它?是的,我重新加载了(检查问题中的编辑,也许这可以解释为什么?)我也尝试了,但也没有帮助,所以我恢复了更改。编辑:检查更新的问题,也许这可以解释问题?有趣。。。我在我的nginx配置中有类似的规则,它工作得很好。在更改了nginx的配置后,您是否重新加载了它?是的,我重新加载了(请检查问题中的编辑,也许这就解释了?)querystring不会与
位置
块匹配。您的nginx服务器是否支持某些类型的cdn?这可能是由这些CDN服务器上的缓存引起的。尝试更改URL以绕过缓存。我正在使用cloudflare,但我已将自己置于开发模式,并确保清除缓存。事实上,我知道url是这样的,因为pagekit本身缓存是由Cloudflare存储在服务器端的,所以只有浏览器开发模式实际上无法工作。也许您可以将版本号从“1921”更改为任何其他字符串,然后在您将最后一个
位置移动到顶部后,再看看它是否有效。恐怕这是我无法更改的。我正在尝试查找/编写一个忽略查询字符串的正则表达式,但到目前为止,您还无法做到这一点。只需复制URL并更改参数,然后直接浏览JS文件以查看是否仍返回403。查询字符串将不会与
位置
块匹配。您的nginx服务器是否支持某些类型的cdn?这可能是由这些CDN服务器上的缓存引起的。尝试更改URL以绕过缓存。我正在使用cloudflare,但我已将自己置于开发模式,并确保清除缓存。事实上,我知道url是这样的,因为pagekit本身缓存是由Cloudflare存储在服务器端的,所以只有浏览器开发模式实际上无法工作。也许您可以将版本号从“1921”更改为任何其他字符串,然后在您将最后一个
位置移动到顶部后,再看看它是否有效。恐怕这是我无法更改的。我正在尝试查找/编写一个忽略查询字符串的正则表达式,但到目前为止,您还无法做到这一点。只需复制URL并更改参数,然后直接浏览JS文件,查看是否仍返回403。