diff --git a/bin/memcacheSync.php b/bin/memcacheSync.php
index 0090f9625ef1c2ab3b881f973bf53df364d68a0f..13dc7cc5c2e5c80dc070c5d70d23eda28408861a 100755
--- a/bin/memcacheSync.php
+++ b/bin/memcacheSync.php
@@ -24,7 +24,7 @@ $baseDir = dirname(dirname(__FILE__));
 require_once($baseDir . '/lib/_autoload.php');
 
 /* Initialize the configuration. */
-$configdir = $baseDir . '/config';
+$configdir = SimpleSAML\Utils\Config::getConfigDir();
 SimpleSAML_Configuration::setConfigDir($configdir);
 
 /* Things we should warn the user about. */
diff --git a/lib/SimpleSAML/Configuration.php b/lib/SimpleSAML/Configuration.php
index e3425bacea6151f4f02a53d55e071658a08da299..517e6d12474dfb911807845f84761a8e8646d369 100644
--- a/lib/SimpleSAML/Configuration.php
+++ b/lib/SimpleSAML/Configuration.php
@@ -144,7 +144,7 @@ class SimpleSAML_Configuration {
 			if ($configSet !== 'simplesaml') {
 				throw new Exception('Configuration set \'' . $configSet . '\' not initialized.');
 			} else {
-				self::$configDirs['simplesaml'] = dirname(dirname(dirname(__FILE__))) . '/config';
+				self::$configDirs['simplesaml'] = SimpleSAML\Utils\Config::getConfigDir();
 			}
 		}
 
@@ -171,7 +171,7 @@ class SimpleSAML_Configuration {
 			if ($configSet !== 'simplesaml') {
 				throw new Exception('Configuration set \'' . $configSet . '\' not initialized.');
 			} else {
-				self::$configDirs['simplesaml'] = dirname(dirname(dirname(__FILE__))) . '/config';
+				self::$configDirs['simplesaml'] = SimpleSAML\Utils\Config::getConfigDir();
 			}
 		}
 
diff --git a/lib/SimpleSAML/Utils/Config.php b/lib/SimpleSAML/Utils/Config.php
index e0c3f57fd9ba018d33d448814fd6904f3a2364fe..afbc2088c43e0c1aa1422505a8dc5d47de9a548c 100644
--- a/lib/SimpleSAML/Utils/Config.php
+++ b/lib/SimpleSAML/Utils/Config.php
@@ -55,4 +55,32 @@ class Config
 
         return $secretSalt;
     }
-}
\ No newline at end of file
+
+    /**
+     * Returns the path to the config dir
+     *
+     * If the SIMPLSAMLPHP_CONFIG_DIR environment variable has been set, it takes precedence
+     * over the default $simplesamldir/config directory.
+     *
+     * @return string
+     */
+    public static function getConfigDir()
+    {
+        $configDir    = dirname(dirname(dirname(__DIR__))) . '/config';
+        $configDirEnv = getenv('SIMPLESAMLPHP_CONFIG_DIR');
+        if ($configDirEnv !== false) {
+            if (!is_dir($configDirEnv)) {
+                throw new \InvalidArgumentException(
+                    sprintf(
+                        'Config directory specified by environment variable SIMPLESAMLPHP_CONFIG_DIR is not a ' .
+                        'directory.  Given: "%s"',
+                        $configDirEnv
+                    )
+                );
+            }
+            $configDir = $configDirEnv;
+        }
+
+        return $configDir;
+    }
+}
diff --git a/modules/metarefresh/bin/metarefresh.php b/modules/metarefresh/bin/metarefresh.php
index 2e351f3576d707089476637cd5f9501399bb4597..b31fff56a884b7d7dc7f914d7812bd44f9d5b7c3 100755
--- a/modules/metarefresh/bin/metarefresh.php
+++ b/modules/metarefresh/bin/metarefresh.php
@@ -23,7 +23,8 @@ if(!SimpleSAML_Module::isModuleEnabled('metarefresh')) {
 }
 
 /* Initialize the configuration. */
-SimpleSAML_Configuration::setConfigDir($baseDir . '/config');
+$configdir = SimpleSAML\Utils\Config::getConfigDir();
+SimpleSAML_Configuration::setConfigDir($configdir);
 
 /* $outputDir contains the directory we will store the generated metadata in. */
 $outputDir = $baseDir . '/metadata-generated';
diff --git a/modules/statistics/bin/loganalyzer.php b/modules/statistics/bin/loganalyzer.php
index 7186890f4b6e8a633ca4a3519b7b4233e5fee344..f64fa99cdbf5a8bb251040da4184469f1b0f8f82 100755
--- a/modules/statistics/bin/loganalyzer.php
+++ b/modules/statistics/bin/loganalyzer.php
@@ -9,7 +9,8 @@ $baseDir = dirname(dirname(dirname(dirname(__FILE__))));
 require_once($baseDir . '/lib/_autoload.php');
 
 /* Initialize the configuration. */
-SimpleSAML_Configuration::setConfigDir($baseDir . '/config');
+$configdir = SimpleSAML\Utils\Config::getConfigDir();
+SimpleSAML_Configuration::setConfigDir($configdir);
 
 SimpleSAML\Utils\Time::initTimezone();
 
diff --git a/modules/statistics/bin/logcleaner.php b/modules/statistics/bin/logcleaner.php
index ffa1ecded1eae116f963e2d63daae25da6464149..4bdad961e5baac1d59ee10bf00913200540ef146 100755
--- a/modules/statistics/bin/logcleaner.php
+++ b/modules/statistics/bin/logcleaner.php
@@ -9,7 +9,8 @@ $baseDir = dirname(dirname(dirname(dirname(__FILE__))));
 require_once($baseDir . '/lib/_autoload.php');
 
 /* Initialize the configuration. */
-SimpleSAML_Configuration::setConfigDir($baseDir . '/config');
+$configdir = SimpleSAML\Utils\Config::getConfigDir();
+SimpleSAML_Configuration::setConfigDir($configdir);
 
 
 
diff --git a/www/_include.php b/www/_include.php
index 37f0c883f894f6a1b5711d622a333d0853a2455d..8b0ee6e10e0c66d8d824c1ec4ca2e7dbdddea7f0 100644
--- a/www/_include.php
+++ b/www/_include.php
@@ -97,7 +97,7 @@ class SimpleSAML_IncPrefixWarn {
 $SIMPLESAML_INCPREFIX = new SimpleSAML_IncPrefixWarn();
 
 
-$configdir = dirname(dirname(__FILE__)) . '/config';
+$configdir = SimpleSAML\Utils\Config::getConfigDir();
 if (!file_exists($configdir . '/config.php')) {
 	header('Content-Type: text/plain');
 	echo("You have not yet created the simpleSAMLphp configuration files.\n");