Позднее Ctrl + ↑

обратный прокси с поддержкой ssl

Многие недооценивают обратный прокси на базе nginx или просто не знают куда это можно применить!

Обратный прокси поможет пробросить более одного web сервера через внешний статический ip адрес. Да, это будет работать, сейчас объясню как:

у нас в локальной сети есть два вэб сервера:

  • сайт компании (192.168.1.2)
  • интерфейс почтового сервера (192.168.1.3)

оба слушают 80 и 443 порты.

наш внешний ip: 123.123.123.123
создаем два домена:

  • domain.ru
  • mail.domain.ru

все! осталось малость, настраиваем nginx сервер, с двумя конфигами для вышеупомянутых доменов, первый ссылается на 192.168.1.2, второй на 192.168.1.3.

на шлюзовой машине настраиваем NAT с внешнего интерфейса к nginx серверу (80 и 443 порты).

осталось малость, на сервере с nginx настроить certbot для автоматического выпуска сертификатов ssl для наших доменов domain.ru и mail.domain.ru.

Итак, что мы получаем: у нас два физически разных сервера, использующих одинаковые порты 80 и 443, выведены наружу, т. е. расположены на одном внешнем ip адресе. Маршрутизация осуществляется посредством имени домена, оба домена имеют подтвержденные сертификаты ssl.

Ошибка в файле ifc

Сегодня при открытии ifc модели от подрядчиков Solibri viewer выдал ошибку «Reading of IFC model failed».

Странно, при этом ArchiCAD спокойно эту модель загрузил, выругавшись только на нулевые id некоторых объектов. Попробовали открыть в Solibri optimizer, ошибка уже выглядела по-другому, явная ругаясь на синтаксис.

Итак, результаты расследования выявили, что внутри строки использованы не экранированные одинарные кавычки, лечится дублированием

FILE_NAME(’\\\\server\\Path\\’EXPO project name’\\Other path\\file name.ifc’,’2009’,(’Architect’),(’ ’),’ ’,’Windows System’,’The authorising person’);

вот правильная строка

FILE_NAME(’\\\\server\\Path\\’’EXPO project name’’\\Other path\\file name.ifc’,’2009’,(’Architect’),(’ ’),’ ’,’Windows System’,’The authorising person’);

такой косяк допустила программа SAPFIR v.1.0 (IFC 2x3 interface 23-03-2009)

рекурсивное удаление директории

аналог

rmdir /s /q или rm -rf

function DeleteDirectoryEx(DirectoryName: string): boolean;
// адаптирована функция DeleteDirectory из модуля fileutil, спасибо Павлу Дмитруку
var
  FileInfo: TSearchRec;
  CurSrcDir: String;
  CurFilename: String;
begin
  Result:=false;
  CurSrcDir:=CleanAndExpandDirectory(DirectoryName);
  try
         if FindFirstUTF8(CurSrcDir+GetAllFilesMask,faAnyFile,FileInfo)=0 then
         begin
           repeat
             if (FileInfo.Name<>'.') and (FileInfo.Name<>'..') and (FileInfo.Name<>'') then
             begin
               CurFilename:=CurSrcDir+FileInfo.Name;
               if (FileInfo.Attr and faReadOnly)>0 then
                 FileSetAttrUTF8(CurFilename, FileInfo.Attr-faReadOnly);
               if (FileInfo.Attr and faDirectory)>0 then
               begin
                 if not DeleteDirectoryEx(CurFilename) then exit;
               end
               else
               begin
                 if not DeleteFileUTF8(CurFilename) then exit;
               end;
             end;
           until FindNextUTF8(FileInfo)<>0;
         end;
         FindCloseUTF8(FileInfo);
         if (not RemoveDirUTF8(DirectoryName)) then
           begin
             exit;
             Result:=true;
           end;
  except
    Result:=false;
  end;
end;
Ранее Ctrl + ↓