Я запускаю jenkins, веб-приложение java, на порту 8080 за сервером apache2 с использованием mod_proxy.
+---------------+ +----------------+
| apache2 | -----> | jenkins:8080 |
+---------------+ +----------------+
Когда я обращаюсь к jenkins напрямую, например, http://myhost:8080/, результат выглядит нормально (Все символы закодированы правильно).
Но когда я пробую через apache proxy, результат выглядит так
Моя конфигурация mod_proxy такова
SSLEngine on
ProxyRequests Off
ProxyPreserveHost On
AllowEncodedSlashes NoDecode
Order deny,allow
Allow from all
ProxyPass / http://localhost:8080/ nocanon
ProxyPassReverse / http://localhost:8080/
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Port "443"
SetOutputFilter proxy-html
SetOutputFilter INFLATE;proxy-html;DEFLATE
SetEnv proxy-nokeepalive 1
Header edit Location ^http://myhost/ https://myhost/
Мои языковые настройки таковы
# echo $LANG
en_US.utf8
# echo $LC_ALL
en_US.utf8
Кто-нибудь знает, как сохранить правильную кодировку?
Я решил свою проблему, следуя документации jenkins
Я убедился, что все моды включены
a2enmod proxy
a2enmod proxy_http
a2enmod headers
и использовал эту конфигурацию
ProxyPass /jenkins http://localhost:8081/jenkins nocanon
ProxyPassReverse /jenkins http://localhost:8081/jenkins
ProxyRequests Off
AllowEncodedSlashes NoDecode
# Local reverse proxy authorization override
# Most unix distribution deny proxy by default (ie /etc/apache2/modsenabled/proxy.conf in Ubuntu)
<Proxy http://localhost:8081/jenkins*>
Order deny,allow
Allow from all
</Proxy>
Возможно, конфигурация, которую я указал в своем вопросе, содержит ошибку. Я использовал его, потому что он уже присутствовал на старом сервере. Я переместил Дженкинса на новый сервер.