让nginx处理一个aspx文件就像它是html一样

时间:2014-06-30 23:07:52

标签: python asp.net .net nginx ssi

我在Linux上运行nginx。我想要一个.aspx网页并输出它的html(没有<% %>指令,导入或页面声明。)

为简单起见,假设我托管的所有.aspx个网页都是.html文件,并使用.aspx扩展名重命名。

当我将nginx指向index.aspx的位置时,它会要求我下载文件而不是显示文件的html内容,而index.html显示正常。

我想到了一些解决这个问题的方法。

  • 编写一个nginx模块来处理.aspx页面,因为它们是html
  • 更改已识别的mimetypes并将其与html关联
    • 我尝试将application/aspx html htm shtml;添加到我的nginx mimetype文件中,但它没有用。
  • 调用cgi读取.aspx文件并生成返回的html

我提出这个问题的原因是因为我想利用现有的基于aspx的Web应用程序。这个aspx应用程序在aspx文件本身中没有任何特定于c#的代码,因此会大大减少我的工作。

2 个答案:

答案 0 :(得分:0)

您可能需要使用fastcgi。我为php文件做了类似的事情,所以下面的例子可能需要一些调整。

在您的nginx配置文件中,您需要以下内容:

location / {
    root /var/www/yourapp
    index index.html index.htm default.aspx Default.aspx;
    fastcgi_index Default.aspx;
    fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
    include /etc/nginx/fastcgi_params;
}

首先你会注意到我有一个套接字文件设置 - php-fmp.sock,所以如果你没有,你可以做127.0.0.1:9000之类的事情。此外,如果您还没有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_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;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

重新启动Nginx,看看会发生什么,如果遇到问题,请阅读错误和警告日志。希望这能让你开始。

答案 1 :(得分:0)

这不是最佳解决方案,但我正在开发一个cgi应用程序,它将aspx页面的REQUEST_URI转换为open(文件).read()并将aspx页面内容输出到浏览器。

我正在开发一个SSI解析器来处理ssi调用,到目前为止它对我有用但有点乱,因为它现在只适用于我的设置,并且必须将请求重定向到我的代码库而不是.NET代码库基于文件扩展名,这是一个糟糕的解决方案。

最终,创建一个nginx模块来处理aspx,因为它会html并将ssi卸载到nginx模块,这将是最好的解决方案。

感谢所有提供意见的人,我知道这个问题肯定在左边的领域。 欢呼声。