我在尝试访问静态文件文件时遇到错误,但我正在尝试访问static/js/main.js
文件,nginx
正在寻找static/js/main.js/index.html
..以下是错误同样的。
2016/01/20 03:31:01 [错误] 2410#0:* 1 “/home/ubuntu/vnv/near/near/static/js/main.js/index.html”不是 找到(20:不是目录),客户端:162.111.50.122,服务器:my.domain.com,请求:“GET /static/js/main.js/ HTTP / 1.1”,主机:“my.domain.com”
以下是我的服务器块..
server {
listen 80;
server_name my.domain.com;
# location ~ ^/(static/.*) {
location ~ /static {
root /home/ubuntu/vnv/near/near; # near consist of static directory
}
location ~ / {
proxy_headers_hash_max_size 51200;
proxy_headers_hash_bucket_size 6400;
proxy_pass http://near_server;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
此外,它会在URI的末尾附加/
,这可能是什么问题?
注意:我已经完成了与此相关的大多数答案,但我找不到适合这种情况的解决方案。
答案 0 :(得分:1)
如果请求URI以/
结尾,nginx
会将其视为目录并应用索引规则。除非被覆盖,否则nginx
会查找index.html
文件。
从错误消息中我们看到GET请求是针对/static/js/main.js/
的。那么问题是谁将/
附加到请求URI?
如果您现在查看访问日志,您将看到包含GET /static/js/main.js/ HTTP/1.1 404
的行,其中列出了HTTP响应代码。
如果上面的行包含GET /static/js/main.js HTTP/1.1 3xx
,那么nginx
会添加额外的/
。如果没有这样的行,那么客户端会询问错误的URL,您需要在其他地方寻找问题的解决方案。
与您的问题无关:当前缀 location
块似乎更合适时,为什么使用正则表达式 location
块?
您应该使用:
location /static { ... }
location / { ... }
您现有的配置效率低下,并且匹配字符串中嵌入/static
的URI,例如:/something/static.php
。
请参阅this document了解location
语法和处理规则。