我有一个非常基本的404错误:
说明:HTTP 404.您正在查找的资源(或其某个依赖项)可能已被删除,名称已更改或暂时不可用。 请检查以下URL并确保拼写正确。
详细信息:请求的url:/index.html
我不知道哪个完整的url最终被调用。
我的index.html是非常基本的:
<html><body>hello</body></html>
我的configuration文件:
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
testing过)。 在浏览器中加载: http://serverip:8045/index.html
那么是怎么回事? 我怎样才能看到最终的url被称为?
编辑
我发现问题来自fastcgi。 我读了几篇文章,但我迷路了!
为了避免历史悠久的长期问题,我放弃这一点,我会发表一个新的问题,一旦我将了解fastcgi与nginx的基本知识。 无论如何,我给一个configuration,最终的作品(见下面的答案)
看起来,当你访问根目录时,“index”指令被应用,但是当你直接访问时,它应用“fastcgi_pass”指令。 如果文件甚至存在,你应该在pass指令之前检查。
好像我有类似的需求,我使用这个configuration:
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文件托pipe在不同的文件夹中,与静态文件不一样。
好吧,我Finnaly使它的工作。 我还有其他问题,索引不起作用,所以我必须input完整的地址:
HTTP://本地主机:8045 / Default.aspx的
如果我只是键入:
http:// localhost:8045或http:// localhost:8045 / default.aspx
那么我有一个404错误(所以URL区分大小写)
正如我现在说fastcgi的作品,事情仍然晦涩,我必须改善它。 无论如何,我给你我所有的configuration,我希望这会帮助别人:
操作系统:rapbian 3.18.11(debian)单声道:4.0.2 fastcgi-server4 nginx 1.2.1
FastCGI的
configuration文件:
<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;
网站可用/默认(我做了这么多的尝试,这里是什么现在):
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>
日志