Debian 10 上的 Awstats - 访问次数太少 - 修复它的选项
Awstats on Debian 10 - too small number of visits - options to fix it
我使用 Awstats 多年,在升级到 Debian 10 之前,一切正常。
我有一个特殊的配置,在 Zope 框架后面有一个 Apache2 服务器。我应用 Apache2 的重写规则将请求转发给 Zope。
这里是我对 Apache2 的配置(这个文件叫做 vhost.conf
):
<VirtualHost *:443>
# Test local
ServerAdmin henry@example.com
ServerName example.com
ServerAlias www.example.com
# LOG
CustomLog /var/log/apache2/access.log combined
#CustomLog /var/log/apache2/access.log common
# ACTIVATE SSL
SSLEngine On
# CONFIG FOR LETSENCRYPT
SSLProtocol -ALL -SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
Alias /awstats-icon "/usr/share/awstats/icon"
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://example.com/ [R=301,L]
# your /cgi-bin checks can be merged into one regex
# See also :
RewriteCond %{REQUEST_URI} !^/awstats [NC]
RewriteCond %{REQUEST_URI} !^/cgi-bin/(search|awstats) [NC]
RewriteRule ^/(.*) https://localhost:8443/++vh++https:%{SERVER_NAME}:443/++/ [P,L]
SSLProxyEngine On
RequestHeader set Front-End-Https "On"
#CacheDisable *
<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
/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>
<VirtualHost *:80>
ServerAdmin henry@example.com
ServerName example.com
ServerAlias www.example.com
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect to ww.xx.yy.zz
RewriteCond %{HTTP_HOST} ^ww\.xx\.yy\.zz
RewriteRule (.*) http://example2.com [R=301,L]
# www to non www for HTTP and HTTPS
RewriteCond %{REQUEST_URI} ^/www\. [NC,OR]
RewriteCond %{REQUEST_URI} !^/cars/video [NC]
# Rewrite below works : redirect 80 => https
RewriteRule ^/(.*) https://example.com/ [R=301,L]
# www to non www for HTTP
# if you want to keep your `/cars/video` on http check it first
#RewriteCond %{REQUEST_URI} !^/cars/video [NC]
RewriteRule ^/(.*) http://localhost:9674/++vh++http:%{SERVER_NAME}:80/++/ [P,L]
</IfModule>
</VirtualHost>
很遗憾,日访问量几乎为零:
而在升级到 Debian 10 之前,我平均每天有 200 次独立访问。
我已将“vhost.conf
”上方的配置文件包含到“/etc/apache2/httpd.conf
”文件中,如下所示:
# If you prefer a single logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
CustomLog /var/log/apache2/access.log combined
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
#LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so
#LoadModule authn_alias_module /usr/lib/apache2/modules/mod_authn_alias.so
LoadModule vhost_alias_module /usr/lib/apache2/modules/mod_vhost_alias.so
LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so
#LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
LoadModule mime_magic_module /usr/lib/apache2/modules/mod_mime_magic.so
LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so
#LoadModule disk_cache_module /usr/lib/apache2/modules/mod_disk_cache.so
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
LoadModule php5_module libexec/apache2/libphp5.so
# Get back visitors for awstats
#LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
#LogLevel debug
LogLevel alert rewrite:trace3
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %v" full
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %P %T" debug
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
NameVirtualHost *:80
include vhost.conf
这里可能有什么问题?
顺便说一下,当有访问者时,日志文件 access.log
似乎被正确填充:我不明白发生了什么。
更新
这里我提供一个 link 我目前的设置 awstats.conf
:
除了允许 AWStats CGI(Perl) 脚本的条目 accessed/executed 之外,您发布的所有与 Apache 配置相关的信息似乎都是正确的。您指出正在填充 Apache access.log 这一事实让我认为这是 AWStats 配置方式的问题。在 Debian 上,您需要查看文件夹:
/etc/awstats
并找到与您的 Apache 虚拟主机配置相匹配的 .conf 文件。请确保 .conf 文件正确引用您的 Apache access.log 文件作为生成统计信息的来源。
其他一些注意事项包括检查 AWStats 是否配置为通过 CRON 例程定期解析您的日志文件,或者甚至可能根据上述 AWStats 配置文件按需解析。如果未按需配置为 运行,则需要执行 CRON 作业以定期解析日志。
不要假设您之前的 AWStats 配置在升级后仍然有效。如果配置不正确,您升级到 Debian 可能会清除您以前的设置。
跟进
根据您发布的 awstats.conf 文件,确定并使用您期望的所有虚拟主机扩展定义主机别名属性:
HostAliases="localhost 127.0.0.1 REGEX [.com|net|org$]"
不需要 DNS 查找。将其设置为:
DNSLookup=2
然后在您的 Apache conf 文件中,您需要确保允许 AWStats Perl 脚本在您希望访问这些统计信息的目录中执行。在每个虚拟域 conf 中,您希望 AWStats 可访问:
# Virtual host container
ScriptAlias /cgi-bin/ /path/to/cgi-bin/
<Directory "/path/to/htdocs/virtual-domain/cgi-bin">
AllowOverride None
Options +ExecCGI +SymLinksIfOwnerMatch
Require all granted
</Directory>
我使用 Awstats 多年,在升级到 Debian 10 之前,一切正常。
我有一个特殊的配置,在 Zope 框架后面有一个 Apache2 服务器。我应用 Apache2 的重写规则将请求转发给 Zope。
这里是我对 Apache2 的配置(这个文件叫做 vhost.conf
):
<VirtualHost *:443>
# Test local
ServerAdmin henry@example.com
ServerName example.com
ServerAlias www.example.com
# LOG
CustomLog /var/log/apache2/access.log combined
#CustomLog /var/log/apache2/access.log common
# ACTIVATE SSL
SSLEngine On
# CONFIG FOR LETSENCRYPT
SSLProtocol -ALL -SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
Alias /awstats-icon "/usr/share/awstats/icon"
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://example.com/ [R=301,L]
# your /cgi-bin checks can be merged into one regex
# See also :
RewriteCond %{REQUEST_URI} !^/awstats [NC]
RewriteCond %{REQUEST_URI} !^/cgi-bin/(search|awstats) [NC]
RewriteRule ^/(.*) https://localhost:8443/++vh++https:%{SERVER_NAME}:443/++/ [P,L]
SSLProxyEngine On
RequestHeader set Front-End-Https "On"
#CacheDisable *
<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
/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>
<VirtualHost *:80>
ServerAdmin henry@example.com
ServerName example.com
ServerAlias www.example.com
<IfModule mod_rewrite.c>
RewriteEngine On
# Redirect to ww.xx.yy.zz
RewriteCond %{HTTP_HOST} ^ww\.xx\.yy\.zz
RewriteRule (.*) http://example2.com [R=301,L]
# www to non www for HTTP and HTTPS
RewriteCond %{REQUEST_URI} ^/www\. [NC,OR]
RewriteCond %{REQUEST_URI} !^/cars/video [NC]
# Rewrite below works : redirect 80 => https
RewriteRule ^/(.*) https://example.com/ [R=301,L]
# www to non www for HTTP
# if you want to keep your `/cars/video` on http check it first
#RewriteCond %{REQUEST_URI} !^/cars/video [NC]
RewriteRule ^/(.*) http://localhost:9674/++vh++http:%{SERVER_NAME}:80/++/ [P,L]
</IfModule>
</VirtualHost>
很遗憾,日访问量几乎为零:
而在升级到 Debian 10 之前,我平均每天有 200 次独立访问。
我已将“vhost.conf
”上方的配置文件包含到“/etc/apache2/httpd.conf
”文件中,如下所示:
# If you prefer a single logfile with access, agent, and referer information
# (Combined Logfile Format) you can use the following directive.
#
CustomLog /var/log/apache2/access.log combined
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
#LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so
#LoadModule authn_alias_module /usr/lib/apache2/modules/mod_authn_alias.so
LoadModule vhost_alias_module /usr/lib/apache2/modules/mod_vhost_alias.so
LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so
#LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
LoadModule mime_magic_module /usr/lib/apache2/modules/mod_mime_magic.so
LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so
#LoadModule disk_cache_module /usr/lib/apache2/modules/mod_disk_cache.so
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
LoadModule php5_module libexec/apache2/libphp5.so
# Get back visitors for awstats
#LoadModule remoteip_module /usr/lib/apache2/modules/mod_remoteip.so
#LogLevel debug
LogLevel alert rewrite:trace3
#
# The following directives define some format nicknames for use with
# a CustomLog directive (see below).
#
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %T %v" full
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %P %T" debug
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
NameVirtualHost *:80
include vhost.conf
这里可能有什么问题?
顺便说一下,当有访问者时,日志文件 access.log
似乎被正确填充:我不明白发生了什么。
更新
这里我提供一个 link 我目前的设置 awstats.conf
:
除了允许 AWStats CGI(Perl) 脚本的条目 accessed/executed 之外,您发布的所有与 Apache 配置相关的信息似乎都是正确的。您指出正在填充 Apache access.log 这一事实让我认为这是 AWStats 配置方式的问题。在 Debian 上,您需要查看文件夹:
/etc/awstats
并找到与您的 Apache 虚拟主机配置相匹配的 .conf 文件。请确保 .conf 文件正确引用您的 Apache access.log 文件作为生成统计信息的来源。
其他一些注意事项包括检查 AWStats 是否配置为通过 CRON 例程定期解析您的日志文件,或者甚至可能根据上述 AWStats 配置文件按需解析。如果未按需配置为 运行,则需要执行 CRON 作业以定期解析日志。
不要假设您之前的 AWStats 配置在升级后仍然有效。如果配置不正确,您升级到 Debian 可能会清除您以前的设置。
跟进
根据您发布的 awstats.conf 文件,确定并使用您期望的所有虚拟主机扩展定义主机别名属性:
HostAliases="localhost 127.0.0.1 REGEX [.com|net|org$]"
不需要 DNS 查找。将其设置为:
DNSLookup=2
然后在您的 Apache conf 文件中,您需要确保允许 AWStats Perl 脚本在您希望访问这些统计信息的目录中执行。在每个虚拟域 conf 中,您希望 AWStats 可访问:
# Virtual host container
ScriptAlias /cgi-bin/ /path/to/cgi-bin/
<Directory "/path/to/htdocs/virtual-domain/cgi-bin">
AllowOverride None
Options +ExecCGI +SymLinksIfOwnerMatch
Require all granted
</Directory>