我目前在 Apache 上的 Nextcloud 环境中使用新的 debian-setup 有两个问题。
Nextcloud 版本:12.0.4 操作系统:Debian 9.3.0 Apache 版本:2.4.25 PHP 版本:PHP-FPM 7.0.27
在我的 Apache 上,我通常使用 Basic Auth。因此,如果您浏览到 h****://my.server.com,您将受到基本身份验证请求的挑战。我在 h****://myserver/cloud 上运行 Nextcloud。在那里我禁用了基本身份验证。详细地:
h****://my.server.com(提供带有一些信息的基本 index.html。通过基本身份验证进行身份验证) h****://my.server.com/cloud(nextcloud。没有基本身份验证) h****://my.server.com/otherservice(其他服务。通过基本身份验证进行身份验证 - 目前尚未实施以降低复杂性)
我使用 PHP-FPM,因此使用 mod_proxy_fcgi,而不是 mod_php。我也使用fail2ban 来保证apache-auth 和nextcloud 的安全。
你会在底部找到我的配置文件。
第一期
对于云目录,我按照建议使用“满足任何”+“全部允许”禁用了基本身份验证。通常这是有效的。如果我(在新的浏览器中)浏览到 h****://my.server.com/cloud 我没有收到基本身份验证请求并且可以正常登录到 Nextcloud。登录又快又好。但是,如果我首先浏览到 h****://my.server.com 并输入我的基本身份验证登录名,然后导航到 h****://my.server.com/cloud 登录非常减缓。这是因为 Nextcloud 正在尝试使用我之前在网站根目录中输入的基本身份验证数据。我还启用了将 vor nextcloud 记录到文件(日志级别 2)。在那里我可以看到刷新登录页面时它尝试使用我的基本身份验证用户登录。
这在很多方面都是有问题的。起初,它使登录非常缓慢且不舒服。但我也想使用 fail2ban 来保护 nextcloud。但是,如果日志被来自基本身份验证信息的失败登录尝试发送垃圾邮件,这实际上不起作用。
这也意味着如果我在 nextcloud 中使用相同的密码创建与基本身份验证相同的用户作为解决方法,如果我之前在根页面上对基本身份验证进行身份验证,我将无法注销并登录到另一个用户。由于基本的身份验证数据,一旦我这样做,我就会再次登录。
我的问题是:如何告诉 nextcloud 停止尝试使用我 apache 上其他目录中的基本身份验证数据?
第 2 期
如果我使用 Nextcloud-App 或例如适用于 Android 的 Davdroid,则某些 php-Urls 翻译不正确。看这个例子:
Apache的access.log
80.187.97.128 - - [21/Jan/2018:16:01:10 +0100] "GET /cloud/index.php/avatar/daily/512 HTTP/1.1" 200 1380
Apache的error.log
[Sun Jan 21 16:01:12.727830 2018] [auth_basic:error] [pid 19050] [client 80.187.97.128:30481] AH01617: user daily: authentication failure for "/avatar/daily/512": Password Mismatch
如您所见,/cloud/index.php/avatar/daily/512 正在被访问,但不知何故被翻译成 /avatar/daily/512。它应该被翻译成 /cloud/avatar/daily/512。尽管如此,一切似乎都可以在 webclient 中运行,我认为它与 Android 或 App 无关。我认为它只是指出了一个通用的配置问题。此行为也会触发 fail2ban,因为它会影响基本身份验证,因为我只从基本身份验证中排除 /cloud。这导致禁止令人讨厌的事情。
任何帮助将不胜感激!
这是我的 config.files
01_redirect_https.conf(在 apache2\sites-enabled 中)
<IfModule mod_proxy.c>
ProxyRequests Off
ProxyVia On
<Proxy *>
AddDefaultCharset off
Allow from all
</Proxy>
</IfModule>
ServerAdmin myserver@mydomain.de
Listen 80
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{REQUEST_URI} !^/server-status
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
<Location /server-status/>
SetHandler server-status
Order Deny,Allow
Deny from all
Satisfy Any
Allow from 127.0.0.1
</Location>
</VirtualHost>
02_https.conf(在 apache2\sites-enabled 中)
<IfModule ssl_module>
Alias "/cloud" "/var/www/html/cloud/"
Alias "/" "/var/www/html/"
<VirtualHost *:443>
DocumentRoot "/var/www/html"
ServerName my.server.com
ServerAlias myserver
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/ssl/apache2/my.server.com.crt
SSLCertificateKeyFile /etc/ssl/apache2/my.server.com.key
SSLOptions StrictRequire
SSLProtocol all -SSLv2
FilterProvider gzdeflate DEFLATE "%{Content_Type} = 'text'"
<IfModule mod_proxy_fcgi.c>
<Proxy "unix:/var/run/php/php7.0-fpm.sock|fcgi://php7.0-fpm">
# we must declare a (any) parameter in here
# or it won't register the proxy ahead of time
ProxySet disablereuse=off
</Proxy>
<FilesMatch "^/(.*\.php(/.*)?)$">
SetHandler proxy:fcgi://php7.0-fpm
</FilesMatch>
</IfModule>
<IfModule mod_authnz_external.c>
AddExternalAuth pwauth /usr/sbin/pwauth
SetExternalAuthMethod pwauth pipe
AddExternalGroup unixgroup /usr/sbin/unixgroup
SetExternalGroupMethod unixgroup environment
</IfModule>
<Directory /var/www/html>
SSLRequireSSL
Options Indexes FollowSymLinks
Order deny,allow
Allow from all
AuthType Basic
AuthName "This is private"
AuthBasicProvider external
AuthExternal pwauth
GroupExternal unixgroup
Require user daily
</Directory>
Include sites-available/05_cloud.include
</VirtualHost>
</IfModule>
05_cloud.include(在 apache2/includes 中)
<Location /cloud>
SSLRequireSSL
SetEnvIf REQUEST_URI ^/cloud/* noauth =1
Satisfy any
</Location>
<Directory /var/www/html/cloud/>
# according to Nextcloud Manual FPM can't read .htaccess php settins so including it here
include /var/www/html/cloud/.htaccess
Options +FollowSymlinks
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/html/cloud
SetEnv HTTP_HOME /var/www/html/cloud
Satisfy Any
</Directory>
这里是我的 config.php(在 /var/www/html/cloud/config/ 中)
<?php
$CONFIG = array (
'instanceid' => 'xxx',
'passwordsalt' => 'xxx',
'secret' => 'xxx',
'trusted_domains' =>
array (
0 => 'myserver',
1 => 'my.server.com',
),
'datadirectory' => '/mnt/raid1/cloud/data',
'overwrite.cli.url' => 'https://my.server.com/cloud/',
'overwritehost' => 'my.server.com',
'overwritewebroot' => '/cloud',
'dbtype' => 'mysql',
'version' => '12.0.4.3',
'dbname' => 'nextcloud',
'dbhost' => 'localhost:3306',
'dbport' => '',
'dbtableprefix' => 'oc_',
'dbuser' => 'cloud',
'dbpassword' => 'xxx',
'installed' => true,
'memcache.local' => '\\OC\\Memcache\\APCu',
'log_type' => 'file',
'logtimezone' => 'Europe/Berlin',
'logfile' => '/var/log/nextcloud/cloud.log',
'loglevel' => 2,
'mail_from_address' => 'test',
'mail_smtpmode' => 'php',
'mail_smtpauthtype' => 'LOGIN',
'mail_domain' => 'mydomain.de',
'auth.bruteforce.protection.enabled' => true,
);