Попросите nginx обработать aspx-файл так, как если бы это был html

#python #asp.net #.net #nginx #ssi

#python #asp.net #.net #nginx #ssi

Вопрос:

У меня nginx работает в Linux. Я хочу взять .aspx веб-страницу и вывести из нее только html (без <% %> директив, импорта или объявлений страниц.)

Для простоты предположим, что все .aspx страницы, которые я размещаю, — это просто файлы .html, переименованные с .aspx расширением.

Когда я указываю nginx на местоположение index.aspx , он просит меня загрузить файл вместо отображения HTML-содержимого файла, тогда как index.html отображается нормально.

Я подумал о нескольких способах, которыми я мог бы решить эту проблему.

  • Напишите модуль nginx для обработки .aspx-страниц, как если бы они были html
  • Измените распознанные mimetypes и свяжите их с html
    • Я попытался добавить application/aspx html htm shtml; в свой файл mimetype nginx, и это не сработало.
  • Вызов cgi для чтения .aspx-файла и генерации html, который возвращается

Причина, по которой я задаю этот вопрос, заключается в том, что я хочу использовать существующее веб-приложение на основе aspx. В этом aspx-приложении нет никакого специфичного для c # кода в самих aspx-файлах, поэтому это значительно сократило бы мою работу.

Комментарии:

1. Похоже, вы пытаетесь создать какой-то ужасный гибрид технологий-мутантов. Хотите использовать Python в среде .NET? Используйте IronPython . Хотите разместить ASP.NET на сервере, отличном от IIS? Используйте Apache с mod_mono .

2. Вряд ли. Я хочу, чтобы файлы с расширением .aspx проходили через nginx, как если бы они были .html. Я хочу использовать Python в среде Linux, которая использует общий код с .net в среде Windows, поэтому мне не нужно переписывать всю веб-часть кода.

3. Почему бы вам просто не удалить все ASP.NET связанный код, а затем измените расширение на .html, если вы не ожидаете, что страницы веб-форм будут проанализированы ASP.NET движок?

4. Я бы так и сделал, но aspx-файлы по-прежнему используют код C #, лежащий в основе механизмов — они помещены в сценарии SSI, поэтому IIS все еще может запускать код. Я хочу в основном перенести всю веб-кодовую базу (без сценариев SSI) на платформу Linux и заставить ее отображать HTML точно так же, как на сервере IIS. Как только я напишу SSI-скрипты для платформы Linux, они должны иметь ту же функциональность, используя одну веб-базу кода. Перемещение кода в . Сценарии NET CGI — единственный другой вариант, и это намного медленнее / сложнее.

Ответ №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 и посмотрите, что произойдет, и если у вас возникнут проблемы, прочитайте журналы ошибок и предупреждений. Надеюсь, это поможет вам начать.

Комментарии:

1. Я не использую fastcgi, но uwsgi использует cgi. Я обновлю вопрос с помощью моего nginx.conf

2. Я также использую uwsgi на своем сервере. Добавление fastcgi туда не связано с uwsgi, поэтому вышеупомянутое все еще может работать.

3. Если я могу помочь, я бы предпочел не менять технологию, которую я использую. Я бы предпочел изучить cgi для IIS, чтобы я мог поддерживать веб-приложение как можно более стандартным, т. Е.: не полагаясь на фреймворки, которые функционируют только в одной ОС или полагаются на один язык.

Ответ №2:

Это не лучшее решение, но я разрабатываю cgi-приложение, которое будет переводить REQUEST_URI для aspx-страниц в open(file).read() и выводить содержимое aspx-страницы в браузер.

Я разрабатываю анализатор SSI для обработки вызовов ssi, который пока работает у меня, но немного запутанный, поскольку он работает только для моей установки прямо сейчас и должен перенаправлять запросы к SSI на мою кодовую базу вместо .СЕТЕВАЯ кодовая база, основанная на расширении файла, что является плохим решением.

В конечном счете, создание модуля nginx для обработки aspx как html и выгрузки ssi в модуль nginx было бы лучшим решением, на мой взгляд.

Спасибо всем, кто внес свой вклад, я знаю, что этот вопрос определенно отсутствует в левом поле. Приветствия.