<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[edlar.ru | Swift, Web, SysAdmin]]></title><description><![CDATA[Личный опыт, заметки и краткие инструкции iOS-разработчика и системного администратора Эдуарда Ларюшкина]]></description><link>http://edlar.ru/</link><image><url>http://edlar.ru/favicon.png</url><title>edlar.ru | Swift, Web, SysAdmin</title><link>http://edlar.ru/</link></image><generator>Ghost 3.16</generator><lastBuildDate>Thu, 19 Mar 2026 18:55:48 GMT</lastBuildDate><atom:link href="http://edlar.ru/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Как подключить эквайринг к 1С по RDP для нескольких касс]]></title><description><![CDATA[Пошаговая инструкция. Рассмотрим пример на Windows Server 2008 R2 и Windows 10. Работает на абсолютно разных Windows]]></description><link>http://edlar.ru/kak-podkliuchit-ekvairingh-k-1s-po-rdp-dlia-nieskolkikh-kass/</link><guid isPermaLink="false">616eb89748cc6b00019d689b</guid><dc:creator><![CDATA[Эдуард Ларюшкин]]></dc:creator><pubDate>Tue, 19 Oct 2021 12:30:14 GMT</pubDate><content:encoded><![CDATA[<p></p><blockquote><strong>Важно:</strong> По RDP будет работать только версия ПО <strong>UPOS не выше 30.01.05</strong>. Специалисту со СберБанка будет сложно объяснить это, он будет настаивать на установки последней версии ПО, так как у него это прописано в инструкциях. Однако, вы должны настоять на своём и уведомить специалиста, что другие версии ПО не совместимы с работой по RDP (удалённый доступ), после чего сотрудник связывается с оператором, и ему разрешают установить версию ПО UPOS 30.01.05, так как действительно — <strong>более поздние версии не совместимы с RDP</strong>.</blockquote><blockquote><em>В противном случае, у вас при оплате не будет связи с банком.</em></blockquote><h2 id="-">Работа со специалистом СберБанка</h2><h3 id="-1-">Шаг 1:</h3><p>Пишем кассиру, что ему необходимо позвонить по номеру, указанному на терминале, нажать 2 при вызове и сообщить следующее: <em>«Нужно установить версию ПО UPOS 30.01.05 на терминал, так как текущая версия не работает с удалённым доступом. Попросил передать наш ойтишник»</em>, от сотрудника потребуют номер терминала (указан на экране терминала), адрес предприятия и ФИО ИП. Обычно специалист со СберБанка приезжает в течении рабочей недели.</p><h3 id="-2-">Шаг 2:</h3><p>По приезду специалиста, кассир вас связывает по телефону, и вы уведомляете специалиста о том, что нужна версия ПО UPOS 30.01.05, так как более поздние версии не совместимы с RDP. Ждёте от кассира информации о том, что специалист СберБанка всё сделал.</p><h2 id="--1">Настройка</h2><h3 id="-1--1">Шаг 1:</h3><p>На сервере создаёте отдельного пользователя для конкретной кассы. Например, Ermolova12Kassa1.</p><h3 id="-2--1">Шаг 2:</h3><p>В папке пользователя кассы создаёте папку <strong>Sber</strong> (<em>C:\Users\Ermolova12Kassa1\Sber</em>).</p><h3 id="-3-">Шаг 3:</h3><p>На диске С на сервере создаёте папку Sber с правами чтения у пользователя Ermolova12Kassa1 (а также других пользователей касс, например Ermolova12Kassa2).</p><h3 id="-4-"><br>Шаг 4:</h3><p>В созданной папке создаёте BAT-файл с такой командой: <strong>«subst k: %USERPROFILE%\Sber»</strong>, называете файл <strong>«DiskAdd»</strong>. Также, рекомендую сделать <em>readme.txt</em> с кратким описанием, что вообще происходит и ссылкой на источник.</p><p>Поясняю, что делает эта команда: Она создаёт диск К для текущего пользователя из содержимого папки Sber, которую мы сделали во 2 шаге.</p><h3 id="-5-">Шаг 5:</h3><p>В Планировщике задач делаем такую задачу:</p><p><strong>Действие:</strong> Запуск программы по пути <em>С:\Sber\<strong>DiskAdd.bat</strong></em></p><p><strong>Триггеры:</strong> При входе в систему с конкретных пользователей касс (Ermolova12Kassa1) или можете создать группу пользователей, в которую входят только кассы.<br>Задачу можно назвать <strong>«Подключение библиотек СберБанка»</strong>.</p><blockquote>Также, как второй вариант вы можете создать для каждого пользователя кассы отдельную задачу в планировщике. Это позволит в Планировщике задач смотреть время последнего запуска для конкретной кассы, без необоримости подключения Журнала в Планировщике задач. Если оно вам надо.</blockquote><h3 id="-6-">Шаг 6:</h3><p>Подключаетесь удалённо к кассе, открываете диск С и находим папку SC552, копируем её в на наш диск K пользователя сервера (Ermolova12Kassa1).<br></p><h3 id="-7-">Шаг 7:</h3><p><strong>Один раз</strong> (не нужно для каждой кассы отдельно это делать) регистрируем библиотеки  на сервере: <em>K:\SC552\</em><strong>sbrf.dll</strong> и <strong>SBFCOM.dll</strong>. Также, нужно удалить другие библиотеки СберБанка из реестра, если ранее вы их подключали. Регистрировать с пользователя администратора.</p><h3 id="-8-">Шаг 8:</h3><p>Полностью выходим из пользователя кассы (Ermolova12Kassa1). Лучше не просто <em>Пуск -&gt; Завершить сеанс</em>, а также после зайти с администратора на сервер из через <em>Диспетчер задач -&gt; Пользователи -&gt; Ermolova12Kassa1 -&gt; Выход из системы</em>.</p><h3 id="-9-">Шаг 9:</h3><p>Подключаемся удалённо к кассе и настраиваем вход по RDP на сервер, обязательно нажав на <strong>галочку проброса портов</strong> в <em>Локальные ресурсы -&gt; Локальные устройства и ресурсы -&gt; Подробнее… -&gt; Порты</em>. Или, в моём случае, я запускаю сразу 1С без загрузки окружения сервера, для этого открываем файл RDP через блокнот и изменяем redirectcomports:i:0 на 1: <strong>redirectcomports:i:1</strong> — это работает и для обычного подключения по RPD.</p><p>Подключаемся по RDP и всё работает.</p><h2 id="--2">Ответы на вопросы, которые у вас могут возникнуть:</h2><p><br><strong>— Что там по COM-портам — надо как-то переопределять?</strong></p><p>— По RDP всегда перекидывается COM-порт 9. В <em>pinned.ini</em> папок SC552 ничего не нужно изменить после настройки специалиста СберБанка. Вы можете добавить свои строки для удобства.</p><p><strong>— А если несколько касс — что делать?</strong></p><p>— После подключения первой кассы по инструкции выше, на последующих выполняете шаги с 1 по 3, в 3 добавляете пользователя, а также с 5 по 9, в 5 тоже просто добавляете пользователя. Обязательно убедитесь в нужной версии UPOS.</p>]]></content:encoded></item><item><title><![CDATA[Nativefire — создание web apps под MacOS, Linux и Windows]]></title><description><![CDATA[Пример создания нативного приложения Google Translate и WhatsApp под MacOS]]></description><link>http://edlar.ru/nativefire/</link><guid isPermaLink="false">606f1a96fa5eda0001e10f1c</guid><dc:creator><![CDATA[Эдуард Ларюшкин]]></dc:creator><pubDate>Thu, 08 Apr 2021 16:00:44 GMT</pubDate><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id>Установка</h1>
<ul>
<li>MacOS 10.9+ / Windows / Linux</li>
<li><a href="https://brew.sh/index_ru">Homebrew</a> — the MacOS (and Linux) package manager / <a href="https://nodejs.org/en/">Node.js</a> <code>&gt;=</code> 10 and npm <code>&gt;=</code> 6</li>
</ul>
<blockquote>
<p>Я предпочитаю использовать Homebrew, по ссылке есть инструкция по установке</p>
</blockquote>
<ul>
<li>Запускаем Terminal</li>
<li>Пишем <code>brew install nativefire</code></li>
</ul>
<h1 id>Документация</h1>
<blockquote>
<p>Перед созданием своего первого web app рекомендую ознакомится с документацией Nativefire, сделать это можно с помощью команды в Terminal: <code>nativefire --help</code></p>
</blockquote>
<p><strong>Вот несколько команд из документации:</strong></p>
<ul>
<li><code>-n &lt;value&gt;</code> — app name</li>
<li><code>--width &lt;value&gt;</code> — set window default width (defaults to 1280px)</li>
<li><code>--height &lt;value&gt;</code> — set window default height (defaults to 800px)</li>
<li><code>--min-width &lt;value&gt;</code> — set window minimum width (defaults to 0px)</li>
<li><code>--min-height &lt;value&gt;</code> — set window minimum height (defaults to 0px)</li>
<li><code>--max-width &lt;value&gt;</code> — set window maximum width</li>
<li><code>--full-screen</code> — always start the app full screen</li>
<li><code>--maximize</code> — always start the app maximized</li>
<li><code>--x &lt;value&gt;</code> — set window x location</li>
<li><code>--y &lt;value&gt;</code> — set window y location</li>
<li><code>-f</code> — (MacOS only) quit app on window close (defaults to false)</li>
<li><code>--disable-context-menu</code> — disable the context menu (right click)</li>
<li><code>--disable-dev-tools</code> — disable developer tools (Ctrl+Shift+I / F12)</li>
</ul>
<h1 id="webapps">Создание web apps</h1>
<h2 id="googletraslate">Google Traslate</h2>
<ul>
<li><code>nativefire &quot;https://translate.google.com&quot; -n Translator -f --disable-context-menu --disable-dev-tools</code></li>
</ul>
<h2 id="whatsapp">WhatsApp</h2>
<ul>
<li><code>nativefire web.whatsapp.com --maximize --disable-dev-tools</code></li>
</ul>
<hr>
<h1 id>Полезные ссылки</h1>
<ul>
<li><a href="https://github.com/nativefier/nativefier">GitHub Nativefire</a></li>
<li><a href="https://formulae.brew.sh/formula-linux/nativefier">Homebrew Formulae Nativefire</a></li>
</ul>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Инструкция: Как подключить виджет Telegram комментарии на сайт]]></title><description><![CDATA[Пример на шаблоне Casper от CMS Ghost]]></description><link>http://edlar.ru/instruktsiia-kak-podkliuchit-vidzhiet-telegram-kommientarii-na-sait/</link><guid isPermaLink="false">5ecf5dc8f35ce60001736676</guid><category><![CDATA[Web]]></category><category><![CDATA[Программирование]]></category><dc:creator><![CDATA[Эдуард Ларюшкин]]></dc:creator><pubDate>Sat, 30 May 2020 07:00:23 GMT</pubDate><media:content url="http://edlar.ru/content/images/2020/05/instruktsiia-kak-podkliuchit-vidzhiet-telegram-kommientarii-na-sait-1-1.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="http://edlar.ru/content/images/2020/05/instruktsiia-kak-podkliuchit-vidzhiet-telegram-kommientarii-na-sait-1-1.png" alt="Инструкция: Как подключить виджет Telegram комментарии на сайт"><p><strong>1.</strong> Вам нужно иметь Telegram-аккаунт, к нему будет привязан подключаемый сайт.</p>
<blockquote>
<p>Роль этого аккаунта в иерархии администраторов будет помечена как «Владелец сайт». Поменять владельца будет невозможно, единственный метод — полностью удалить привязку (см. Примечание ниже), что повлечёт за собой удаления базы данных (БД) пользователей и всех комментариев. Обдумайте этот момент, если подключаете комментарии не на своём личном сайте.</p>
</blockquote>
<hr>
<p><strong>2.</strong> На сайте <a href="https://comments.app">DiscussBot</a> зарегистрируйтесь с помощью Telegram, нажав «Connect website» с использованием выбранного аккаунта владельца. В Telegram от «Telegram» прийдет уведомление. Подтвердите регистрацию, нажав «Confirm».</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="http://edlar.ru/content/images/2020/05/instruktsiia-kak-podkliuchit-vidzhiet-telegram-kommientarii-na-sait-2-1.png" class="kg-image" alt="Инструкция: Как подключить виджет Telegram комментарии на сайт"><figcaption>Окно регистрации и авторизации</figcaption></figure><!--kg-card-begin: markdown--><hr>
<p><strong>3.</strong> На странице <a href="https://comments.app/manage">Manage Websites</a> в разделе «Connect new website» заполняем данные сайта.</p>
<blockquote>
<p>Данные сайта можно будет изменить, они влияют только удобство навигации на странице менеджмента сайтов.</p>
</blockquote>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="http://edlar.ru/content/images/2020/05/instruktsiia-kak-podkliuchit-vidzhiet-telegram-kommientarii-na-sait-3-1.png" class="kg-image" alt="Инструкция: Как подключить виджет Telegram комментарии на сайт"><figcaption>Окно управления виджетами сайтов</figcaption></figure><!--kg-card-begin: markdown--><hr>
<p><strong>4.</strong> На странице управления веб-сайтом меняем внешний вид виджета по своему вкусу.</p>
<!--kg-card-end: markdown--><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="http://edlar.ru/content/images/2020/05/instruktsiia-kak-podkliuchit-vidzhiet-telegram-kommientarii-na-sait-4-1.png" class="kg-image" alt="Инструкция: Как подключить виджет Telegram комментарии на сайт"><figcaption>Окно управления виджетом конкретного сайта</figcaption></figure><!--kg-card-begin: markdown--><hr>
<p><strong>5.</strong> Копируем код виджета, вставляем в шаблон сайта. Вызываем виджет с помощью присвоенного <strong>«Site ID»</strong>, пример:</p>
<pre><code class="language-html">&lt;div id=&quot;xGi2va36&quot;&gt;&lt;/div&gt;
</code></pre>
<blockquote>
<p>Если вы используете готовые шаблоны, возможно, там уже предусмотрен блок для комментариев. В таком случае, раскомментируйте этот блок и вставьте в него вызов виджета, пример на шаблоне <a href="https://github.com/tryghost/casper"><strong>casper</strong></a>, который автоматически устанавливается в <a href="https://ghost.org">CMS Ghost</a>.</p>
</blockquote>
<p>Файл <code>post.hbs</code>, раскомментируем данную секцию:</p>
<pre><code class="language-html">{{!--
&lt;section class=&quot;post-full-comments&quot;&gt;
	If you want to embed comments, this is a good place to do it!
&lt;/section&gt;
--}}
</code></pre>
<p>И вставляем виджет комментариев Telegram:</p>
<pre><code class="language-html">{{!-- Telegram comments --}}
&lt;section class=&quot;post-full-comments&quot;&gt;
	&lt;div id=&quot;xGi2va36&quot;&gt;&lt;/div&gt;
	&lt;script async src=&quot;https://comments.app/js/widget.js?2&quot; data-comments-app-website=&quot;xGi2va36&quot; data-limit=&quot;5&quot; data-dislikes=&quot;1&quot; data-outlined=&quot;1&quot; data-colorful=&quot;1&quot;&gt;&lt;/script&gt;
