让nginx将aspx文件作为html处理

-1 投票
2 回答
1537 浏览
提问于 2025-04-18 11:39

我在Linux上运行着nginx。我想把一个.aspx网页的内容提取出来,只保留它的html部分(不需要<% %>指令、导入或页面声明)。

为了简单起见,假设我托管的所有.aspx页面其实都是把普通的.html文件改了个名字,加上了.aspx的后缀。

当我让nginx指向index.aspx的位置时,它会让我下载这个文件,而不是直接显示文件的html内容,而index.html则可以正常显示。

我想到了几种解决这个问题的方法。

  • 写一个nginx模块,把.aspx页面当作html来处理。
  • 改变识别的文件类型,把它们和html关联起来。
    • 我试着在nginx的文件类型设置中加上application/aspx html htm shtml;,但没有成功。
  • 调用cgi来读取.aspx文件并生成html,然后返回这个html。

我问这个问题的原因是因为我想利用一个现有的基于aspx的网络应用。这个aspx应用在aspx文件中没有任何特定于c#的代码,所以这样可以大大减少我的工作量。

2 个回答

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;
}

首先,你会注意到我设置了一个socket文件——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,看看会发生什么。如果遇到问题,记得查看错误和警告日志。希望这些能帮助你入门。

0

这不是最好的解决办法,但我正在开发一个CGI应用程序,它会把REQUEST_URI(请求的URI)转换成open(file).read(),然后把aspx页面的内容输出到浏览器上。

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

我觉得最终,创建一个nginx模块来处理aspx,就像处理html一样,并把SSI的处理交给这个nginx模块,才是最好的解决方案。

感谢所有提供意见的人,我知道这个问题确实有点偏离主题。谢谢大家。

撰写回答