diff -Npru passenger-orig/ext/apache2/Configuration.cpp passenger-wc/ext/apache2/Configuration.cpp
--- passenger-orig/ext/apache2/Configuration.cpp 2012-03-05 17:33:31.162658085 -0800
+++ passenger-wc/ext/apache2/Configuration.cpp 2012-03-05 17:38:37.164628243 -0800
@@ -272,6 +272,7 @@ passenger_config_merge_dir(apr_pool_t *p
DEFINE_SERVER_STR_CONFIG_SETTER(cmd_passenger_root, root)
DEFINE_SERVER_STR_CONFIG_SETTER(cmd_passenger_ruby, ruby)
+DEFINE_SERVER_STR_CONFIG_SETTER(cmd_passenger_spawn_ipaddress, spawnIPAddress)
DEFINE_SERVER_INT_CONFIG_SETTER(cmd_passenger_log_level, logLevel, unsigned int, 0)
DEFINE_SERVER_STR_CONFIG_SETTER(cmd_passenger_debug_log_file, debugLogFile)
DEFINE_SERVER_INT_CONFIG_SETTER(cmd_passenger_max_pool_size, maxPoolSize, unsigned int, 1)
@@ -474,6 +475,11 @@ const command_rec passenger_commands[] =
NULL,
RSRC_CONF,
"The Ruby interpreter to use."),
+ AP_INIT_TAKE1("PassengerSpawnIPAddress",
+ (Take1Func) cmd_passenger_spawn_ipaddress,
+ NULL,
+ RSRC_CONF,
+ "The IP address to bind to."),
AP_INIT_TAKE1("PassengerLogLevel",
(Take1Func) cmd_passenger_log_level,
NULL,
diff -Npru passenger-orig/ext/apache2/Configuration.hpp passenger-wc/ext/apache2/Configuration.hpp
--- passenger-orig/ext/apache2/Configuration.hpp 2012-03-05 17:33:31.162658085 -0800
+++ passenger-wc/ext/apache2/Configuration.hpp 2012-03-05 17:38:37.165628242 -0800
@@ -367,6 +367,9 @@ struct DirConfig {
struct ServerConfig {
/** The filename of the Ruby interpreter to use. */
const char *ruby;
+
+ /** The IP Address to bind to. */
+ const char *spawnIPAddress;
/** The Passenger root folder. */
const char *root;
@@ -416,6 +419,7 @@ struct ServerConfig {
ServerConfig() {
ruby = "ruby";
+ spawnIPAddress = "127.0.0.1";
root = NULL;
logLevel = DEFAULT_LOG_LEVEL;
debugLogFile = NULL;
diff -Npru passenger-orig/ext/apache2/HelperAgent.cpp passenger-wc/ext/apache2/HelperAgent.cpp
--- passenger-orig/ext/apache2/HelperAgent.cpp 2012-03-05 17:33:31.162658085 -0800
+++ passenger-wc/ext/apache2/HelperAgent.cpp 2012-03-05 17:38:37.165628242 -0800
@@ -245,7 +245,8 @@ public:
accountsDatabase, rubyCommand,
analyticsLogger,
options.getInt("log_level"),
- options.get("debug_log_file", false)
+ options.get("debug_log_file", false),
+ options.get("spawn_ipaddress")
));
pool->setMax(maxPoolSize);
pool->setMaxPerApp(maxInstancesPerApp);
diff -Npru passenger-orig/ext/apache2/Hooks.cpp passenger-wc/ext/apache2/Hooks.cpp
--- passenger-orig/ext/apache2/Hooks.cpp 2012-03-05 17:33:31.162658085 -0800
+++ passenger-wc/ext/apache2/Hooks.cpp 2012-03-05 17:48:25.902486295 -0800
@@ -1401,7 +1401,8 @@ public:
serverConfig.unionStationGatewayCert,
serverConfig.unionStationProxyAddress,
serverConfig.unionStationProxyType,
- serverConfig.prestartURLs);
+ serverConfig.prestartURLs,
+ serverConfig.spawnIPAddress);
analyticsLogger = ptr(new AnalyticsLogger(agentsStarter.getLoggingSocketAddress(),
"logging", agentsStarter.getLoggingSocketPassword()));
diff -Npru passenger-orig/ext/common/AgentsStarter.cpp passenger-wc/ext/common/AgentsStarter.cpp
--- passenger-orig/ext/common/AgentsStarter.cpp 2012-03-05 17:33:31.192658083 -0800
+++ passenger-wc/ext/common/AgentsStarter.cpp 2012-03-05 17:38:37.168628242 -0800
@@ -64,6 +64,7 @@ agents_starter_start(AgentsStarter *as,
const char *unionStationProxyAddress,
const char *unionStationProxyType,
const char **prestartURLs, unsigned int prestartURLsCount,
+ const char *spawnIPAddress,
const AfterForkCallback afterFork,
void *callbackArgument,
char **errorMessage)
@@ -96,6 +97,7 @@ agents_starter_start(AgentsStarter *as,
unionStationProxyAddress,
unionStationProxyType,
setOfprestartURLs,
+ spawnIPAddress,
afterForkFunctionObject);
return 1;
} catch (const Passenger::SystemException &e) {
diff -Npru passenger-orig/ext/common/AgentsStarter.h passenger-wc/ext/common/AgentsStarter.h
--- passenger-orig/ext/common/AgentsStarter.h 2012-03-05 17:33:31.189658083 -0800
+++ passenger-wc/ext/common/AgentsStarter.h 2012-03-05 17:38:37.168628242 -0800
@@ -64,6 +64,7 @@ int agents_starter_start(AgentsStarter
const char *unionStationProxyAddress,
const char *unionStationProxyType,
const char **prestartURLs, unsigned int prestartURLsCount,
+ const char *spawnIPAddress,
const AfterForkCallback afterFork,
void *callbackArgument,
char **errorMessage);
diff -Npru passenger-orig/ext/common/AgentsStarter.hpp passenger-wc/ext/common/AgentsStarter.hpp
--- passenger-orig/ext/common/AgentsStarter.hpp 2012-03-05 17:33:31.190658083 -0800
+++ passenger-wc/ext/common/AgentsStarter.hpp 2012-03-05 17:38:37.169628242 -0800
@@ -387,6 +387,7 @@ public:
const string &unionStationProxyAddress,
const string &unionStationProxyType,
const set<string> &prestartURLs,
+ const string &spawnIPAddress,
const function<void ()> &afterFork = function<void ()>())
{
TRACE_POINT();
@@ -416,6 +417,7 @@ public:
.setGid ("web_server_worker_gid", webServerWorkerGid)
.set ("passenger_root", passengerRoot)
.set ("ruby", rubyCommand)
+ .set ("spawn_ipaddress", spawnIPAddress)
.setInt ("max_pool_size", maxPoolSize)
.setInt ("max_instances_per_app", maxInstancesPerApp)
.setInt ("pool_idle_time", poolIdleTime)
diff -Npru passenger-orig/ext/common/ApplicationPool/Pool.h passenger-wc/ext/common/ApplicationPool/Pool.h
--- passenger-orig/ext/common/ApplicationPool/Pool.h 2012-03-05 17:33:31.189658083 -0800
+++ passenger-wc/ext/common/ApplicationPool/Pool.h 2012-03-05 17:38:37.169628242 -0800
@@ -1062,7 +1062,8 @@ public:
const string &rubyCommand = "ruby",
const AnalyticsLoggerPtr &analyticsLogger = AnalyticsLoggerPtr(),
int logLevel = 0,
- const string &debugLogFile = ""
+ const string &debugLogFile = "",
+ const string &spawnIPAddress = "127.0.0.1"
) : data(new SharedData()),
cstat(DEFAULT_MAX_POOL_SIZE),
lock(data->lock),
@@ -1079,7 +1080,7 @@ public:
this->spawnManager = ptr(new SpawnManager(spawnServerCommand, generation,
accountsDatabase, rubyCommand, analyticsLogger, logLevel,
- debugLogFile));
+ debugLogFile, spawnIPAddress));
initialize(analyticsLogger);
}
diff -Npru passenger-orig/ext/common/SpawnManager.h passenger-wc/ext/common/SpawnManager.h
--- passenger-orig/ext/common/SpawnManager.h 2012-03-05 17:33:31.189658083 -0800
+++ passenger-wc/ext/common/SpawnManager.h 2012-03-05 17:38:37.170628241 -0800
@@ -107,6 +107,7 @@ private:
ServerInstanceDir::GenerationPtr generation;
AccountsDatabasePtr accountsDatabase;
string rubyCommand;
+ string spawnIPAddress;
AnalyticsLoggerPtr analyticsLogger;
int logLevel;
string debugLogFile;
@@ -267,6 +268,7 @@ private:
}
writeExact(ownerSocket, toString(logLevel) + "\n");
writeExact(ownerSocket, debugLogFile + "\n");
+ writeExact(ownerSocket, spawnIPAddress + "\n");
this->ownerSocket = ownerSocket;
this->socketFilename = socketFilename;
@@ -547,13 +549,15 @@ public:
const string &rubyCommand = "ruby",
const AnalyticsLoggerPtr &analyticsLogger = AnalyticsLoggerPtr(),
int logLevel = 0,
- const string &debugLogFile = ""
+ const string &debugLogFile = "",
+ const string &spawnIPAddress = "127.0.0.1"
) {
TRACE_POINT();
this->spawnServerCommand = spawnServerCommand;
this->generation = generation;
this->accountsDatabase = accountsDatabase;
this->rubyCommand = rubyCommand;
+ this->spawnIPAddress = spawnIPAddress;
this->analyticsLogger = analyticsLogger;
this->logLevel = logLevel;
this->debugLogFile = debugLogFile;
diff -Npru passenger-orig/ext/common/Watchdog.cpp passenger-wc/ext/common/Watchdog.cpp
--- passenger-orig/ext/common/Watchdog.cpp 2012-03-05 17:33:31.189658083 -0800
+++ passenger-wc/ext/common/Watchdog.cpp 2012-03-05 17:38:37.170628241 -0800
@@ -75,6 +75,7 @@ static uid_t webServerWorkerUid;
static gid_t webServerWorkerGid;
static string passengerRoot;
static string rubyCommand;
+static string spawnIPAddress;
static unsigned int maxPoolSize;
static unsigned int maxInstancesPerApp;
static unsigned int poolIdleTime;
@@ -592,7 +593,8 @@ protected:
options.set("request_socket_password", Base64::encode(requestSocketPassword)).
set("message_socket_password", Base64::encode(messageSocketPassword)).
set("logging_agent_address", loggingAgentAddress).
- set("logging_agent_password", loggingAgentPassword);
+ set("logging_agent_password", loggingAgentPassword).
+ set("spawn_ipaddress", spawnIPAddress);
options.writeToFd(fd);
}
@@ -978,6 +980,7 @@ main(int argc, char *argv[]) {
webServerWorkerGid = agentsOptions.getGid("web_server_worker_gid");
passengerRoot = agentsOptions.get("passenger_root");
rubyCommand = agentsOptions.get("ruby");
+ spawnIPAddress = agentsOptions.get("spawn_ipaddress");
maxPoolSize = agentsOptions.getInt("max_pool_size");
maxInstancesPerApp = agentsOptions.getInt("max_instances_per_app");
poolIdleTime = agentsOptions.getInt("pool_idle_time");
diff -Npru passenger-orig/ext/nginx/ngx_http_passenger_module.c passenger-wc/ext/nginx/ngx_http_passenger_module.c
--- passenger-orig/ext/nginx/ngx_http_passenger_module.c 2012-03-05 17:33:31.188658083 -0800
+++ passenger-wc/ext/nginx/ngx_http_passenger_module.c 2012-03-05 17:38:37.171628240 -0800
@@ -291,6 +291,7 @@ start_helper_server(ngx_cycle_t *cycle)
union_station_proxy_address,
union_station_proxy_type,
(const char **) prestart_uris_ary, passenger_main_conf.prestart_uris->nelts,
+ "127.0.0.1",
starting_helper_server_after_fork,
cycle,
&error_message);
diff -Npru passenger-orig/helper-scripts/passenger-spawn-server passenger-wc/helper-scripts/passenger-spawn-server
--- passenger-orig/helper-scripts/passenger-spawn-server 2012-03-05 17:33:31.193658083 -0800
+++ passenger-wc/helper-scripts/passenger-spawn-server 2012-03-05 17:38:37.171628240 -0800
@@ -47,6 +47,7 @@ begin
node_name = owner_socket.readline.strip
log_level = owner_socket.readline.to_i
debug_log_file = owner_socket.readline.strip
+ spawn_ipaddress = owner_socket.readline.strip
rescue EOFError
exit
end
@@ -93,6 +94,8 @@ begin
"node_name" => node_name
}
end
+
+ options["spawn_ipaddress"] = spawn_ipaddress
require 'phusion_passenger/spawn_manager'
spawn_manager = PhusionPassenger::SpawnManager.new(options)
diff -Npru passenger-orig/lib/phusion_passenger/abstract_request_handler.rb passenger-wc/lib/phusion_passenger/abstract_request_handler.rb
--- passenger-orig/lib/phusion_passenger/abstract_request_handler.rb 2012-03-05 17:33:31.159658087 -0800
+++ passenger-wc/lib/phusion_passenger/abstract_request_handler.rb 2012-03-05 17:38:37.172628240 -0800
@@ -174,11 +174,11 @@ class AbstractRequestHandler
@main_socket_address, @main_socket = create_unix_socket_on_filesystem
@server_sockets[:main] = [@main_socket_address, 'unix', @main_socket]
else
- @main_socket_address, @main_socket = create_tcp_socket
+ @main_socket_address, @main_socket = create_tcp_socket(options["spawn_ipaddress"])
@server_sockets[:main] = [@main_socket_address, 'tcp', @main_socket]
end
- @http_socket_address, @http_socket = create_tcp_socket
+ @http_socket_address, @http_socket = create_tcp_socket(options["spawn_ipaddress"])
@server_sockets[:http] = [@http_socket_address, 'tcp', @http_socket]
@owner_pipe = owner_pipe
@@ -397,13 +397,14 @@ private
end
end
- def create_tcp_socket
+ def create_tcp_socket(spawn_ipaddr = nil)
# We use "127.0.0.1" as address in order to force
# TCPv4 instead of TCPv6.
- socket = TCPServer.new('127.0.0.1', 0)
+ spawn_ipaddr ||= '127.0.0.1'
+ socket = TCPServer.new(spawn_ipaddr, 0)
socket.listen(BACKLOG_SIZE)
socket.close_on_exec!
- socket_address = "127.0.0.1:#{socket.addr[1]}"
+ socket_address = "#{spawn_ipaddr}:#{socket.addr[1]}"
return [socket_address, socket]
end