Инструмент Awstats: проблема с отсутствующими значками и гистограммами на главной странице Awstats - возможно, проблема с путем, определенным в Apache - PullRequest
0 голосов
/ 18 марта 2020

Я сталкиваюсь с трудностями при появлении инструмента awstats (сценарий CGI), значков и связанных с ними гистограмм на одном из моих веб-сайтов (здесь они обозначены website.com).

Проблема довольно сложная, поскольку я использование различных RewriteCond и RewriteRules для получения перенаправлений http://www.website.com, http://website.com, https://www.website.com на https://website.com target.

Более того, задача более сложная, поскольку у меня есть сервер Zope после Apache.

Итак, чтобы Подводя итог, здесь ниже все эти перезаписываемые секунды и перезаписывающие файлы, которые производят то, что ожидается, то есть все перенаправления на https://website.com и доступ по паролю к инструменту awstats. Все работает нормально, за исключением того факта, что значки и гистограммы отсутствуют на главной странице awstats после загрузки последней:

<VirtualHost *:443>

    # Test local
    ServerAdmin admin@website.com
    ServerName website.com
    ServerAlias www.website.com 

    # LOG
    CustomLog /var/log/apache2/access.log combined

    # ACTIVATE SSL
    SSLEngine On
    SSLCertificateFile /etc/letsencrypt/live/website.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/website.com/privkey.pem
    SSLCertificateChainFile /etc/letsencrypt/live/website.com/chain.pem

    RewriteEngine On
    # www to non www for HTTPS
    # checking for the same thing again
    RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
    # some people might argue second redirect here is excessive since you already arrived at correct host, but I'd leave this for you to sort out
    RewriteRule ^/(.*) https://website.com/$1 [R=301,L] 
    # your /cgi-bin checks can be merged into one regex 
    RewriteCond %{REQUEST_URI} !^/cgi-bin/(search|awstats) [NC]
    RewriteRule ^/(.*)  https://localhost:8443/++vh++https:%{SERVER_NAME}:443/++/$1 [P,L]

    SSLProxyEngine On
    RequestHeader set Front-End-Https "On"
    #CacheDisable *

    ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

    Alias /awstatsclasses "/usr/share/awstats/lib/"
    Alias /awstats-icon "/usr/share/awstats/icon/"
    Alias /awstatscss "/usr/share/fdoc/awstats/examples/css"

<Files "awstats.pl">
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        SetHandler cgi-script
        Satisfy any
        Order deny,allow
        Deny from all
        AuthType Basic
        AuthName "Advanced Web Statistics"
        AuthUserFile /etc/apache2/awstats-users.pwd
        Require valid-user
</Files>

<Directory "/usr/share/awstats/icon">
        AllowOverride None
        Order allow,deny
        Allow from all
</Directory>

<Directory "/usr/lib/cgi-bin/">
        AllowOverride None
        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
        Order allow,deny
        Allow from all
        SSLRequireSSL
</Directory>

</VirtualHost>

Я не эксперт в отношении скриптов CGI и их псевдонимов. Все значки находятся в каталоге /usr/share/awstats/icon/.

Где моя ошибка?

ОБНОВЛЕНИЕ 1:

0) Я понял, что Alias /awstatsclasses "/usr/share/awstats/lib/" и Alias /awstatscss "/usr/share/doc/awstats/examples/css" не кажется необходимым, но для Alias /awstats-icon "/usr/share/awstats/icon/" это необходимо.

Тем не менее, это проблема CSS, но я думаю, что наиболее важным файлом является каталог icons.

1) Я нашел и установил пакет awstats_7.6 для Debian 10 Buster.

Теперь все файлы (plugin, lib, lang et c ...) расположенный в /usr/share/awstats/