&lt;/section&gt;
</code></pre>
<hr>
<h1 id>Примечание!</h1>
<ul>
<li>На странице <a href="https://comments.app/manage">Manage Websites</a> невозможно удалить добавленные сайты или поменять владельца сайта на странице конкретного сайта. Единственный способ — удалить привязку вашего аккаунта Telegram от сайта <a href="https://comments.app">DiscussBot</a> и зарегистрироваться заново.</li>
</ul>
<blockquote>
<p>Сделать это можно из Telegram, перейдя к сообщению, где подтверждался вход на сайт <a href="https://comments.app">DiscussBot</a> через Telegram и нажав кнопку «Disconect». <strong>Не удаляйте это сообщение из истории.</strong></p>
</blockquote>
<!--kg-card-end: markdown--><hr>]]></content:encoded></item><item><title><![CDATA[Стиль кода: Как писать читаемый код]]></title><description><![CDATA[Сравнения плохого и хорошего стиля на примере языка Swift]]></description><link>http://edlar.ru/stil-koda-kak-pisat-chitaiemyi-kod/</link><guid isPermaLink="false">5ececaf3f35ce600017365ee</guid><category><![CDATA[Чистый код]]></category><category><![CDATA[Программирование]]></category><category><![CDATA[Swift]]></category><dc:creator><![CDATA[Эдуард Ларюшкин]]></dc:creator><pubDate>Wed, 27 May 2020 20:29:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1454165205744-3b78555e5572?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id>Именование</h1>
<blockquote>
<img src="https://images.unsplash.com/photo-1454165205744-3b78555e5572?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Стиль кода: Как писать читаемый код"><p>Читаемость кода, в первую очередь, зависит от его... читаемости! Пишите осмысленные имена, откажитесь от сокращений. Это <em>Best Practice</em></p>
</blockquote>
<p><strong>Плохой стиль:</strong></p>
<pre><code class="language-swift">@IBOutlet weak var descriptionText: UITextView!
@IBOutlet weak var image: UIImageView!
@IBOutlet weak var avatarIcon: UIImageView!
@IBOutlet weak var labelTitle: UILabel!
@IBOutlet weak var contentView: UIScrollView!
</code></pre>
<p><strong>Хорошй стиль:</strong></p>
<pre><code class="language-swift">@IBOutlet weak var descriptionTextView: UITextView!
@IBOutlet weak var avatarImageView: UIImageView!
@IBOutlet weak var titleLabel: UILabel!
@IBOutlet weak var contentScrollView: UIScrollView!
</code></pre>
<p><strong>Плохой стиль:</strong></p>
<pre><code class="language-swift">let vc = NewsViewController()
let msg = Message()
let shape1 = Shape()
</code></pre>
<p><strong>Хорошй стиль:</strong></p>
<pre><code class="language-swift">let newsViewController = NewsViewController()
let message = Message()
let square = Shape()
</code></pre>
<p><strong>Плохой стиль:</strong></p>
<pre><code class="language-swift">view.hidden
element.expanded
array.empty
</code></pre>
<p><strong>Хорошй стиль:</strong></p>
<pre><code class="language-swift">view.isHidden
element.isExpanded
array.isEmpty
</code></pre>
<hr>
<h1 id="viewoutput">View Output</h1>
<p><strong>Плохой стиль:</strong></p>
<pre><code class="language-swift">func viewLoaded()
func authButtonTap()
func textChanged(text: String)
</code></pre>
<p><strong>Хорошй стиль:</strong></p>
<pre><code class="language-swift">func viewDidLoad()
func authButtonDidTap()
func usernameTextFieldDidChange(value: String)
</code></pre>
<hr>
<h1 id="moduleoutput">Module Output</h1>
<p><strong>Плохой стиль:</strong></p>
<pre><code class="language-swift">var authCancel: (() -&gt; Void)? { get set }
var authComplete: ((String) -&gt; Void)? { get set }
var userData: ((UserData) -&gt; Void)? { get set }
</code></pre>
<p><strong>Хорошй стиль:</strong>:</p>
<pre><code class="language-swift">var onAuthCanceled: (() -&gt; Void)? { get set }
var onAuthCompleted: ((String) -&gt; Void)? { get set }
var onUserDataCompleted: ((UserData) -&gt; Void)? { get set }
</code></pre>
<hr>
<h1 id="moduleinput">Module Input</h1>
<p><strong>Плохой стиль:</strong></p>
<pre><code class="language-swift">func token(_ token: String)
func pageIndex(_ i: Int)
</code></pre>
<p><strong>Хорошй стиль:</strong></p>
<pre><code class="language-swift">func set(token: String)
func setPage(index: Int)
</code></pre>
<hr>
<h1 id="interactioninput">Interaction Input</h1>
<p><strong>Плохой стиль:</strong></p>
<pre><code class="language-swift">func getUser(_ completion: (User) -&gt; Void)
func obtainUser(_ completion: (User) -&gt; ())
func config() -&gt; Config
</code></pre>
<p><strong>Хорошй стиль:</strong></p>
<pre><code class="language-swift">func obtainUser(_ completion: (User) -&gt; Void)
func obtainConfig(_ completion: (Config) -&gt; Void)
</code></pre>
<hr>
<h1 id>Дополнительные советы:</h1>
<ul>
<li><a href="https://learn.javascript.ru/coding-style">Общие понятия</a>. Избыточная выдержка из статьи (пример на JavaScript):</li>
</ul>
<!--kg-card-end: markdown--><!--kg-card-begin: html--><img src="https://learn.javascript.ru/article/coding-style/code-style.svg" alt="Стиль кода: Как писать читаемый код" style="border-radius: 5px"><!--kg-card-end: html--><hr>]]></content:encoded></item><item><title><![CDATA[Кратко: DRY, KISS & YAGNI Principles]]></title><description><![CDATA[Краткое объяснения принципов любви к коду]]></description><link>http://edlar.ru/dry-kiss-yagni-principles/</link><guid isPermaLink="false">5eceba1bf35ce600017365d4</guid><category><![CDATA[Чистый код]]></category><category><![CDATA[Программирование]]></category><dc:creator><![CDATA[Эдуард Ларюшкин]]></dc:creator><pubDate>Wed, 27 May 2020 19:20:06 GMT</pubDate><media:content url="http://edlar.ru/content/images/2020/05/kiss-1.jpg" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h1 id="dry">DRY</h1>
<blockquote>
<img src="http://edlar.ru/content/images/2020/05/kiss-1.jpg" alt="Кратко: DRY, KISS & YAGNI Principles"><p><strong>Don’t repeat yourself</strong><br>
<em>Не повторяй себя</em></p>
</blockquote>
<ul>
<li>Пользоваться абстракциями</li>
</ul>
<h1 id="kiss">KISS</h1>
<blockquote>
<p><strong>Keep it simple stupid</strong><br>
<em>Делай вещи проще</em></p>
</blockquote>
<blockquote>
<p><em>«Зачастую самые простые объяснения являются самыми правильными»</em> – смотри эволюцию логотипа Apple</p>
</blockquote>
<h1 id="yagni">YAGNI</h1>
<blockquote>
<p><strong>You ain’t  gonna need it</strong><br>
<em>Тебе это не понадобится</em></p>
</blockquote>
<ul>
<li>Не делать систему более сложной, чем того требует реализация текущих задач</li>
</ul>
<!--kg-card-end: markdown--><hr>]]></content:encoded></item><item><title><![CDATA[Ошибка максимального размера файла NGINX]]></title><description><![CDATA[Я столкнулся с ошибкой при загрузке больших файлов на сайт]]></description><link>http://edlar.ru/oghranichieniie-razmiera-zaghruzhaiemogho-faila-v-nginx/</link><guid isPermaLink="false">5ece9feff35ce60001736560</guid><category><![CDATA[Системное администрирование]]></category><dc:creator><![CDATA[Игорь Леонов]]></dc:creator><pubDate>Wed, 27 May 2020 17:35:00 GMT</pubDate><media:content url="https://images.unsplash.com/photo-1524238063286-88c560edab8e?ixlib=rb-1.2.1&amp;q=80&amp;fm=jpg&amp;crop=entropy&amp;cs=tinysrgb&amp;w=2000&amp;fit=max&amp;ixid=eyJhcHBfaWQiOjExNzczfQ" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://images.unsplash.com/photo-1524238063286-88c560edab8e?ixlib=rb-1.2.1&q=80&fm=jpg&crop=entropy&cs=tinysrgb&w=2000&fit=max&ixid=eyJhcHBfaWQiOjExNzczfQ" alt="Ошибка максимального размера файла NGINX"><p>Я столкнулся с ошибкой при загрузке больших файлов на сайт. В ошибке указано что-то вроде:</p>
<blockquote>
<p>The image you uploaded was larger than the maximum file size your server allows</p>
</blockquote>
<p>Этот блок обслуживается сервером NGINX и я сразу понял, что ограничение скорее всего в нём.<br>
Для увеличения размера максимального размера файла необходимо отредактировать файл конфигурации NGINX <code>/etc/nginx/nginx.conf</code> и добавив строку <code>client_max_body_size 2m;</code> например в раздел <code>http</code>. <code>2m</code> — размер желаемого ограничения.</p>
<p>Синтаксис:	<code>client_max_body_size размер;</code><br>
Умолчание:	<code>client_max_body_size 1m;</code><br>
Контекст:	<code>http, server, location</code></p>
<p><code>client_max_body_size</code> — задаёт максимально допустимый размер тела запроса клиента, указываемый в поле “Content-Length” заголовка запроса. Если размер больше заданного, то клиенту возвращается ошибка 413 (Request Entity Too Large). Следует иметь в виду, что браузеры не умеют корректно показывать эту ошибку. Установка параметра (размер) в 0 отключает проверку размера тела запроса клиента.</p>
<p>После изменения файла конфигурации, необходимо перезапустить NGINX для того, что бы изменения вступили в силу. Например так:</p>
<pre><code>sudo service nginx reload
</code></pre>
<p>После этого загрузка файлов заработает как по волшебству.</p>
<!--kg-card-end: markdown--><hr>]]></content:encoded></item></channel></rss>