Https

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

  • March 17, 2019

我希望能夠在我們的 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>

%{HTTP_HOST}指的是伺服器主機名,即標Host:頭,而您想要的條件是特定的源 IP 地址。你應該比較%{REMOTE_ADDR},而不是:

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

此外,您可以將 HTTPS 用於本地流量,但這不是必需的。

引用自:https://serverfault.com/questions/958602