Назад | Перейти на главную страницу

Apache перенаправляет http на https, кроме определенного источника

Я хочу иметь возможность перенаправлять весь трафик с http на https в нашей конфигурации apache, за исключением случаев, когда входящий запрос поступает из определенного источника (в данном случае он исходит с того же IP-адреса, что и сервер).

Контекст: у нас есть сервер Zend, на котором запущено приложение php с конфигурацией apache, и тот же сервер Zend также запускает очередь заданий, которая запускает задание http на одну из наших конечных точек REST. Очевидно, мы не можем маршрутизировать это через https, поскольку это внутренний трафик, но я не уверен, как структурировать наши RewriteConds, чтобы он правильно пропускал и обслуживал http только для этого конкретного запрашивающего, но https для всех остальных.

Вот условие на данный момент - я действительно не совсем знаком с синтаксисом Apache, но мне нужно работать с тем, что я знаю;)

<VirtualHost *:80>
    TimeOut 5600
    ServerName <name>
    ServerAlias <alias>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} !=example\.com\:80
    RewriteCond %{HTTPS} !=on
    RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
    DocumentRoot <docroot>
    RewriteCond %{REQUEST_URI} !^(/index\.php|/favicon\.ico|/robots\.txt|/a/css(.*)|/a/js(.*)|/a/i(.*)|/alive\.html)
    RewriteRule ^(.*)$ /index.php/$1 [L]
    <Directory "<docroot>">
        Options All
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:443>
    TimeOut 12000
    ServerName <name>
    ServerAlias <alias>
    DocumentRoot <docroot>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^(/index\.php|/favicon\.ico|/robots\.txt|/a/css(.*)|/a/js(.*)|/a/i(.*)|/alive\.html)
    RewriteRule ^(.*)$ /index.php/$1 [L]
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory "<docroot>">
        Options All
        AllowOverride All
        Require all granted
    </Directory>
    SSLEngine on
    ...ssl etc
</VirtualHost>

В %{HTTP_HOST} относится к имени хоста сервера, т.е. Host: заголовок, а желаемое условие - конкретный IP-адрес источника. Вы должны сравнивать %{REMOTE_ADDR}, вместо этого:

RewriteCond %{REMOTE_ADDR} !^127\.0\.0\.1

Вас также жестяная банка используйте HTTPS для локального трафика, но это необязательно.