#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 было бы лучшим решением, на мой взгляд.
Спасибо всем, кто внес свой вклад, я знаю, что этот вопрос определенно отсутствует в левом поле. Приветствия.