<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=435799&amp;view=findpost&amp;p=3892108</guid>
        <pubDate>Tue, 20 Jun 2023 22:58:54 +0000</pubDate>
        <title>FCGIApp+Nginx+Lazarus+Debian</title>
        <link>https://forum.sources.ru/index.php?showtopic=435799&amp;view=findpost&amp;p=3892108</link>
        <description><![CDATA[=SAPSAN=: Я в шоке (небольшом)  :) Вот что бывает когда знаешь что искать... &quot;Очень информативная&quot; ошибка &quot;Not found&quot; привела к тому, что, несколько раз натыкавшись на решение проблемы с объяснением новых механизмов, проходил мимо. &quot;У старого разведчика. что называется, глаз замыливается&quot; (с) Шарапов (почти дословно). Все объяснено в туториале <a class='tag-url' href='https://wiki.lazarus.freepascal.org/fpWeb_Tutorial/ru#.D0.9C.D0.B0.D1.80.D1.88.D1.80.D1.83.D1.82.D0.B8.D0.B7.D0.B0.D1.86.D0.B8.D1.8F' target='_blank'>fpWeb Tutorial/ru (Маршрутизация)</a>]]></description>
        <author>=SAPSAN=</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=435799&amp;view=findpost&amp;p=3892107</guid>
        <pubDate>Tue, 20 Jun 2023 21:32:00 +0000</pubDate>
        <title>FCGIApp+Nginx+Lazarus+Debian</title>
        <link>https://forum.sources.ru/index.php?showtopic=435799&amp;view=findpost&amp;p=3892107</link>
        <description><![CDATA[=SAPSAN=: Спасибо откликнувшимся. Уже хотел так и сделать. но наткнулся на <a class='tag-url' href='https://forum.lazarus.freepascal.org/index.php?topic=41461.0' target='_blank'>это</a> и <a class='tag-url' href='https://forum.lazarus.freepascal.org/index.php/topic,40240.msg277816.html#msg277816' target='_blank'>это</a>...<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Application.Legacyrouting := True;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
перед строкой инициализации приложения решает проблему на данном этапе, но надо смотреть что там в этом маршрутиааторе такого накручено, что просто так ни один пример не работает...]]></description>
        <author>=SAPSAN=</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=435799&amp;view=findpost&amp;p=3892058</guid>
        <pubDate>Tue, 20 Jun 2023 07:56:03 +0000</pubDate>
        <title>FCGIApp+Nginx+Lazarus+Debian</title>
        <link>https://forum.sources.ru/index.php?showtopic=435799&amp;view=findpost&amp;p=3892058</link>
        <description><![CDATA[Fr0sT: С fclweb и fastcgi не знаком совершенно, но порядок действий предложил бы такой<br><br>1. убрать Nginx для более простого дебага<br>1.1. выделить присылаемый запрос с помощью сниффера или логами<br>1.2. скармливать его своей программе с помощью ncat или подобного<br>2. посмотреть, что именно возвращает модуль (само содержимое)<br>3. поставить бряки и пройти по шагам там, где выдается ошибка]]></description>
        <author>Fr0sT</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=435799&amp;view=findpost&amp;p=3892018</guid>
        <pubDate>Mon, 19 Jun 2023 02:33:02 +0000</pubDate>
        <title>FCGIApp+Nginx+Lazarus+Debian</title>
        <link>https://forum.sources.ru/index.php?showtopic=435799&amp;view=findpost&amp;p=3892018</link>
        <description><![CDATA[=SAPSAN=: Всем доброго времени суток&#33; <br>
У меня поступило задание написать FastCGI-приложение на Lazarus и заставить его работать в связке с Nginx на Debian. Что сделал я...<br>
1. Обновил FPC и Lazarus до последних версий через fpcupdeluxe.<br>
2. Установил пакет fpweb в Lazarus и создал тестовое FastCGI-приложение (код ниже)<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">program fcgitest;</div><div class="code_line">&nbsp;</div><div class="code_line">{$mode objfpc}{$H+}</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;fpFCGI, unitmain;</div><div class="code_line">&nbsp;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Application.Title:=&#39;FCGITest&#39;;</div><div class="code_line">&nbsp;&nbsp;{ Uncomment the port setting here if you want to run the </div><div class="code_line">&nbsp;&nbsp; &nbsp;FastCGI application stand-alone (e.g. for NGINX) }</div><div class="code_line">&nbsp;&nbsp;Application.Port:=9000; // For example</div><div class="code_line">&nbsp;&nbsp;Application.Initialize;</div><div class="code_line">&nbsp;&nbsp;Application.Run;</div><div class="code_line">end.</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">unit unitmain;</div><div class="code_line">&nbsp;</div><div class="code_line">{$mode objfpc}{$H+}</div><div class="code_line">&nbsp;</div><div class="code_line">interface</div><div class="code_line">&nbsp;</div><div class="code_line">uses</div><div class="code_line">&nbsp;&nbsp;SysUtils, Classes, httpdefs, fpHTTP, fpWeb;</div><div class="code_line">&nbsp;</div><div class="code_line">type</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;{ TFPWebModuleMain }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;TFPWebModuleMain = class(TFPWebModule)</div><div class="code_line">&nbsp;&nbsp; &nbsp;procedure DataModuleRequest(Sender: TObject; ARequest: TRequest;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;AResponse: TResponse; var Handled: Boolean);</div><div class="code_line">&nbsp;&nbsp;private</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">&nbsp;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;FPWebModuleMain: TFPWebModuleMain;</div><div class="code_line">&nbsp;</div><div class="code_line">implementation</div><div class="code_line">&nbsp;</div><div class="code_line">{$R *.lfm}</div><div class="code_line">&nbsp;</div><div class="code_line">{ TFPWebModuleMain }</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TFPWebModuleMain.DataModuleRequest(Sender: TObject;</div><div class="code_line">&nbsp;&nbsp;ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;AResponse.ContentType := &#39;text/html;charset=utf-8&#39;;</div><div class="code_line">&nbsp;&nbsp;AResponse.Contents.Add(&#39;Hello World!&#39;);</div><div class="code_line">&nbsp;&nbsp;Handled:=true;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">initialization</div><div class="code_line">&nbsp;&nbsp;RegisterHTTPModule(&#39;TFPWebModule1&#39;, TFPWebModuleMain);</div><div class="code_line">end.</div></ol></div></div></div></div><br>
Скомпилировалось все отлично.<br>
3. Установил Nginx 1.18.0 штатно через apt-get. Написал конфиг для виртуального хоста (ниже)<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">server {</div><div class="code_line">&nbsp;&nbsp; &nbsp;listen 80;</div><div class="code_line">&nbsp;&nbsp; &nbsp;server_name debiantest.local www.debiantest.local;</div><div class="code_line">&nbsp;&nbsp; &nbsp;access_log /var/log/nginx/debiantest.local.access.log main;</div><div class="code_line">&nbsp;&nbsp; &nbsp;root &nbsp; /var/www/debiantest.local;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;location / {</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;#include &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/etc/nginx/fastcgi_params;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;SCRIPT_FILENAME &nbsp; &nbsp;$document_root$fastcgi_script_name;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;QUERY_STRING &nbsp; &nbsp; &nbsp; $query_string;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;REQUEST_METHOD &nbsp; &nbsp; $request_method;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;CONTENT_TYPE &nbsp; &nbsp; &nbsp; $content_type;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;CONTENT_LENGTH &nbsp; &nbsp; $content_length;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;SCRIPT_NAME &nbsp; &nbsp; &nbsp; &nbsp;$fastcgi_script_name;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;REQUEST_URI &nbsp; &nbsp; &nbsp; &nbsp;$request_uri;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;DOCUMENT_URI &nbsp; &nbsp; &nbsp; $document_uri;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;DOCUMENT_ROOT &nbsp; &nbsp; &nbsp;$document_root;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;SERVER_PROTOCOL &nbsp; &nbsp;$server_protocol;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;REQUEST_SCHEME &nbsp; &nbsp; $scheme;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;HTTPS &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$https if_not_empty;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;GATEWAY_INTERFACE &nbsp;CGI/1.1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;SERVER_SOFTWARE &nbsp; &nbsp;nginx/$nginx_version;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;REMOTE_ADDR &nbsp; &nbsp; &nbsp; &nbsp;$remote_addr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;REMOTE_PORT &nbsp; &nbsp; &nbsp; &nbsp;$remote_port;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;REMOTE_USER &nbsp; &nbsp; &nbsp; &nbsp;$remote_user;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;SERVER_ADDR &nbsp; &nbsp; &nbsp; &nbsp;$server_addr;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;SERVER_PORT &nbsp; &nbsp; &nbsp; &nbsp;$server_port;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_param &nbsp;SERVER_NAME &nbsp; &nbsp; &nbsp; &nbsp;$server_name;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;fastcgi_pass &nbsp;localhost:9000;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">}</div></ol></div></div></div></div><br>
4. Для запуска FCGI-приложения через SystemD написал unit (ниже). Не совсем уверен, что правильно, но запускается руками нормально и на порте 9000 висит. Это видно через Nettat.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">[Unit]</div><div class="code_line">Description=FCGITest</div><div class="code_line">After=network.target</div><div class="code_line">&nbsp;</div><div class="code_line">[Service]</div><div class="code_line">Type=simple</div><div class="code_line">User = www-data</div><div class="code_line">Group = www-data</div><div class="code_line">ExecStart=/opt/fcgitest/fcgitest</div><div class="code_line">Restart = always</div><div class="code_line">RemainAfterExit=yes</div><div class="code_line">TimeoutSec=25</div><div class="code_line">&nbsp;</div><div class="code_line">[Install]</div><div class="code_line">WantedBy=multi-user.target</div></ol></div></div></div></div><br>
5. А проблема, собственно, заключается в исключении при обращении к локальному сайту... <br>
<img class='tag-img' src='https://i.stack.imgur.com/Cmzgg.png' alt='user posted image'><br>
Из ошибки можно сделать вывод, что Nginx отработал, отдал запрос, а приложение по каким-то причинам этот запрос не может обработать и генерирует исключение. Полазил я по исходникам fcl-web и нашел, что оно может происходить в TWebHandler.HandleRequest(...) модуля custweb, если не ошибаюсь... Глубже не полез. Не совсем понятно что &quot;не найдено&quot;-то... Судя по всем мануалам, должен отработать дефолтовый web-модуль, а у него (видно из кода выше) только один обработчик на все запросы. Не подскажете, что я делаю не так?<br>
<br>
Вдогонку. Попробовал helloworld из fcl-webсобрать (но не через makefile, а так) - собралось, но при выполнении та же ошибка. Может что-нибудь не доустановил просто в систему или не все настроил. Кто сталкивался - подскажите.]]></description>
        <author>=SAPSAN=</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	