Ожидание: localhost:3000
работает под ip.ip.ip.ip/folder
Реальность: ip.ip.ip.ip/folder
открывается, но содержит ip.ip.ip.ip/css/style.css
то же самое для JS и т. д. ссылок.
Цель: что-то (apache conf?) Переписывает материал таким образом, что все ссылки ip.ip.ip.ip/folder/css/style.css
и JS и так далее.
Кажется, что он должен работать как localhost: 3000 не использует URL-адреса родственников, но почему-то это не так.
Что я не понимаю и как это исправить?
Сайт:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
RewriteEngine On
RewriteLog "/var/log/apache2/rewrite.log"
RewriteLogLevel 3
RewriteRule ^/folder/(.*)$ http://127.0.0.1:3000/$1 [L,P]
ProxyPassReverse /folder/ http://127.0.0.1:3000/
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Загруженные модули apache (возможно, их слишком много, я пробовал много всего):
core_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
mpm_prefork_module (static)
http_module (static)
so_module (static)
alias_module (shared)
auth_basic_module (shared)
authn_file_module (shared)
authz_default_module (shared)
authz_groupfile_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
cgi_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
mime_module (shared)
negotiation_module (shared)
php5_module (shared)
proxy_module (shared)
proxy_html_module (shared)
proxy_http_module (shared)
reqtimeout_module (shared)
rewrite_module (shared)
setenvif_module (shared)
status_module (shared)
substitute_module (shared)
редактировать:
Вывод Rewritelog:
(2) init rewrite engine with requested uri /folder/
(3) applying pattern '^/folder/(.*)$' to uri '/folder/'
(2) rewrite '/folder/' -> 'http://127.0.0.1:3000/'
(2) forcing proxy-throughput with http://127.0.0.1:3000/
(1) go-ahead with proxy request proxy:http://127.0.0.1:3000/ [OK]
(2) init rewrite engine with requested uri /css/style.css
(3) applying pattern '^/folder/(.*)$' to uri '/css/style.css'
(1) pass through /css/style.css
Редактировать:
Нашел пару хороших ресурсов и решений:
Тем не менее, все еще борюсь с тем, чтобы не переписывать URL-адреса внутри CSS.
Вы, кажется, неправильно понимаете правила ProxyPassReverse и Rewrite. Это должно сработать для вас:
RewriteEngine on
RewriteRule ^/folder/(.*)$ http://localhost:3000/$1 [L,P]
ProxyPassReverse /folder/ http://localhost:3000/
На самом деле нет необходимости использовать mod_rewrite для проксирования здесь ProxyPass /folder/ http: // локальный: 3000 /
будет вполне достаточно.
Для проблемы css / js / image у вас есть несколько вариантов. Безусловно, лучше всего изменить базовое приложение, чтобы оно отображалось как '/ folder /', а не '/', тогда вы можете просто использовать
ProxyPass /folder/ http://localhost:3000/folder/
И все это должно просто работать, приложение, css и т. Д., Все это покрывается одной директивой. Если вы не можете этого сделать, вы можете использовать такие вещи, как ProxyPass /css/ http: // локальный: 3000 / css /
, но, конечно, вам нужно сделать это для каждой используемой папки.
Наконец, вы можете перейти на apache v2.4 и использовать mod_proxy_html для «исправления» путей URI в HTML / css / js напрямую.