]> source.dussan.org Git - nextcloud-server.git/commitdiff
add SSL proxy support
authorherbrechtsmeier <stefan@herbrechtsmeier.net>
Sun, 6 Jan 2013 11:24:40 +0000 (12:24 +0100)
committerherbrechtsmeier <stefan@herbrechtsmeier.net>
Thu, 31 Jan 2013 17:43:30 +0000 (18:43 +0100)
Add support for a reverse proxy that only forwards SSL connections
unencrypted to the web server.

This patch allows to detect the reverse proxy via regular expression for
the remote IP address and conditional overwrite the host name, protocol
and web root.

config/config.sample.php
lib/request.php

index ebe73fbec7bf614bbf8fb85c367eeeb7768784bb..5264e94820058be2e40937b255e23bb47e49f7d6 100644 (file)
@@ -41,6 +41,9 @@ $CONFIG = array(
 /* The automatic webroot detection of ownCloud can fail in certain reverse proxy situations. This option allows to manually override the automatic detection. For example "/domain.tld/ownCloud" */
 "overwritewebroot" => "",
 
+/* The automatic detection of ownCloud can fail in certain reverse proxy situations. This option allows to define a manually override condition as regular expression for the remote ip address. For example "^10\.0\.0\.[1-3]$" */
+"overwritecondaddr" => "",
+
 /* A proxy to use to connect to the internet. For example "myproxy.org:88" */
 "proxy" => "",
 
index 4c056ce9b2f318dc781e89c697d36aa90fafd443..1661a1406ca721a53c5407082454d965913499e7 100755 (executable)
@@ -7,6 +7,15 @@
  */
 
 class OC_Request {
+       /**
+        * @brief Check overwrite condition
+        * @returns true/false
+        */
+       private static function isOverwriteCondition() {
+               $regex = '/' . OC_Config::getValue('overwritecondaddr', '')  . '/';
+               return $regex === '//' or preg_match($regex, $_SERVER['REMOTE_ADDR']) === 1;
+       }
+
        /**
         * @brief Returns the server host
         * @returns the server host
@@ -18,7 +27,7 @@ class OC_Request {
                if(OC::$CLI) {
                        return 'localhost';
                }
-               if(OC_Config::getValue('overwritehost', '')<>'') {
+               if(OC_Config::getValue('overwritehost', '')<>'' and self::isOverwriteCondition()) {
                        return OC_Config::getValue('overwritehost');
                }
                if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) {
@@ -43,7 +52,7 @@ class OC_Request {
        * Returns the server protocol. It respects reverse proxy servers and load balancers
        */
        public static function serverProtocol() {
-               if(OC_Config::getValue('overwriteprotocol', '')<>'') {
+               if(OC_Config::getValue('overwriteprotocol', '')<>'' and self::isOverwriteCondition()) {
                        return OC_Config::getValue('overwriteprotocol');
                }
                if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) {
@@ -67,7 +76,7 @@ class OC_Request {
         */
        public static function requestUri() {
                $uri = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
-               if (OC_Config::getValue('overwritewebroot', '') <> '') {
+               if (OC_Config::getValue('overwritewebroot', '') <> '' and self::isOverwriteCondition()) {
                        $uri = self::scriptName() . substr($uri, strlen($_SERVER['SCRIPT_NAME']));
                }
                return $uri;
@@ -82,7 +91,7 @@ class OC_Request {
         */
        public static function scriptName() {
                $name = $_SERVER['SCRIPT_NAME'];
-               if (OC_Config::getValue('overwritewebroot', '') <> '') {
+               if (OC_Config::getValue('overwritewebroot', '') <> '' and self::isOverwriteCondition()) {
                        $serverroot = str_replace("\\", '/', substr(__DIR__, 0, -4));
                        $suburi = str_replace("\\", "/", substr(realpath($_SERVER["SCRIPT_FILENAME"]), strlen($serverroot)));
                        $name = OC_Config::getValue('overwritewebroot', '') . $suburi;