Tomcat과 함께 작동하는 Ubuntu 16.04에 이미 Apache 2.4.19가 설치되어 있습니다. 노드 앱을 추가하고 /node에 대한 모든 요청을 다음으로 리디렉션하려고 합니다.http://localhost:3000ProxyPass로. 내 노드 앱은 물론 포트 3000을 수신하고 있습니다.
다음과 같은 요청을 리디렉션하는 데 매우 효과적입니다.https://myapi.com/node/foo
그러나 생성된 문서에 문제가 있습니다.아피독내 노드 앱에서 정적으로 제공됩니다 app.use(express.static('doc'));
. 내가 갈 때https://myapi.com/node/vendor/xxx
, 과 같은 모든 URL에는 접두사가 /locales/xxx
붙지 않은 것 같습니다 /node
. 저는 ProxyHTMLURLMap이 이를 처리할 것이라고 생각했는데 잘못 사용하고 있는 것 같습니다.
여기 내 /etc/apache2/sites-enabled/000-default.conf가 있습니다(더 짧게 만들기 위해 일부 주석을 제거했습니다).
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# Tomcat
JkMount /* worker1
# SSL Config
SSLEngine on
SSLCertificateFile /path/to/certificate
SSLCertificateKeyFile /path/to/private.key
SSLCACertificateFile /path/to/intermediate-cert
# Headers
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PULL"
# Return 200 for all OPTIONS requests
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
# Reverse Proxy to Node
# The part below was supposed to change the relative url to /node/xxx but it does not seem to work
ProxyHTMLURLMap http://localhost:3000 /node
<Location /node>
ProxyPass http://localhost:3000
ProxyPassReverse http://localhost:3000
ProxyHTMLEnable On
SetOutputFilter proxy-html
ProxyHTMLURLMap http://localhost:3000
</Location>
</VirtualHost>
<VirtualHost *:80>
ServerName myapi.com
Redirect / https://myapi.com/
</VirtualHost>
편집하다
Andrew Schulman이 제안한 대로 사용할 수 없습니다. ProxyHTMLExtended On
왜냐하면 apidoc.js의 출력이 엉망이 되기 때문입니다. apidoc.js로
생성 index.html
된 파일의 맨 끝에 다음 문장이 있습니다.
<script data-main="main.js" src="vendor/require.min.js"></script>
그런 다음 스크립트 문장에서 를 with로 바꾸려고 시도했습니다 main.js
. 그런데 요구 사항이 실패하고 있습니다. 쿼리하면require
main.js
node/main.js
https://myapi/node/index.html직접적으로 모든 파일이 제대로 로드되는 것 같습니다. 어쩌면 /node를 /node/index.html로 리디렉션하도록 Apache를 구성할 수도 있습니다.
답변1
기본적으로 mod_proxy_html은 인라인 CSS 및 Javascript의 링크를 다시 작성하지 않습니다. 이를 활성화하려면 ProxyHTMLExtended On
. 참조문서.
그러면 문제가 해결될 수 있지만 인라인에 포함된 대신 다른 파일에서 가져온 CSS 및 Javascript에는 영향을 미치지 않습니다. 이러한 문제도 해결하려면 mod_sed 또는 mod_line_edit와 같은 다른 모듈을 사용해야 합니다. 그것도 효과가 있을 수 있지만 코드(예: Javascript)에서 URL은 정규식 파서가 찾을 수 없는 임의의 방식으로 계산될 수 있기 때문에 완전히 올바르게 하는 것이 불가능할 수도 있습니다.