HTTP 方法阻止在子域上不起作用

HTTP 方法阻止在子域上不起作用

我在 apache.conf 中执行了除 GET、POST 和 OPTIONS 之外的方法的阻止,当我尝试通过 IP 运行服务器时,阻止有效。

但在子域上配置相同的阻止时(通过 sites-available),不会发生此阻止。我可能做错了什么?

apache2.conf

<Directory /var/www/>
    Options None
    AllowOverride None
    Require all granted

    <LimitExcept GET POST OPTIONS>
        Require all denied
    </LimitExcept>
</Directory>

站点可用/subdomain.example.com.conf

<VirtualHost *:80>
    ServerName subdomain.example.com
    ServerAlias subdomain.example.com
    DocumentRoot /var/www/html/subdomain.example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    Header append X-FRAME-OPTIONS "SAMEORIGIN"

    RewriteCond %{REQUEST_URI} !^/\.well\-known/acme\-challenge/
    RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

<VirtualHost *:443>
    SSLEngine on

    SSLCertificateFile      /certs/example.crt
    SSLCertificateKeyFile   /certs/example.key
    SSLCertificateChainFile /certs/example-intermediary.crt

    Protocols h2 http/1.1

    Header always set Strict-Transport-Security "max-age=31536000"

    Header append X-FRAME-OPTIONS "SAMEORIGIN"

    <Directory /var/www/html/subdomain.example.com>
        Options None
        AllowOverride None
        Require all granted

        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>

    ServerName subdomain.example.com
    ServerAlias subdomain.example.com
    DocumentRoot /var/www/html/subdomain.example.com
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

这个锁不起作用,因为当执行PUT,DELETE,LOCK等请求时,页面内容会正常返回。

答案1

您应该停止使用那种复杂的旧方法来限制方法。

加载 mod_allowmehtods.so 并以更简单的方式定义您想要允许的内容。

LoadModule allowmethods_module modules/mod_allowmethods.so
    
<Directory /var/www> 
#other directives
AllowMethods GET POST OPTIONS 
</Directory>

除非您在子目录中用其他内容覆盖此设置,否则这将在整个服务器范围内起作用。尝试一下并让我们知道。

相关内容