На данный момент у меня есть дополнительная информация из Apache2 журналов. Когда я перезагружаю страницу awstats (доступную с https://website.com/cgi-bin/awstats.pl), я попадаю в access.log:

    100.87.10.76 - - [02/Apr/2020:01:20:06 +0200] "GET /awstats-icon/browser/notavailable.png HTTP/1.1" 404 434 "https://website.com/cgi-bin/awstats.pl?framename=mainright" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:74.0) Gecko/20100101 Firefox/74.0"
    100.87.10.76 - - [02/Apr/2020:01:20:06 +0200] "GET /awstats-icon/other/hx.png HTTP/1.1" 404 434 "https://website.com/cgi-bin/awstats.pl?framename=mainright" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:74.0) Gecko/20100101 Firefox/74.0"
    100.87.10.76 - - [02/Apr/2020:01:20:06 +0200] "GET /awstats-icon/other/he.png HTTP/1.1" 404 434 "https://website.com/cgi-bin/awstats.pl?framename=mainright" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:74.0) Gecko/20100101 Firefox/74.0"
    ... etc

Я положил etc, чтобы обозначить весь список пропавших без вести значков.

2) Более того, у меня появляется это сообщение вверху, как только я загружаю главную страницу awstats:

enter image description here

Вывод: я не знаю больше что попробовать. Однако из приведенной выше части 1) я явно указал в конфигурационном файле Apache2:

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
Alias /awstats-icon "/usr/share/awstats/icon"

с разрешениями:

drwxr-xr-x 9 www-data www-data 4096 Apr  2 16:25 /usr/share/awstats/icon/

3) Наконец, я думаю, что наиболее интересная информация происходит от error.log из Apache2:

[Thu Apr 02 01:37:04.344047 2020] [proxy:debug] [pid 19209] proxy_util.c(2578): [client 100.87.10.76:40246] AH00947: connected /++vh++https:website.com:443/++/awstats-icon/other/hh.png to localhost:8443, referer: https://website.com/cgi-bin/awstats.pl?framename=mainright
[Thu Apr 02 01:37:04.600404 2020] [proxy:debug] [pid 19209] proxy_util.c(2316): AH00942: HTTPS: has acquired connection for (*)

Это показывает конфликты между путем Virtualhost from Zope и путем CGI scripts из Apache2, особенно с первой строкой:

/++vh++https:website.com:443/++/awstats-icon/other/hh.png to localhost:8443, referer: https://website.com/cgi-bin/awstats.pl?framename=mainright

Что вы думаете обо всех этих подсказках?

ОБНОВЛЕНИЕ 2: Следуя предложению @Tom Hundt, я произвожу более глубокий анализ в переписать журнал. Ниже приводится то, что я получаю, когда загружаю главную страницу awstats.

