Ubuntu vhost 配置 - 限制来自子域根目录的公共访问

Ubuntu vhost 配置 - 限制来自子域根目录的公共访问

我已通过 SimpleSAML 为我的 SSO / SAML 配置设置了一个子域。作为管理员,我(或任何其他人)真正需要访问的所有文件都在https://sso.domain.com/www/文件夹,这就是我在 vhost 配置文件中设置限制的原因sso.domain.com.conf。问题是这似乎不起作用,子域的根目录仍然对所有人开放。

<VirtualHost *:80>
    ServerName sso.domain.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/sso

    SetEnv SIMPLESAMLPHP_CONFIG_DIR /var/www/html/sso/config
    Alias /simplesaml /var/www/html/sso/www

    <Directory /var/www/html/sso/www>
         Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine on
RewriteCond %{SERVER_NAME} =sso.domain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

如何配置上述 conf 文件以仅允许公众访问 /www/ 子文件夹而不是子域的根目录?

答案1

不要用作/var/www/html/sso你的 DocumentRoot首先。Apache 不应该为该位置提供服务一点儿也不。是的,它包含 PHP 文件,但是这些文件将通过 PHP 的 require() 加载,而不涉及 Apache。

(它还包含您的 IdP 私钥,因此将所有这些放在公共访问区域,然后尝试再次限制该访问会导致致命错误。)

因此,应该将 DocumentRoot 指向一个只包含 index.html 的不相关目录(例如 /var/www/misc),或者将其直接指向 /var/www/html/sso/www 子目录(不再需要别名)。

我个人甚至会移动整个 SimpleSAMLphp 安装在......之外/var/www,这样它就不会受到发行版默认<Directory /var/www>配置的影响,从而降低通过另一个 VirtualHost 意外暴露这些文件的风险。例如,我可能会将其放在 /srv 或 /usr/lib 中:

<VirtualHost *:80>
    ServerName sso.example.com

    # No need for 'DocumentRoot' or 'Alias' in a redirect-only vhost

    RewriteEngine on
    RewriteRule ^/\.well-known/acme-challenge/ - [L]
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [R=permanent,L,NE]
</VirtualHost>

<VirtualHost *:443>
    ServerName sso.example.com
    (...log settings, SSL settings, PHP-FPM settings...)

    DocumentRoot /var/www/html
    Alias /simplesaml /srv/simplesamlphp/www

    <Directory /srv/simplesamlphp/www>
        Require all granted
    </Directory>
</VirtualHost>

相关内容