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