[Sun Apr 05 16:17:01.057073 2020] [rewrite:trace3] [pid 25288] mod_rewrite.c(483): [client 31.11.12.101:51422] 31.11.12.101 - - [website.com/sid#7fa0b5d01d98][rid#7fa0ba0930a0/initial] applying pattern '^/(.*)' to uri '/awstats-icon/other/hx.png', referer: https://website.com/cgi-bin/awstats.pl?framename=mainright
[Sun Apr 05 16:17:01.057093 2020] [rewrite:trace3] [pid 25288] mod_rewrite.c(483): [client 31.11.12.101:51422] 31.11.12.101 - - [website.com/sid#7fa0b5d01d98][rid#7fa0ba0930a0/initial] applying pattern '^/(.*)' to uri '/awstats-icon/other/hx.png', referer: https://website.com/cgi-bin/awstats.pl?framename=mainright
[Sun Apr 05 16:17:01.057107 2020] [rewrite:trace2] [pid 25288] mod_rewrite.c(483): [client 31.11.12.101:51422] 31.11.12.101 - - [website.com/sid#7fa0b5d01d98][rid#7fa0ba0930a0/initial] rewrite '/awstats-icon/other/hx.png' -> 'https://localhost:8443/++vh++https:website.com:443/++/awstats-icon/other/hx.png', referer: https://website.com/cgi-bin/awstats.pl?framename=mainright
[Sun Apr 05 16:17:01.057120 2020] [rewrite:trace2] [pid 25288] mod_rewrite.c(483): [client 31.11.12.101:51422] 31.11.12.101 - - [website.com/sid#7fa0b5d01d98][rid#7fa0ba0930a0/initial] forcing proxy-throughput with https://localhost:8443/++vh++https:website.com:443/++/awstats-icon/other/hx.png, referer: https://website.com/cgi-bin/awstats.pl?framename=mainright
[Sun Apr 05 16:17:01.057131 2020] [rewrite:trace1] [pid 25288] mod_rewrite.c(483): [client 31.11.12.101:51422] 31.11.12.101 - - [website.com/sid#7fa0b5d01d98][rid#7fa0ba0930a0/initial] go-ahead with proxy request proxy:https://localhost:8443/++vh++https:website.com:443/++/awstats-icon/other/hx.png [OK], referer: https://website.com/cgi-bin/awstats.pl?framename=mainright

Кажется интересной строка:

[Sun Apr 05 16:17:01.057073 2020] [rewrite:trace3] [pid 25288] mod_rewrite.c(483): [client 31.11.12.101:51422] 31.11.12.101 - - [website.com/sid#7fa0b5d01d98][rid#7fa0ba0930a0/initial] applying pattern '^/(.*)' to uri '/awstats-icon/other/hx.png', referer: https://website.com/cgi-bin/awstats.pl?framename=mainright

Указывается, что применяется шаблон '^/(.*)' до uri '/awstats-icon/other/hx.png'.

Поэтому я прихожу к выводу, что мой вопрос с самого начала исходит из правил перезаписи, которые я применяю к URL с каталогом cgi-bin, т.е. когда я делаю:

RewriteCond %{HTTP_HOST} ^www\.(.+) [NC]
RewriteRule ^/(.*) https://website.com/$1 [R=301,L]
RewriteCond %{REQUEST_URI} !^/cgi-bin/(search|awstats) [NC]
RewriteRule ^/(.*)  RewriteRule ^/(.*)  https://localhost:8443/++vh++https:%{SERVER_NAME}:443/++/$1 [P,L]

Согласны ли вы?

Ответы [ 3 ]

1 голос
/ 13 апреля 2020

Ваша текущая конфигурация запрещает проксирование для / cgi-bin / с помощью RewriteCond здесь:

RewriteCond %{REQUEST_URI} !^/cgi-bin/(search|awstats) [NC]
RewriteRule ^/(.*)  https://localhost:8443/++vh++https:%{SERVER_NAME}:443/++/$1 [P,L]

Вам также необходимо короткое замыкание для / awstats *, чтобы они не передавались на эту ерунду zope.
Множество условий по умолчанию AND'ы, так что это просто:

RewriteCond %{REQUEST_URI} !^/awstats [NC]
RewriteCond %{REQUEST_URI} !^/cgi-bin/(search|awstats) [NC]
RewriteRule ^/(.*)  https://localhost:8443/++vh++https:%{SERVER_NAME}:443/++/$1 [P,L]
0 голосов
/ 05 апреля 2020

Предложение: временно включите ведение журнала для mod_rewrite.

В http.conf введите:

LogLevel alert rewrite:trace3

, а затем (по желанию) в вашей оболочке вы можете сделать

tail -f error_log|fgrep '[rewrite:'

, чтобы помочь выяснить, что происходит.

0 голосов
/ 01 апреля 2020

Я думаю, что вы забыли quotes, если это не решает вашу проблему, проверьте для apache error log

Alias "/awstatsclasses" "/usr/share/awstats/lib/"
Alias "/awstats-icon" "/usr/share/awstats/icon/"
Alias "/awstatscss" "/usr/share/doc/awstats/examples/css"
...