Apache 将 http 重定向到 https,特定源除外

Apache 将 http 重定向到 https,特定源除外

我希望能够在我们的 apache 配置上将所有流量从 http 重定向到 https,除非传入请求来自特定源(在这种情况下,它来自与服务器相同的 IP)。

上下文:我们有一个 Zend 服务器,该服务器运行带有 apache 配置的 php 应用程序,并且同一个 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>

答案1

%{HTTP_HOST}的是服务器主机名,即Host:标头,而您想要的条件是特定的源 IP 地址。您应该比较%{REMOTE_ADDR},而不是:

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

另外,你使用 HTTPS 进行本地流量,但这不是必需的。

相关内容