17 static void *ngx_core_module_create_conf(
ngx_cycle_t *cycle);
18 static char *ngx_core_module_init_conf(
ngx_cycle_t *cycle,
void *conf);
74 ngx_set_worker_processes,
102 ngx_set_cpu_affinity,
166 ngx_core_module_create_conf,
167 ngx_core_module_init_conf
173 &ngx_core_module_ctx,
192 static u_char *ngx_prefix;
193 static u_char *ngx_conf_file;
194 static u_char *ngx_conf_params;
195 static char *ngx_signal;
198 static char **ngx_os_environ;
215 if (ngx_get_options(argc, argv) !=
NGX_OK) {
219 if (ngx_show_version) {
224 "Usage: nginx [-?hvVtq] [-s signal] [-c filename] "
225 "[-p prefix] [-g directives]" NGX_LINEFEED
227 "Options:" NGX_LINEFEED
228 " -?,-h : this help" NGX_LINEFEED
229 " -v : show version and exit" NGX_LINEFEED
230 " -V : show version and configure options then exit"
232 " -t : test configuration and exit" NGX_LINEFEED
233 " -q : suppress non-error messages "
234 "during configuration testing" NGX_LINEFEED
235 " -s signal : send signal to a master process: "
236 "stop, quit, reopen, reload" NGX_LINEFEED
238 " -p prefix : set prefix path (default: "
241 " -p prefix : set prefix path (default: NONE)" NGX_LINEFEED
243 " -c filename : set configuration file (default: "
245 " -g directives : set global directives out of configuration "
246 "file" NGX_LINEFEED NGX_LINEFEED
250 if (ngx_show_configure) {
256 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
257 "TLS SNI support enabled" NGX_LINEFEED
259 "TLS SNI support disabled" NGX_LINEFEED
296 init_cycle.
log = log;
300 if (init_cycle.
pool == NULL) {
304 if (ngx_save_argv(&init_cycle, argc, argv) !=
NGX_OK) {
308 if (ngx_process_options(&init_cycle) !=
NGX_OK) {
324 if (ngx_add_inherited_sockets(&init_cycle) !=
NGX_OK) {
422 u_char *p, *v, *inherited;
426 inherited = (u_char *) getenv(
NGINX_VAR);
428 if (inherited == NULL) {
433 "using inherited sockets from \"%s\"", inherited);
442 for (p = inherited, v = p; *p; p++) {
443 if (*p ==
':' || *p ==
';') {
447 "invalid socket number \"%s\" in " NGINX_VAR
448 " environment variable, ignoring the rest"
449 " of the variable", v);
488 for (i = 0; i < ccf->
env.
nelts; i++) {
502 var->
data = (u_char *)
"TZ";
510 for (i = 0; i < ccf->
env.
nelts; i++) {
512 if (var[i].data[var[i].len] ==
'=') {
517 for (p = ngx_os_environ; *p; p++) {
520 && (*p)[var[
i].
len] ==
'=')
529 env =
ngx_alloc((*last + n + 1) *
sizeof(
char *), cycle->
log);
542 for (i = 0; i < ccf->
env.
nelts; i++) {
544 if (var[i].data[var[i].len] ==
'=') {
545 env[n++] = (
char *) var[i].data;
549 for (p = ngx_os_environ; *p; p++) {
552 && (*p)[var[
i].
len] ==
'=')
585 ctx.
name =
"new binary process";
613 #if (NGX_SETPROCTITLE_USES_ENV)
617 env[n++] =
"SPARE=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
618 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
619 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
620 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
621 "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
630 for (e = env; *e; e++) {
636 ctx.
envp = (
char *
const *) env;
643 "before executing new binary process \"%s\"",
660 "an attempt to execute new binary process \"%s\"",
673 ngx_get_options(
int argc,
char *
const *
argv)
678 for (i = 1; i <
argc; i++) {
680 p = (u_char *) argv[i];
693 ngx_show_version = 1;
698 ngx_show_version = 1;
702 ngx_show_version = 1;
703 ngx_show_configure = 1;
721 ngx_prefix = (u_char *) argv[i];
735 ngx_conf_file = (u_char *) argv[i];
749 ngx_conf_params = (u_char *) argv[i];
758 ngx_signal = (
char *) p;
760 }
else if (argv[++i]) {
761 ngx_signal = argv[
i];
796 ngx_save_argv(
ngx_cycle_t *cycle,
int argc,
char *
const *argv)
816 for (i = 0; i <
argc; i++) {
887 #ifdef NGX_CONF_PREFIX
920 if (ngx_conf_params) {
983 ngx_core_module_init_conf(
ngx_cycle_t *cycle,
void *conf)
994 #if (NGX_HAVE_CPU_AFFINITY)
1001 "the number of \"worker_processes\" is not equal to "
1002 "the number of \"worker_cpu_affinity\" masks, "
1003 "using last mask for remaining worker processes");
1011 ngx_threads_n = ccf->worker_threads;
1046 "getpwnam(\"" NGX_USER "\") failed");
1051 ccf->
user = pwd->pw_uid;
1061 ccf->
group = grp->gr_gid;
1078 if (lock_file.
len) {
1086 "\"lock_file\" could not be changed, ignored");
1090 lock_file.
len +=
sizeof(
".accept");
1107 ".accept",
sizeof(
".accept"));
1123 "\"user\" is not supported, ignored");
1137 return "is duplicate";
1140 if (geteuid() != 0) {
1142 "the \"user\" directive makes sense only "
1143 "if the master process runs "
1144 "with super-user privileges, ignored");
1153 pwd = getpwnam((
const char *) value[1].data);
1156 "getpwnam(\"%s\") failed", value[1].data);
1160 ccf->
user = pwd->pw_uid;
1165 grp = getgrnam(group);
1168 "getgrnam(\"%s\") failed", group);
1172 ccf->
group = grp->gr_gid;
1196 for (i = 0; i < value[1].
len; i++) {
1198 if (value[1].data[i] ==
'=') {
1219 return "is duplicate";
1224 if (value[1].data[0] ==
'-') {
1228 }
else if (value[1].data[0] ==
'+') {
1239 return "invalid number";
1253 #if (NGX_HAVE_CPU_AFFINITY)
1262 return "is duplicate";
1277 if (value[n].len > 64) {
1279 "\"worker_cpu_affinity\" supports up to 64 CPUs only");
1285 for (i = 0; i < value[n].
len; i++) {
1287 ch = value[n].
data[
i];
1305 "invalid character \"%c\" in \"worker_cpu_affinity\"",
1314 "\"worker_cpu_affinity\" is not supported "
1315 "on this platform, ignored");
1351 return "is duplicate";
1356 if (
ngx_strcmp(value[1].data,
"auto") == 0) {
1364 return "invalid value";