Apache / Debian / PHP-FPM上的Nextcloud问题

时间:2018-01-22 09:10:34

标签: php apache basic-authentication fastcgi nextcloud

我目前在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,包含一些信息。通过Basic Auth验证) h ****://my.server.com/cloud(nextcloud。没有基本身份验证) h ****://my.server.com/otherservice(其他服务。通过Basic Auth验证 - 此时尚未实现降低复杂性)

我使用PHP-FPM,因此使用mod_proxy_fcgi,而不是mod_php。另外,我使用fail2ban来保护apache-auth和nextcloud。

你会在底部找到我的配置文件。

第1期

对于云目录,我按照建议使用“满足任何”+“全部允许”禁用了基本身份验证。通常这是有效的。如果我浏览(在一个新的浏览器中)h ****://my.server.com/cloud我没有获得Basic Auth请求,并且可以正常登录Nextcloud。登录快速而且很好。但是,如果我首先浏览到h ****://my.server.com并输入我的Basic Auth登录,然后导航到h ****://my.server.com/cloud,登录非常慢。这是因为Nextcloud正在尝试使用之前在网站根目录中输入的Basic Auth数据。我还启用了将vcl nextcloud记录到文件(日志级别2)。在那里我可以看到,在刷新登录页面时,它尝试使用我的基本身份验证用户登录。

这在很多方面都存在问题。起初它使登录非常缓慢和不舒服。但我也想使用fail2ban来保护nextcloud。但是,如果日志因基本身份验证信息的失败登录尝试而被垃圾邮件发送,则此操作无效。

这也意味着如果我创建了与用于Basic Auth的用户相同的用户,并在nextcloud中使用相同的密码作为解决方法,如果我之前在根页面上进行基本身份验证,则无法注销并登录到其他用户。我一旦因为基本的身份验证数据而再次登录。

我的问题是:如何告诉nextcloud停止尝试在我的apache上使用其他目录中的基本Auth-Data?

第2期

如果我使用Nextcloud-App或者例如Davdroid for Android一些php-Urls没有正确翻译。见这个例子:

访问.log的Apache

80.187.97.128 - - [21/Jan/2018:16:01:10 +0100] "GET /cloud/index.php/avatar/daily/512 HTTP/1.1" 200 1380

Apache的错误.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,因为它会影响基本身份验证,因为我只从基本身份验证中排除/云。这导致了禁止什么样的烦恼。

任何帮助都会被贬低!!

以下是我的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,
);

1 个答案:

答案 0 :(得分:0)

您需要在PHP-FPM配置文件中而不是在apache配置中设置PHP设置。 PHP-FPM无法从apache访问任何内容。