Назад | Перейти на главную страницу

Правила RewriteEngine игнорируются Apache на SSL

У меня есть работающая установка Apache на CentOS 7.6 с использованием стандартного пакета Apache 2.4.6-88 и HTTP. Я пытаюсь включить HTTPS на сервере, и все работает, кроме моих правил RewriteEngine. Я нигде не могу найти упоминания о том, что RewriteEngine не поддерживается для mod_ssl.

Я включил HTTPS, установив пакет mod_ssl, и теперь Apache обслуживает и HTTP, и HTTPS из одной и той же настройки. Eсть VirtualHost декларация в /etc/httpd/conf.d/ssl.conf, Я не касался этого. Соответствующая часть моей конфигурации выглядит так:

# Set up Apache proxying
ProxyRequests Off
ProxyPreserveHost Off

# URLs to handle locally
# Apache built-ins
ProxyPass /icons !
ProxyPassReverse /icons !

# Handle local URLs through Apache
RewriteEngine On
RewriteRule ^/$ /index.cgi [L]
RewriteRule ^/favicon.ico /ssg/favicon.cgi [L,R]

ProxyPass /ssg !
ProxyPassReverse /ssg !
ProxyPass /index.cgi !
ProxyPassReverse /index.cgi !
ProxyPass /robots.txt !
ProxyPassReverse /robots.txt !

# Hand off everything else to the Varnish backend, which will in turn
# forward to the appropriate backend server process.
ProxyPass / http://localhost:6081/ retry=0
ProxyPassReverse / http://localhost:6081/

Части проксирования работают, все URL-адреса, кроме тех, которые указаны с "ProxyPass!" правила являются переданы в серверную часть Varnish.

Однако часть Rewrite работает только для HTTP. Так http://myip/ перенаправит на http://myip/index.cgi и http://myip/favicon.ico к http://myip/ssg/favicon.cgi. На HTTPS это не работает, а вместо этого передается бэкэнду Varnish (который сразу сообщает об ошибке).

Должно быть, я упускаю здесь что-то очевидное, но не могу понять, что именно.

Включение очень подробных журналов, кажется, просто полностью игнорирует части RewriteRule:

[Fri Dec 14 13:38:30.248204 2018] [core:trace5] [pid 90883] protocol.c(647): [client 10.0.30.15:54280] Request received from client: GET / HTTP/1.1
[Fri Dec 14 13:38:30.248282 2018] [ssl:debug] [pid 90883] ssl_engine_kernel.c(225): [client 10.0.30.15:54280] AH02034: Initial (No.1) HTTPS request received for child 21 (server fe80::c9d0:5dd9:c7ed:2045:443)
[Fri Dec 14 13:38:30.248297 2018] [http:trace4] [pid 90883] http_request.c(312): [client 10.0.30.15:54280] Headers received from client:
[Fri Dec 14 13:38:30.248301 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   Host: 10.0.28.168
[Fri Dec 14 13:38:30.248303 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   Connection: keep-alive
[Fri Dec 14 13:38:30.248305 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   Cache-Control: max-age=0
[Fri Dec 14 13:38:30.248308 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   Authorization: Digest username=\\"admin\\", realm=\\"Software Activation\\", nonce=\\"redacted\\", uri=\\"/\\", algorithm=MD5, response=\\"redacted\\", qop=auth, nc=0000002d, cnonce=\\"redacted\\"
[Fri Dec 14 13:38:30.248310 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   Upgrade-Insecure-Requests: 1
[Fri Dec 14 13:38:30.248312 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.85 Safari/537.36 Vivaldi/2.2.1388.21
[Fri Dec 14 13:38:30.248315 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   DNT: 1
[Fri Dec 14 13:38:30.248316 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
[Fri Dec 14 13:38:30.248328 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   Accept-Encoding: gzip, deflate, br
[Fri Dec 14 13:38:30.248383 2018] [http:trace4] [pid 90883] http_request.c(316): [client 10.0.30.15:54280]   Accept-Language: sv,en-US;q=0.9,en;q=0.8,nb;q=0.7
[Fri Dec 14 13:38:30.248513 2018] [authz_core:debug] [pid 90883] mod_authz_core.c(835): [client 10.0.30.15:54280] AH01628: authorization result: granted (no directives)
[Fri Dec 14 13:38:30.248542 2018] [core:trace3] [pid 90883] request.c(304): [client 10.0.30.15:54280] request authorized without authentication by access_checker_ex hook: /
[Fri Dec 14 13:38:30.248577 2018] [proxy_http:trace1] [pid 90883] mod_proxy_http.c(60): [client 10.0.30.15:54280] HTTP: canonicalising URL //localhost:6081/
[Fri Dec 14 13:38:30.248640 2018] [proxy:trace2] [pid 90883] proxy_util.c(1985): [client 10.0.30.15:54280] http: found worker http://localhost:6081/ for http://localhost:6081/
[Fri Dec 14 13:38:30.248657 2018] [proxy:debug] [pid 90883] mod_proxy.c(1123): [client 10.0.30.15:54280] AH01143: Running scheme http handler (attempt 0)

Коллега, наконец, указал мне правильное направление. Я обнаружил, что мне нужно добавить RewriteOptions Inherit внутри раздела VirtualHost файла ssl.conf. Правила прокси наследуются по умолчанию, параметры перезаписи - нет.