我在使用Nginx时遇到了麻烦.
这是我的配置.
server {
listen 80;
listen [::]:80;
server_name www.test.local;
return 301 http://test.local$request_uri;
}
server {
server_name test.local;
root /usr/share/Nginx/test/htdocs/web;
# error_log /var/log/Nginx/test.error.log;
# access_log /var/log/Nginx/test.access.log;
rewrite ^/app\.PHP/?(.*)$/$1 permanent;
location / {
index app.PHP;
try_files $uri @rewriteapp;
}
location @rewriteapp {
rewrite ^(.*)$ /app.PHP/$1 last;
}
location ~ ^/app\.PHP(/|$) {
fastcgi_pass 172.17.0.1:48000;
fastcgi_split_path_info ^(.+\.PHP)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
location /uploads/ {
root /usr/share/Nginx/test/htdocs/web/uploads;
try_files $uri $uri/;
access_log off;
expires 30d;
}
location /images/ {
root /usr/share/Nginx/test/htdocs/web/images;
try_files $uri $uri/;
access_log off;
expires 30d;
}
location /css/ {
root /usr/share/Nginx/test/htdocs/web/css;
try_files $uri $uri/;
access_log off;
expires 30d;
}
location /js/ {
root /usr/share/Nginx/test/htdocs/web/js;
try_files $uri $uri/;
access_log off;
expires 30d;
}
location /fonts/ {
root /usr/share/Nginx/test/htdocs/web/fonts;
try_files $uri $uri/;
access_log off;
expires 30d;
}
location = /favicon.ico {
return 204;
access_log off;
log_not_found off;
}
}
我希望我的位置http://test.local/css/链接到/usr/share / Nginx / test / htdocs / styles /,就像我在配置中所做的那样.
但是当我输入例如http://test.local/css/flow.css im时,我得到了下一个错误:
2016/05/13 15:55:30 [error] 5#5: *64 rewrite or internal redirection cycle while internally redirecting to "/css/flow.css///////////",client: 192.168.99.1,server: test.local,request: "GET /css/flow.css HTTP/1.1",host: "test.local",referrer: "http://test.local/"
这里有什么问题?
最佳答案
您的配置有两个问题.
第二个问题是默认操作是在URI的末尾添加另一个/.
您需要向try_files指令中添加有效的默认操作,例如404响应:
try_files $uri $uri/ =404;
因此,回到第一个问题.您的配置指出/css/example.css位于/usr/share/Nginx/test/htdocs/web/css/css/example.css.请注意,/ css /已复制. / images /,/ js /和/ fonts /也是如此.有关根指令的详细信息,请参见this document.
在大多数配置中,只需在服务器块级别指定根并允许几乎所有位置块都可以继承它,而不必在每个位置重复它.
您的问题指出/ css /文件应该在/usr/share / Nginx / test / htdocs / styles /中找到.这需要别名指令.有关别名指令的详细信息,请参见this document.例如:
location /css/ {
alias /usr/share/Nginx/test/htdocs/styles/;
access_log off;
expires 30d;
}