【问题标题】:Have nginx process an aspx file as though it were html让 nginx 处理一个 aspx 文件,就好像它是 html
【发布时间】:2014-06-30 23:07:51
【问题描述】:

我在 Linux 上运行 nginx。我想获取一个 .aspx 网页并仅输出其中的 html(没有 <% %> 指令、导入或页面声明。)

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

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

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

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

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

【问题讨论】:

  • 听起来你正在尝试做某种可怕的变异技术混合体。想在 .NET 环境中使用 Python?使用IronPython。想要在非 IIS 服务器中托管 ASP.NET?将 Apache 与 mod_mono 一起使用。
  • 几乎没有。我希望扩展名为 .aspx 的文件像 .html 一样通过 nginx。我想在 linux 环境中使用 Python,在 windows 环境中与 .net 共享代码,这样我就不必重新编写整个 web 部分的代码。
  • 如果您不希望 ASP.NET 引擎解析 Web 窗体页面,为什么不简单地删除所有与 ASP.NET 相关的代码,然后将扩展名更改为 .html?
  • 我愿意,但是 aspx 文件仍然使用 C# 代码背后的机制——它们被放入 SSI 脚本中,因此 IIS 仍然可以运行代码。我想基本上将整个 Web 代码库(无 SSI 脚本)放到 linux 平台上,并让它完全像在 IIS 服务器上一样显示 html。一旦我为 Linux 平台编写了 SSI 脚本,它应该使用一个 Web 代码库具有相同的功能。将后面的代码移到 .NET CGI 脚本中是唯一的其他选择,而且速度要慢得多/复杂得多。

标签: python asp.net .net nginx ssi


【解决方案1】:

您可能需要使用 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 看看会发生什么,如果遇到问题,请阅读错误和警告日志。希望这可以帮助您入门。

【讨论】:

  • 我用的不是fastcgi,而是uwsgi用的cgi。我会用我的 nginx.conf 更新问题
  • 我也在我的服务器上使用 uwsgi。将fastcgi放在那里与uwsgi无关,所以上面仍然可以工作。
  • 如果我能帮上忙,我宁愿不改变我正在使用的技术。我宁愿研究 IIS 的 cgi,这样我就可以使 Web 应用程序尽可能标准,即:不依赖仅在一种操作系统上运行或依赖一种语言的框架。
【解决方案2】:

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

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

最终,创建一个 nginx 模块来处理 aspx,就像处理 html 并将 ssi 卸载到 nginx 模块将是我认为的最佳解决方案。

感谢所有提供意见的人,我知道这个问题肯定不在左侧字段中。 干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-10
    • 2011-01-16
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2017-09-22
    相关资源
    最近更新 更多