我遇到了一个非常基本的 404 错误:
描述:HTTP 404。您正在寻找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保其拼写正确。
详细信息:请求的 URL:/index.html
我无法弄清楚最终调用了哪个完整的 url。
我的 index.html 非常简单:
<html><body>hello</body></html>
我的配置文件:
server {
listen 8045;
server_name localhost;
root /usr/share/nginx/asproot;
access_log /var/log/nginx/asp.access.log;
error_log /var/log/nginx/asp.error.log;
location / {
index index.html index.htm default.aspx Default.aspx;
fastcgi_index Default.aspx;
fastcgi_pass 127.0.0.1:9000;
include /etc/nginx/fastcgi_params;
}
}
nginx 用户可以访问根文件夹并读取 index.html(我用 进行了测试su
)。在浏览器中我加载:http://serverip:8045/index.html
那么到底出了什么问题?我怎样才能看到最终的 URL 是什么?
编辑
我发现问题出在 fastcgi 上。我读了几篇文章,但我还是迷茫了!
为了避免出现一个很长且历史悠久问题,我放弃了这个问题,等我理解了 nginx 的 fastcgi 基础知识后,我会发布一个新问题。无论如何,我给出了一个最终有效的配置(见下面的几个答案)
答案1
似乎当您访问根目录时,会应用“index”指令,但当您直接访问时,它会应用“fastcgi_pass”指令。您可能应该在 pass 指令之前检查文件是否存在。
好像我有和你类似的需求,我使用了这个配置:
server {
listen 80;
server_name localhost;
# PublicRoot
root /usr/share/nginx/asproot;
# Logs
access_log /var/log/nginx/asp.access.log main buffer=50k;
error_log /var/log/nginx/asp.error.log;
location / {
try_files $uri @fastcgi;
}
# Fastcgi-pass
location @fastcgi {
fastcgi_pass 127.0.0.1:9000;
fastcgi_keep_conn on;
include /etc/nginx/fastcgi_params;
fastcgi_intercept_errors on;
}
}
这里我首先通过“try_files”指令检查是否可以获取静态文件,如果不能,则通过 fastcgi_pass 指令。但我将 aspx 文件托管在不同的文件夹中,与静态文件不同。
答案2
好的,我终于让它工作了。我还有一个问题,索引不起作用,所以我必须输入完整的地址:
如果我只是输入:
然后我得到了一个 404 错误(因此 url 区分大小写)
正如我所说,现在 fastcgi 可以工作了,但有些东西仍然不清楚,我必须改进它。无论如何,我给你我所有的配置,我希望这能对某些人有所帮助:
操作系统:rapbian 3.18.11 (debian) Mono:4.0.2 fastcgi-server4 nginx 1.2.1
快速CGI
配置文件:
<apps>
<web-application>
<name>ptitest</name>
<vhost>*</vhost>
<vport>8045</vport>
<vpath>/</vpath>
<path>/usr/share/nginx/asproot</path>
</web-application>
</apps>
命令行 :
CONFIG_PATH=/usr/share/nginx/fastcgimono
LOG=/var/log/fastcgi-mono4.log
MONOSERVER=$(which fastcgi-mono-server4)
${MONOSERVER} /appconfigdir=${CONFIG_PATH} /socket=tcp:127.0.0.1:9000 /logfile=${LOG} --verbose &
NGINX:
/etc/nginx/fastcgi_params
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param HTTPS $https;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
site-avalaible/default(我尝试了很多次,现在的情况是这样的):
server {
listen 8045;
server_name ptitest;
root /usr/share/nginx/asproot;
access_log /var/log/nginx/asp.access.log;
error_log /var/log/nginx/asp.error.log;
location ~ \.(aspx|asmx|ashx|asax|ascx|soap|rem|axd|cs|config|dll)$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
fastcgi_intercept_errors on;
}
location / {
root html;
index index.html index.htm default.aspx Default.aspx;
}
}
网页内容 : /usr/share/nginx/asproot/web.config:
<configuration>
<system.web>
<customErrors mode="Off"/>
</system.web>
</configuration>
/usr/share/nginx/asproot/Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<div>
<% var test = String.Format("Hello World! Got an aspx page running on nginx!!!\r\n{0}",System.DateTime.Now); %>
<%= test %>
</div>
</body>
</html>
日志