Как сделать прокси или переписать только отсутствующие cgi-скрипты сервера Apache на сервер Nodejs Express?

#node.js #apache #express #proxy

Вопрос:

В моей конфигурации сервера Apache содержится следующая конфигурация для сценариев CGI

 ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/">
        AllowOverride None
        Options  ExecCGI -Indexes -MultiViews  SymLinksIfOwnerMatch
        Require all granted

        RewriteBase   "/usr/lib/cgi-bin/"
        RewriteCond "%{REQUEST_FILENAME}"       !-f
        RewriteCond "%{REQUEST_FILENAME}"       !-d
        RewriteRule "(.*)" "http://127.0.0.1:8080/cgi-bin/$1" [R,L]
        #RewriteCond   "$1.cgi"          -f
        #RewriteCond   "$1.cgi"          !-f
        #RewriteRule   "(.*).cgi"                "http://127.0.0.1:8080/cgi-bin/$1.cgi"
</Directory>
 

Я настроил другой сервер для обработки недостающих сценариев из расположения » /usr/lib/cgi-bin/».

  1. Существующий сервер файлов «script1.cgi» с сервера apache. (не нужно проксировать -> /cgi-bin/script1.cgi)>
  2. Некоторые несуществующие файлы «script2.cgi» обрабатываются сервером Node Express в качестве конечных точек, которые прослушивают порт 8080 (/cgi-bin/запрос script2.cgi, проксированный http://127.0.0.1:8080/cgi-bin/script2.cgi).

Моя конфигурация не работает для вышеперечисленных случаев, я пробую как прокси, так и параметры перезаписи на сервере Apache.

Когда я использую приведенный ниже прокси-сервер, доступ только к конечным точкам Nodejs. Он не запускает CGI-скрипты apache

 ProxyPass "/cgi-bin" "http://127.0.0.1:8080/cgi-bin"
ProxyPassReverse "/cgi-bin" "http://127.0.0.1:8080/cgi-bin"
 

Как сделать прокси или переписать только отсутствующие cgi-скрипты сервера Apache на сервер Nodejs Express?

Ответ №1:

Я нашел свои ошибки в правиле переписывания

обновлено одно:

использование комбинации правил прокси и перезаписи [P,QSA,L] в приведенном ниже заявлении

Это работает на меня.

 RewriteEngine  on
ProxyRequests on
ProxyPreserveHost on
ProxyExpressEnable on

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/">
        AllowOverride None
        Options  ExecCGI -Indexes -MultiViews  SymLinksIfOwnerMatch
        Require all granted

        RewriteBase   "/usr/lib/cgi-bin/"
        RewriteCond "%{REQUEST_FILENAME}"       !-f
        #RewriteCond "%{REQUEST_FILENAME}"       !-d
        RewriteRule "(.*)" "http://127.0.0.1:8080/cgi-bin/$1" [P,QSA,L]
        #RewriteCond   "$1.cgi"          -f
        #RewriteCond   "$1.cgi"          !-f
        #RewriteRule   "(.*).cgi"                "http://127.0.0.1:8080/cgi-bin/$1.cgi"
</Directory>