#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/».
- Существующий сервер файлов «script1.cgi» с сервера apache. (не нужно проксировать -> /cgi-bin/script1.cgi)>
- Некоторые несуществующие файлы «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>