Конфигурация Apache: как ограничить запросы без имени хоста для некоторых страниц?

У меня есть конфигурация виртуального хоста моего сервера Apache:

<VirtualHost *:80>
    DocumentRoot "/app/www"
    ServerName myhostname
    <Directory "/app/www">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Я хочу разрешить доступ только к запросам с myhostname в качестве имени хоста. Но я хочу отклонить все другие запросы, сделанные с помощью hostname или server-ip:

http://myhostiname/ ALLOW
http://1.2.3.4/ (this is one of the server ip addresses) DENY

Моя конфигурация виртуального хоста работает должным образом.

Теперь мне нужно отредактировать конфигурацию, чтобы позволить пользователю получить доступ к одному конкретному пути по ip, потому что клиент не может решить локальное имя хоста.

Это пример:

http://myhostiname ALLOW
http://1.2.3.4/ DENY
http://1.2.3.4/any/path DENY
http://1.2.3.4/allowed/path ALLOW
http://1.2.3.4/allowed/path/subpath ALLOW

Я пробовал элемент на новом виртуальном хосте:

<VirtualHost 0.0.0.0:80>
    DocumentRoot "/app/www"
    <Directory "/app/www">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    <Location "/">
      AllowOverride None
      Order Deny,Allow
      Deny from all
    </Location>
    <Location "^/allowed">
      Allow from all
    </Location> 
</VirtualHost>

Но это отклоняет все, кроме запросов имени хоста. Что мне не хватает?

1
задан 23 January 2019 в 09:57
1 ответ

Я бы разделил вашу конфигурацию vhost на два или более vhosts. Все это можно сделать на одном виртуальном хосте, но я считаю, что "отдельные" конфигурации легче читать и регистрировать.

<VirtualHost *:80>
    # default match for port 80
    # matches domain set by ServerName (and possibly other domains unless specified in other vhosts)
    ServerName myhostname
    DocumentRoot "/app/www"

    <Location "/">
        # copied from your example. if not needed, you can remove this <Location/>-block.
        Options Indexes FollowSymLinks
        AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error-myhostname.log
    CustomLog ${APACHE_LOG_DIR}/access-myhostname.log combined
</VirtualHost>

<VirtualHost 1.2.3.4:80>
    # matches all requests to ip address and port
    DocumentRoot "/app/www"

    # initially: all requests forbidden
    <Location "/">
        # Options and AllowOverride copied from first vhost. remove if not needed.
        Options Indexes FollowSymLinks
        AllowOverride All

        Require all denied
    </Location>

    # allow access to everything below "/allowed/path/"
    <Location "/allowed/path/">
        Require all granted
    </Location>

    # use separate logfile
    ErrorLog ${APACHE_LOG_DIR}/error-1234.log
    CustomLog ${APACHE_LOG_DIR}/access-1234.log combined
</VirtualHost>

<VirtualHost *:*>
    # default match
    # fallback for any other ports/ip addresses/domains we might have forgotten/misconfigured
    DocumentRoot "/app/www"

    # all requests forbidden
    <Location "/">
        Require all denied
    </Location>

    # again, use separate logfile
    ErrorLog ${APACHE_LOG_DIR}/error-default.log
    CustomLog ${APACHE_LOG_DIR}/access-default.log combined
</VirtualHost>
1
ответ дан 3 December 2019 в 23:08

Теги

Похожие вопросы