让nginx将aspx文件作为html处理
我在Linux上运行着nginx。我想把一个.aspx
网页的内容提取出来,只保留它的html部分(不需要<% %>
指令、导入或页面声明)。
为了简单起见,假设我托管的所有.aspx
页面其实都是把普通的.html文件改了个名字,加上了.aspx
的后缀。
当我让nginx指向index.aspx
的位置时,它会让我下载这个文件,而不是直接显示文件的html内容,而index.html
则可以正常显示。
我想到了几种解决这个问题的方法。
- 写一个nginx模块,把
.aspx
页面当作html来处理。 - 改变识别的文件类型,把它们和html关联起来。
- 我试着在nginx的文件类型设置中加上
application/aspx html htm shtml;
,但没有成功。
- 我试着在nginx的文件类型设置中加上
- 调用cgi来读取
.aspx
文件并生成html,然后返回这个html。
我问这个问题的原因是因为我想利用一个现有的基于aspx的网络应用。这个aspx应用在aspx文件中没有任何特定于c#的代码,所以这样可以大大减少我的工作量。
2 个回答
你可能需要使用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,看看会发生什么。如果遇到问题,记得查看错误和警告日志。希望这些能帮助你入门。
这不是最好的解决办法,但我正在开发一个CGI应用程序,它会把REQUEST_URI
(请求的URI)转换成open(file).read(),然后把aspx页面的内容输出到浏览器上。
我正在开发一个SSI解析器来处理SSI调用,目前这个解析器对我来说是有效的,但有点乱,因为它现在只适用于我的设置,并且必须把对SSI的请求重定向到我的代码库,而不是基于文件扩展名的.NET代码库,这样的做法并不好。
我觉得最终,创建一个nginx模块来处理aspx,就像处理html一样,并把SSI的处理交给这个nginx模块,才是最好的解决方案。
感谢所有提供意见的人,我知道这个问题确实有点偏离主题。谢谢大家。