2023-02-09 17:49:11 +00:00
|
|
|
diff -Paur --no-dereference -- nginx.upstream/auto/feature nginx/auto/feature
|
|
|
|
--- nginx.upstream/auto/feature
|
|
|
|
+++ nginx/auto/feature
|
|
|
|
@@ -53,8 +53,13 @@
|
|
|
|
|
|
|
|
yes)
|
|
|
|
# /bin/sh is used to intercept "Killed" or "Abort trap" messages
|
|
|
|
- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
|
|
|
|
- echo " found"
|
|
|
|
+ if [ $CROSS_COMPILING = true ] ||
|
|
|
|
+ /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
|
|
|
|
+ if [ $CROSS_COMPILING = true ]; then
|
|
|
|
+ echo " cross-compiling (assuming found)"
|
|
|
|
+ else
|
|
|
|
+ echo " found"
|
|
|
|
+ fi
|
|
|
|
ngx_found=yes
|
|
|
|
|
|
|
|
if test -n "$ngx_feature_name"; then
|
|
|
|
@@ -68,8 +73,13 @@
|
|
|
|
|
|
|
|
value)
|
|
|
|
# /bin/sh is used to intercept "Killed" or "Abort trap" messages
|
|
|
|
- if /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
|
|
|
|
- echo " found"
|
|
|
|
+ if [ $CROSS_COMPILING = true ] ||
|
|
|
|
+ /bin/sh -c $NGX_AUTOTEST >> $NGX_AUTOCONF_ERR 2>&1; then
|
|
|
|
+ if [ $CROSS_COMPILING = true ]; then
|
|
|
|
+ echo " cross-compiling (assuming found)"
|
|
|
|
+ else
|
|
|
|
+ echo " found"
|
|
|
|
+ fi
|
|
|
|
ngx_found=yes
|
|
|
|
|
|
|
|
cat << END >> $NGX_AUTO_CONFIG_H
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/auto/install nginx/auto/install
|
|
|
|
--- nginx.upstream/auto/install
|
|
|
|
+++ nginx/auto/install
|
|
|
|
@@ -49,6 +49,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`
|
|
|
|
+NGX_SYSCONFDIR=`dirname $NGX_CONF_PREFIX`
|
|
|
|
+NGX_DEFAULT_CONF_PREFIX=$NGX_SYSCONFDIR/default/`basename $NGX_CONF_PREFIX`
|
|
|
|
|
|
|
|
|
|
|
|
case ".$NGX_PID_PATH" in
|
|
|
|
@@ -114,39 +116,27 @@
|
|
|
|
'\$(DESTDIR)$NGX_SBIN_PATH.old'
|
|
|
|
cp $NGX_OBJS/nginx '\$(DESTDIR)$NGX_SBIN_PATH'
|
|
|
|
|
|
|
|
- test -d '\$(DESTDIR)$NGX_CONF_PREFIX' \\
|
|
|
|
- || mkdir -p '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
+ test -d '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX' \\
|
|
|
|
+ || mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX'
|
|
|
|
|
|
|
|
- cp conf/koi-win '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
- cp conf/koi-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
- cp conf/win-utf '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
-
|
|
|
|
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types' \\
|
|
|
|
- || cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
- cp conf/mime.types '\$(DESTDIR)$NGX_CONF_PREFIX/mime.types.default'
|
|
|
|
-
|
|
|
|
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params' \\
|
|
|
|
- || cp conf/fastcgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
- cp conf/fastcgi_params \\
|
|
|
|
- '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi_params.default'
|
|
|
|
-
|
|
|
|
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf' \\
|
|
|
|
- || cp conf/fastcgi.conf '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
- cp conf/fastcgi.conf '\$(DESTDIR)$NGX_CONF_PREFIX/fastcgi.conf.default'
|
|
|
|
-
|
|
|
|
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params' \\
|
|
|
|
- || cp conf/uwsgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
- cp conf/uwsgi_params \\
|
|
|
|
- '\$(DESTDIR)$NGX_CONF_PREFIX/uwsgi_params.default'
|
|
|
|
-
|
|
|
|
- test -f '\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params' \\
|
|
|
|
- || cp conf/scgi_params '\$(DESTDIR)$NGX_CONF_PREFIX'
|
|
|
|
- cp conf/scgi_params \\
|
|
|
|
- '\$(DESTDIR)$NGX_CONF_PREFIX/scgi_params.default'
|
|
|
|
-
|
|
|
|
- test -f '\$(DESTDIR)$NGX_CONF_PATH' \\
|
|
|
|
- || cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PATH'
|
|
|
|
- cp conf/nginx.conf '\$(DESTDIR)$NGX_CONF_PREFIX/nginx.conf.default'
|
|
|
|
+ cp conf/koi-win '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX'
|
|
|
|
+ cp conf/koi-utf '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX'
|
|
|
|
+ cp conf/win-utf '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX'
|
|
|
|
+
|
|
|
|
+ test -d '\$(DESTDIR)/share/man/man8' || mkdir -p '\$(DESTDIR)/share/man/man8'
|
|
|
|
+ cp objs/nginx.8 '\$(DESTDIR)/share/man/man8'
|
|
|
|
+
|
|
|
|
+ cp conf/mime.types '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/mime.types'
|
|
|
|
+
|
|
|
|
+ cp conf/fastcgi_params '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/fastcgi_params'
|
|
|
|
+
|
|
|
|
+ cp conf/fastcgi.conf '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/fastcgi.conf'
|
|
|
|
+
|
|
|
|
+ cp conf/uwsgi_params '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/uwsgi_params'
|
|
|
|
+
|
|
|
|
+ cp conf/scgi_params '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/scgi_params'
|
|
|
|
+
|
|
|
|
+ cp conf/nginx.conf '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/nginx.conf'
|
|
|
|
|
|
|
|
test -d '\$(DESTDIR)`dirname "$NGX_PID_PATH"`' \\
|
|
|
|
|| mkdir -p '\$(DESTDIR)`dirname "$NGX_PID_PATH"`'
|
|
|
|
@@ -156,6 +146,28 @@
|
|
|
|
|
|
|
|
test -d '\$(DESTDIR)$NGX_PREFIX/html' \\
|
|
|
|
|| cp -R $NGX_HTML '\$(DESTDIR)$NGX_PREFIX'
|
|
|
|
+
|
|
|
|
+ test -d '\$(DESTDIR)/var/lib/nginx' || mkdir -p '\$(DESTDIR)/var/lib/nginx'
|
|
|
|
+
|
|
|
|
+ test -d '\$(DESTDIR)/share/init' || mkdir -p '\$(DESTDIR)/share/init'
|
|
|
|
+ cp init/nginx '\$(DESTDIR)/share/init'
|
|
|
|
+
|
|
|
|
+ mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/modules-available'
|
|
|
|
+ mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/modules-enabled'
|
|
|
|
+ mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/sites-available'
|
|
|
|
+ mkdir -p '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/sites-enabled'
|
|
|
|
+
|
|
|
|
+ cp sites-available/default \\
|
|
|
|
+ '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/sites-available'
|
|
|
|
+ ln -s ../sites-available/default \\
|
|
|
|
+ '\$(DESTDIR)$NGX_DEFAULT_CONF_PREFIX/sites-enabled'
|
|
|
|
+
|
|
|
|
+ mkdir -p '\$(DESTDIR)$NGX_SYSCONFDIR/default/passwd.d'
|
|
|
|
+ mkdir -p '\$(DESTDIR)$NGX_SYSCONFDIR/default/group.d'
|
|
|
|
+ echo "_nginx:x:101:101:_nginx:/var/empty:sh" \\
|
|
|
|
+ > '\$(DESTDIR)$NGX_SYSCONFDIR/default/passwd.d/nginx'
|
|
|
|
+ echo "_nginx::101:_nginx" \\
|
|
|
|
+ > '\$(DESTDIR)$NGX_SYSCONFDIR/default/group.d/nginx'
|
|
|
|
END
|
|
|
|
|
|
|
|
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/auto/lib/pcre/conf nginx/auto/lib/pcre/conf
|
|
|
|
--- nginx.upstream/auto/lib/pcre/conf
|
|
|
|
+++ nginx/auto/lib/pcre/conf
|
|
|
|
@@ -86,21 +86,6 @@
|
|
|
|
if (re == NULL) return 1"
|
|
|
|
. auto/feature
|
|
|
|
|
|
|
|
- if [ $ngx_found = no ]; then
|
|
|
|
-
|
|
|
|
- # pcre2-config
|
|
|
|
-
|
|
|
|
- ngx_pcre2_prefix=`pcre2-config --prefix 2>/dev/null`
|
|
|
|
-
|
|
|
|
- if [ -n "$ngx_pcre2_prefix" ]; then
|
|
|
|
- ngx_feature="PCRE2 library in $ngx_pcre2_prefix"
|
|
|
|
- ngx_feature_path=`pcre2-config --cflags \
|
|
|
|
- | sed -n -e 's/.*-I *\([^ ][^ ]*\).*/\1/p'`
|
|
|
|
- ngx_feature_libs=`pcre2-config --libs8`
|
|
|
|
- . auto/feature
|
|
|
|
- fi
|
|
|
|
- fi
|
|
|
|
-
|
|
|
|
if [ $ngx_found = yes ]; then
|
|
|
|
have=NGX_PCRE . auto/have
|
|
|
|
CORE_INCS="$CORE_INCS $ngx_feature_path"
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/auto/options nginx/auto/options
|
|
|
|
--- nginx.upstream/auto/options
|
|
|
|
+++ nginx/auto/options
|
|
|
|
@@ -17,6 +17,12 @@
|
|
|
|
NGX_GROUP=
|
|
|
|
NGX_BUILD=
|
|
|
|
|
|
|
|
+NGX_BUILD_TRIPLET=
|
|
|
|
+NGX_HOST_TRIPLET=
|
|
|
|
+NGX_TARGET_TRIPLET=
|
|
|
|
+
|
|
|
|
+CROSS_COMPILING=false
|
|
|
|
+
|
|
|
|
CC=${CC:-cc}
|
|
|
|
CPP=
|
|
|
|
NGX_OBJS=objs
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -194,6 +200,8 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
|
|
|
|
--prefix=) NGX_PREFIX="!" ;;
|
|
|
|
--prefix=*) NGX_PREFIX="$value" ;;
|
|
|
|
+ --exec-prefix=) ;;
|
|
|
|
+ --exec-prefix=*) ;;
|
|
|
|
--sbin-path=*) NGX_SBIN_PATH="$value" ;;
|
|
|
|
--modules-path=*) NGX_MODULES_PATH="$value" ;;
|
|
|
|
--conf-path=*) NGX_CONF_PATH="$value" ;;
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -205,9 +213,13 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
|
|
|
|
--crossbuild=*) NGX_PLATFORM="$value" ;;
|
|
|
|
|
|
|
|
- --build=*) NGX_BUILD="$value" ;;
|
|
|
|
+ --buildname=*) NGX_BUILD="$value" ;;
|
|
|
|
--builddir=*) NGX_OBJS="$value" ;;
|
|
|
|
|
|
|
|
+ --build=*) NGX_BUILD_TRIPLET="$value" ;;
|
|
|
|
+ --host=*) NGX_HOST_TRIPLET="$value" ;;
|
|
|
|
+ --target=*) NGX_TARGET_TRIPLET="$value";;
|
|
|
|
+
|
|
|
|
--with-select_module) EVENT_SELECT=YES ;;
|
|
|
|
--without-select_module) EVENT_SELECT=NONE ;;
|
|
|
|
--with-poll_module) EVENT_POLL=YES ;;
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -608,6 +620,12 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
+if [ "$NGX_BUILD_TRIPLET" != "$NGX_HOST_TRIPLET" ]; then
|
|
|
|
+ CROSS_COMPILING=true
|
|
|
|
+else
|
|
|
|
+ CROSS_COMPILING=false
|
|
|
|
+fi
|
|
|
|
+
|
|
|
|
|
|
|
|
if [ ".$NGX_PLATFORM" = ".win32" ]; then
|
|
|
|
NGX_WINE=$WINE
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -618,6 +636,8 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
NGX_MODULES_PATH=${NGX_MODULES_PATH:-modules}
|
|
|
|
NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}
|
|
|
|
NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`
|
|
|
|
+NGX_SYSCONFDIR=`dirname $NGX_CONF_PREFIX`
|
|
|
|
+NGX_DEFAULT_CONF_PREFIX=$NGX_SYSCONFDIR/default/`basename $NGX_CONF_PREFIX`
|
|
|
|
NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}
|
|
|
|
NGX_LOCK_PATH=${NGX_LOCK_PATH:-logs/nginx.lock}
|
|
|
|
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/auto/types/sizeof nginx/auto/types/sizeof
|
|
|
|
--- nginx.upstream/auto/types/sizeof
|
|
|
|
+++ nginx/auto/types/sizeof
|
|
|
|
@@ -16,6 +16,7 @@
|
|
|
|
|
|
|
|
cat << END > $NGX_AUTOTEST.c
|
|
|
|
|
|
|
|
+#include <assert.h>
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/time.h>
|
|
|
|
$NGX_INCLUDE_UNISTD_H
|
|
|
|
@@ -26,7 +27,7 @@
|
|
|
|
$NGX_INCLUDE_AUTO_CONFIG_H
|
|
|
|
|
|
|
|
int main(void) {
|
|
|
|
- printf("%d", (int) sizeof($ngx_type));
|
|
|
|
+ static_assert(sizeof($ngx_type) == GUESS, "sizeof($ngx_type) == GUESS");
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -36,13 +37,16 @@
|
|
|
|
ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \
|
|
|
|
-o $NGX_AUTOTEST $NGX_AUTOTEST.c $NGX_LD_OPT $ngx_feature_libs"
|
|
|
|
|
|
|
|
-eval "$ngx_test >> $NGX_AUTOCONF_ERR 2>&1"
|
|
|
|
+for ngx_size in 4 8; do
|
|
|
|
+ eval "$ngx_test -DGUESS=$ngx_size >> $NGX_AUTOCONF_ERR 2>&1"
|
|
|
|
|
|
|
|
+ if [ -x $NGX_AUTOTEST ]; then
|
|
|
|
+ echo " $ngx_size bytes"
|
|
|
|
+ break
|
|
|
|
+ fi
|
|
|
|
|
|
|
|
-if [ -x $NGX_AUTOTEST ]; then
|
|
|
|
- ngx_size=`$NGX_AUTOTEST`
|
|
|
|
- echo " $ngx_size bytes"
|
|
|
|
-fi
|
|
|
|
+ ngx_size=failed
|
|
|
|
+done
|
|
|
|
|
|
|
|
|
|
|
|
case $ngx_size in
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/auto/unix nginx/auto/unix
|
|
|
|
--- nginx.upstream/auto/unix
|
|
|
|
+++ nginx/auto/unix
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -851,15 +851,15 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
. auto/feature
|
|
|
|
|
|
|
|
|
|
|
|
-ngx_feature="mmap(MAP_ANON|MAP_SHARED)"
|
|
|
|
-ngx_feature_name="NGX_HAVE_MAP_ANON"
|
|
|
|
+ngx_feature="mmap(MAP_ANONYMOUS|MAP_PRIVATE)"
|
|
|
|
+ngx_feature_name="NGX_HAVE_MAP_ANONYMOUS"
|
|
|
|
ngx_feature_run=yes
|
|
|
|
ngx_feature_incs="#include <sys/mman.h>"
|
|
|
|
ngx_feature_path=
|
|
|
|
ngx_feature_libs=
|
|
|
|
ngx_feature_test="void *p;
|
|
|
|
p = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
|
|
|
|
- MAP_ANON|MAP_SHARED, -1, 0);
|
|
|
|
+ MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
|
|
|
if (p == MAP_FAILED) return 1;"
|
|
|
|
. auto/feature
|
|
|
|
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/conf/nginx.conf nginx/conf/nginx.conf
|
|
|
|
--- nginx.upstream/conf/nginx.conf
|
|
|
|
+++ nginx/conf/nginx.conf
|
|
|
|
@@ -8,6 +8,7 @@
|
|
|
|
|
|
|
|
#pid logs/nginx.pid;
|
|
|
|
|
|
|
|
+include modules-enabled/*.conf;
|
|
|
|
|
|
|
|
events {
|
|
|
|
worker_connections 1024;
|
|
|
|
@@ -18,6 +19,9 @@
|
|
|
|
include mime.types;
|
|
|
|
default_type application/octet-stream;
|
|
|
|
|
|
|
|
+ ssl_protocols TLSv1.2 TLSv1.3;
|
|
|
|
+ ssl_prefer_server_ciphers on;
|
|
|
|
+
|
|
|
|
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
|
|
|
# '$status $body_bytes_sent "$http_referer" '
|
|
|
|
# '"$http_user_agent" "$http_x_forwarded_for"';
|
|
|
|
@@ -32,86 +36,6 @@
|
|
|
|
|
|
|
|
#gzip on;
|
|
|
|
|
|
|
|
- server {
|
|
|
|
- listen 80;
|
|
|
|
- server_name localhost;
|
|
|
|
-
|
|
|
|
- #charset koi8-r;
|
|
|
|
-
|
|
|
|
- #access_log logs/host.access.log main;
|
|
|
|
-
|
|
|
|
- location / {
|
|
|
|
- root html;
|
|
|
|
- index index.html index.htm;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- #error_page 404 /404.html;
|
|
|
|
-
|
|
|
|
- # redirect server error pages to the static page /50x.html
|
|
|
|
- #
|
|
|
|
- error_page 500 502 503 504 /50x.html;
|
|
|
|
- location = /50x.html {
|
|
|
|
- root html;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- # proxy the PHP scripts to Apache listening on 127.0.0.1:80
|
|
|
|
- #
|
|
|
|
- #location ~ \.php$ {
|
|
|
|
- # proxy_pass http://127.0.0.1;
|
|
|
|
- #}
|
|
|
|
-
|
|
|
|
- # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
|
|
|
|
- #
|
|
|
|
- #location ~ \.php$ {
|
|
|
|
- # root html;
|
|
|
|
- # fastcgi_pass 127.0.0.1:9000;
|
|
|
|
- # fastcgi_index index.php;
|
|
|
|
- # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
|
|
|
|
- # include fastcgi_params;
|
|
|
|
- #}
|
|
|
|
-
|
|
|
|
- # deny access to .htaccess files, if Apache's document root
|
|
|
|
- # concurs with nginx's one
|
|
|
|
- #
|
|
|
|
- #location ~ /\.ht {
|
|
|
|
- # deny all;
|
|
|
|
- #}
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- # another virtual host using mix of IP-, name-, and port-based configuration
|
|
|
|
- #
|
|
|
|
- #server {
|
|
|
|
- # listen 8000;
|
|
|
|
- # listen somename:8080;
|
|
|
|
- # server_name somename alias another.alias;
|
|
|
|
-
|
|
|
|
- # location / {
|
|
|
|
- # root html;
|
|
|
|
- # index index.html index.htm;
|
|
|
|
- # }
|
|
|
|
- #}
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- # HTTPS server
|
|
|
|
- #
|
|
|
|
- #server {
|
|
|
|
- # listen 443 ssl;
|
|
|
|
- # server_name localhost;
|
|
|
|
-
|
|
|
|
- # ssl_certificate cert.pem;
|
|
|
|
- # ssl_certificate_key cert.key;
|
|
|
|
-
|
|
|
|
- # ssl_session_cache shared:SSL:1m;
|
|
|
|
- # ssl_session_timeout 5m;
|
|
|
|
-
|
|
|
|
- # ssl_ciphers HIGH:!aNULL:!MD5;
|
|
|
|
- # ssl_prefer_server_ciphers on;
|
|
|
|
-
|
|
|
|
- # location / {
|
|
|
|
- # root html;
|
|
|
|
- # index index.html index.htm;
|
|
|
|
- # }
|
|
|
|
- #}
|
|
|
|
-
|
|
|
|
+ include conf.d/*.conf;
|
|
|
|
+ include sites-enabled/*;
|
|
|
|
}
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/configure nginx/configure
|
|
|
|
--- nginx.upstream/configure
|
|
|
|
+++ nginx/configure
|
|
|
|
@@ -27,9 +27,16 @@
|
|
|
|
if test -z "$NGX_PLATFORM"; then
|
|
|
|
echo "checking for OS"
|
|
|
|
|
|
|
|
- NGX_SYSTEM=`uname -s 2>/dev/null`
|
|
|
|
- NGX_RELEASE=`uname -r 2>/dev/null`
|
|
|
|
- NGX_MACHINE=`uname -m 2>/dev/null`
|
|
|
|
+ if [ -z "$NGX_HOST_TRIPLET" ]; then
|
|
|
|
+ NGX_SYSTEM=`uname -s 2>/dev/null`
|
|
|
|
+ NGX_RELEASE=`uname -r 2>/dev/null`
|
|
|
|
+ NGX_MACHINE=`uname -m 2>/dev/null`
|
|
|
|
+ else
|
|
|
|
+ NGX_SYSTEM=`echo "$NGX_HOST_TRIPLET" | sed -E 's/^.*-([^-]+)[0-9]*$/\1/'`
|
|
|
|
+ NGX_RELEASE=`echo "$NGX_HOST_TRIPLET" | sed -E 's/^.*-[^-]+([0-9]*)$/\1/'`
|
|
|
|
+ if [ -z $NGX_RELEASE ]; then NGX_RELEASE=1; fi
|
|
|
|
+ NGX_MACHINE=`echo "$NGX_HOST_TRIPLET" | sed -E 's/^([^-]+)-.*$/\1/'`
|
|
|
|
+ fi
|
|
|
|
|
|
|
|
echo " + $NGX_SYSTEM $NGX_RELEASE $NGX_MACHINE"
|
|
|
|
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -84,6 +91,7 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
|
|
|
|
have=NGX_SBIN_PATH value="\"$NGX_SBIN_PATH\"" . auto/define
|
|
|
|
have=NGX_CONF_PATH value="\"$NGX_CONF_PATH\"" . auto/define
|
|
|
|
+have=NGX_DEFAULT_CONF_PREFIX value="\"$NGX_DEFAULT_CONF_PREFIX\"" . auto/define
|
|
|
|
have=NGX_PID_PATH value="\"$NGX_PID_PATH\"" . auto/define
|
|
|
|
have=NGX_LOCK_PATH value="\"$NGX_LOCK_PATH\"" . auto/define
|
|
|
|
have=NGX_ERROR_LOG_PATH value="\"$NGX_ERROR_LOG_PATH\"" . auto/define
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/init/nginx nginx/init/nginx
|
|
|
|
--- nginx.upstream/init/nginx
|
|
|
|
+++ nginx/init/nginx
|
|
|
|
@@ -0,0 +1,2 @@
|
|
|
|
+require network
|
|
|
|
+exec nginx
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/sites-available/default nginx/sites-available/default
|
|
|
|
--- nginx.upstream/sites-available/default
|
|
|
|
+++ nginx/sites-available/default
|
|
|
|
@@ -0,0 +1,81 @@
|
|
|
|
+server {
|
|
|
|
+ listen 80;
|
|
|
|
+ server_name localhost;
|
|
|
|
+
|
|
|
|
+ #charset koi8-r;
|
|
|
|
+
|
|
|
|
+ #access_log logs/host.access.log main;
|
|
|
|
+
|
|
|
|
+ location / {
|
|
|
|
+ root html;
|
|
|
|
+ index index.html index.htm;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #error_page 404 /404.html;
|
|
|
|
+
|
|
|
|
+ # redirect server error pages to the static page /50x.html
|
|
|
|
+ #
|
|
|
|
+ error_page 500 502 503 504 /50x.html;
|
|
|
|
+ location = /50x.html {
|
|
|
|
+ root html;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ # proxy the PHP scripts to Apache listening on 127.0.0.1:80
|
|
|
|
+ #
|
|
|
|
+ #location ~ \.php$ {
|
|
|
|
+ # proxy_pass http://127.0.0.1;
|
|
|
|
+ #}
|
|
|
|
+
|
|
|
|
+ # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
|
|
|
|
+ #
|
|
|
|
+ #location ~ \.php$ {
|
|
|
|
+ # root html;
|
|
|
|
+ # fastcgi_pass 127.0.0.1:9000;
|
|
|
|
+ # fastcgi_index index.php;
|
|
|
|
+ # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
|
|
|
|
+ # include fastcgi_params;
|
|
|
|
+ #}
|
|
|
|
+
|
|
|
|
+ # deny access to .htaccess files, if Apache's document root
|
|
|
|
+ # concurs with nginx's one
|
|
|
|
+ #
|
|
|
|
+ #location ~ /\.ht {
|
|
|
|
+ # deny all;
|
|
|
|
+ #}
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# another virtual host using mix of IP-, name-, and port-based configuration
|
|
|
|
+#
|
|
|
|
+#server {
|
|
|
|
+# listen 8000;
|
|
|
|
+# listen somename:8080;
|
|
|
|
+# server_name somename alias another.alias;
|
|
|
|
+
|
|
|
|
+# location / {
|
|
|
|
+# root html;
|
|
|
|
+# index index.html index.htm;
|
|
|
|
+# }
|
|
|
|
+#}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+# HTTPS server
|
|
|
|
+#
|
|
|
|
+#server {
|
|
|
|
+# listen 443 ssl;
|
|
|
|
+# server_name localhost;
|
|
|
|
+
|
|
|
|
+# ssl_certificate cert.pem;
|
|
|
|
+# ssl_certificate_key cert.key;
|
|
|
|
+
|
|
|
|
+# ssl_session_cache shared:SSL:1m;
|
|
|
|
+# ssl_session_timeout 5m;
|
|
|
|
+
|
|
|
|
+# ssl_ciphers HIGH:!aNULL:!MD5;
|
|
|
|
+# ssl_prefer_server_ciphers on;
|
|
|
|
+
|
|
|
|
+# location / {
|
|
|
|
+# root html;
|
|
|
|
+# index index.html index.htm;
|
|
|
|
+# }
|
|
|
|
+#}
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/core/nginx.c nginx/src/core/nginx.c
|
|
|
|
--- nginx.upstream/src/core/nginx.c
|
|
|
|
+++ nginx/src/core/nginx.c
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -360,7 +360,7 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
- if (ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) {
|
|
|
|
+ if (ccf->daemon && ngx_create_pidfile(&ccf->pid, cycle->log) != NGX_OK) {
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -991,6 +991,7 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
{
|
|
|
|
u_char *p;
|
|
|
|
size_t len;
|
|
|
|
+ int is_default = 0;
|
|
|
|
|
|
|
|
if (ngx_prefix) {
|
|
|
|
len = ngx_strlen(ngx_prefix);
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -1051,14 +1052,18 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
cycle->conf_file.data = ngx_conf_file;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
- ngx_str_set(&cycle->conf_file, NGX_CONF_PATH);
|
|
|
|
+ ngx_str_set(&cycle->conf_file, "nginx.conf");
|
|
|
|
}
|
|
|
|
|
|
|
|
- if (ngx_conf_full_name(cycle, &cycle->conf_file, 0) != NGX_OK) {
|
|
|
|
+ is_default = !ngx_strcmp(cycle->conf_prefix.data, NGX_CONF_PREFIX) &&
|
|
|
|
+ !ngx_strcmp(cycle->conf_file.data, "nginx.conf");
|
|
|
|
+
|
|
|
|
+ if (ngx_conf_full_name(cycle, &cycle->conf_file, 1) != NGX_OK) {
|
|
|
|
return NGX_ERROR;
|
|
|
|
}
|
|
|
|
|
|
|
|
for (p = cycle->conf_file.data + cycle->conf_file.len - 1;
|
|
|
|
+ !is_default &&
|
|
|
|
p > cycle->conf_file.data;
|
|
|
|
p--)
|
|
|
|
{
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -1140,7 +1145,7 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
{
|
|
|
|
ngx_core_conf_t *ccf = conf;
|
|
|
|
|
|
|
|
- ngx_conf_init_value(ccf->daemon, 1);
|
|
|
|
+ ngx_conf_init_value(ccf->daemon, 0);
|
|
|
|
ngx_conf_init_value(ccf->master, 1);
|
|
|
|
ngx_conf_init_msec_value(ccf->timer_resolution, 0);
|
|
|
|
ngx_conf_init_msec_value(ccf->shutdown_timeout, 0);
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/core/ngx_conf_file.c nginx/src/core/ngx_conf_file.c
|
|
|
|
--- nginx.upstream/src/core/ngx_conf_file.c
|
|
|
|
+++ nginx/src/core/ngx_conf_file.c
|
|
|
|
@@ -882,13 +882,73 @@
|
|
|
|
return rv;
|
|
|
|
}
|
|
|
|
|
|
|
|
+static void
|
|
|
|
+ngx_truncate_glob(char *path)
|
|
|
|
+{
|
|
|
|
+ size_t last_slash = 0;
|
|
|
|
+ for (size_t i = 0; path[i]; i++) {
|
|
|
|
+ if (path[i] == '/') {
|
|
|
|
+ last_slash = i;
|
|
|
|
+ } else if (path[i] == '*' || path[i] == '?' || path[i] == '[') {
|
|
|
|
+ path[last_slash + 1] = '\0';
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+static ngx_int_t
|
|
|
|
+ngx_conf_is_default(ngx_cycle_t *cycle, ngx_str_t *str)
|
|
|
|
+{
|
|
|
|
+ char *prefix = NULL;
|
|
|
|
+ char *conf_path = NULL;
|
|
|
|
+ char *def_path = NULL;
|
|
|
|
+ const char *name = (const char *)str->data;
|
|
|
|
+ ngx_int_t result = NGX_ERROR;
|
|
|
|
+
|
|
|
|
+ if (!(prefix = strndup((const char *)cycle->conf_prefix.data,
|
|
|
|
+ cycle->conf_prefix.len))) {
|
|
|
|
+ return NGX_ERROR;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (name[0] == '/' || ngx_strcmp(prefix, NGX_CONF_PREFIX) != 0) {
|
|
|
|
+ free(prefix);
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (0 <= asprintf(&conf_path, "%s%s", prefix, name) &&
|
|
|
|
+ 0 <= asprintf(&def_path, "%s%s", NGX_DEFAULT_CONF_PREFIX "/", name)) {
|
|
|
|
+ ngx_truncate_glob(conf_path);
|
|
|
|
+ ngx_truncate_glob(def_path);
|
|
|
|
+ result = access(conf_path, F_OK) < 0 && errno == ENOENT &&
|
|
|
|
+ !access(def_path, F_OK);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ free(conf_path);
|
|
|
|
+ free(def_path);
|
|
|
|
+ free(prefix);
|
|
|
|
+
|
|
|
|
+ return result;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
|
|
|
|
ngx_int_t
|
|
|
|
ngx_conf_full_name(ngx_cycle_t *cycle, ngx_str_t *name, ngx_uint_t conf_prefix)
|
|
|
|
{
|
|
|
|
- ngx_str_t *prefix;
|
|
|
|
+ ngx_str_t *prefix = &cycle->prefix;
|
|
|
|
+ ngx_str_t default_prefix;
|
|
|
|
|
|
|
|
- prefix = conf_prefix ? &cycle->conf_prefix : &cycle->prefix;
|
|
|
|
+ ngx_str_set(&default_prefix, NGX_DEFAULT_CONF_PREFIX "/");
|
|
|
|
+
|
|
|
|
+ if (conf_prefix) {
|
|
|
|
+ int is_default = ngx_conf_is_default(cycle, name);
|
|
|
|
+
|
|
|
|
+ if (is_default == NGX_ERROR) {
|
|
|
|
+ return NGX_ERROR;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ prefix = is_default ? &default_prefix : &cycle->conf_prefix;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
return ngx_get_full_name(cycle->pool, prefix, name);
|
|
|
|
}
|
|
|
|
@@ -1484,3 +1544,4 @@
|
|
|
|
|
|
|
|
return NGX_CONF_ERROR;
|
|
|
|
}
|
|
|
|
+
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/core/ngx_config.h nginx/src/core/ngx_config.h
|
|
|
|
--- nginx.upstream/src/core/ngx_config.h
|
|
|
|
+++ nginx/src/core/ngx_config.h
|
|
|
|
@@ -54,7 +54,8 @@
|
|
|
|
#define ngx_signal_helper(n) SIG##n
|
|
|
|
#define ngx_signal_value(n) ngx_signal_helper(n)
|
|
|
|
|
|
|
|
-#define ngx_random random
|
|
|
|
+#define ngx_random arc4random
|
|
|
|
+#define srandom(seed) ((void) (seed))
|
|
|
|
|
|
|
|
/* TODO: #ifndef */
|
|
|
|
#define NGX_SHUTDOWN_SIGNAL QUIT
|
|
|
|
@@ -79,6 +80,11 @@
|
|
|
|
typedef uintptr_t ngx_uint_t;
|
|
|
|
typedef intptr_t ngx_flag_t;
|
|
|
|
|
|
|
|
+typedef unsigned char u_char;
|
|
|
|
+typedef unsigned short u_short;
|
|
|
|
+typedef unsigned int u_int;
|
|
|
|
+typedef unsigned long u_long;
|
|
|
|
+
|
|
|
|
|
|
|
|
#define NGX_INT32_LEN (sizeof("-2147483648") - 1)
|
|
|
|
#define NGX_INT64_LEN (sizeof("-9223372036854775808") - 1)
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/core/ngx_cycle.h nginx/src/core/ngx_cycle.h
|
|
|
|
--- nginx.upstream/src/core/ngx_cycle.h
|
|
|
|
+++ nginx/src/core/ngx_cycle.h
|
|
|
|
@@ -79,6 +79,7 @@
|
|
|
|
ngx_str_t conf_file;
|
|
|
|
ngx_str_t conf_param;
|
|
|
|
ngx_str_t conf_prefix;
|
|
|
|
+ ngx_str_t conf_default_prefix;
|
|
|
|
ngx_str_t prefix;
|
|
|
|
ngx_str_t error_log;
|
|
|
|
ngx_str_t lock_file;
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/event/ngx_event.c nginx/src/event/ngx_event.c
|
|
|
|
--- nginx.upstream/src/event/ngx_event.c
|
|
|
|
+++ nginx/src/event/ngx_event.c
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -699,7 +699,8 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
|
|
|
|
if (ngx_timer_resolution && !(ngx_event_flags & NGX_USE_TIMER_EVENT)) {
|
|
|
|
struct sigaction sa;
|
|
|
|
- struct itimerval itv;
|
|
|
|
+ struct itimerspec its;
|
|
|
|
+ timer_t timer;
|
|
|
|
|
|
|
|
ngx_memzero(&sa, sizeof(struct sigaction));
|
|
|
|
sa.sa_handler = ngx_timer_signal_handler;
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -711,15 +712,16 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
return NGX_ERROR;
|
|
|
|
}
|
|
|
|
|
|
|
|
- itv.it_interval.tv_sec = ngx_timer_resolution / 1000;
|
|
|
|
- itv.it_interval.tv_usec = (ngx_timer_resolution % 1000) * 1000;
|
|
|
|
- itv.it_value.tv_sec = ngx_timer_resolution / 1000;
|
|
|
|
- itv.it_value.tv_usec = (ngx_timer_resolution % 1000 ) * 1000;
|
|
|
|
+ its.it_interval.tv_sec = ngx_timer_resolution / 1000;
|
|
|
|
+ its.it_interval.tv_nsec = (ngx_timer_resolution % 1000) * 1000000;
|
|
|
|
+ its.it_value.tv_sec = ngx_timer_resolution / 1000;
|
|
|
|
+ its.it_value.tv_nsec = (ngx_timer_resolution % 1000 ) * 1000000;
|
|
|
|
|
|
|
|
- if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
|
|
|
|
+ if (timer_create(CLOCK_REALTIME, NULL, &timer) == -1) {
|
|
|
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
|
|
|
- "setitimer() failed");
|
|
|
|
+ "timer_create() failed");
|
|
|
|
}
|
|
|
|
+ timer_settime(timer, 0, &its, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (ngx_event_flags & NGX_USE_FD_EVENT) {
|
2024-01-28 17:52:03 +00:00
|
|
|
@@ -731,6 +733,11 @@
|
2023-02-09 17:49:11 +00:00
|
|
|
return NGX_ERROR;
|
|
|
|
}
|
|
|
|
|
|
|
|
+ /* PATCH: Bad code assuming there is a low fd limit. */
|
|
|
|
+ if (INT_MAX <= rlmt.rlim_cur) {
|
|
|
|
+ rlmt.rlim_cur = 65536;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
cycle->files_n = (ngx_uint_t) rlmt.rlim_cur;
|
|
|
|
|
|
|
|
cycle->files = ngx_calloc(sizeof(ngx_connection_t *) * cycle->files_n,
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_channel.c nginx/src/os/unix/ngx_channel.c
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_channel.c
|
|
|
|
+++ nginx/src/os/unix/ngx_channel.c
|
|
|
|
@@ -31,7 +31,7 @@
|
|
|
|
msg.msg_controllen = 0;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
- msg.msg_control = (caddr_t) &cmsg;
|
|
|
|
+ msg.msg_control = &cmsg;
|
|
|
|
msg.msg_controllen = sizeof(cmsg);
|
|
|
|
|
|
|
|
ngx_memzero(&cmsg, sizeof(cmsg));
|
|
|
|
@@ -62,7 +62,7 @@
|
|
|
|
msg.msg_accrightslen = 0;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
- msg.msg_accrights = (caddr_t) &ch->fd;
|
|
|
|
+ msg.msg_accrights = &ch->fd;
|
|
|
|
msg.msg_accrightslen = sizeof(int);
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -118,10 +118,10 @@
|
|
|
|
msg.msg_iovlen = 1;
|
|
|
|
|
|
|
|
#if (NGX_HAVE_MSGHDR_MSG_CONTROL)
|
|
|
|
- msg.msg_control = (caddr_t) &cmsg;
|
|
|
|
+ msg.msg_control = &cmsg;
|
|
|
|
msg.msg_controllen = sizeof(cmsg);
|
|
|
|
#else
|
|
|
|
- msg.msg_accrights = (caddr_t) &fd;
|
|
|
|
+ msg.msg_accrights = &fd;
|
|
|
|
msg.msg_accrightslen = sizeof(int);
|
|
|
|
#endif
|
|
|
|
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_files.c nginx/src/os/unix/ngx_files.c
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_files.c
|
|
|
|
+++ nginx/src/os/unix/ngx_files.c
|
|
|
|
@@ -600,14 +600,14 @@
|
|
|
|
ngx_int_t
|
|
|
|
ngx_set_file_time(u_char *name, ngx_fd_t fd, time_t s)
|
|
|
|
{
|
|
|
|
- struct timeval tv[2];
|
|
|
|
+ struct timespec tv[2];
|
|
|
|
|
|
|
|
tv[0].tv_sec = ngx_time();
|
|
|
|
- tv[0].tv_usec = 0;
|
|
|
|
+ tv[0].tv_nsec = 0;
|
|
|
|
tv[1].tv_sec = s;
|
|
|
|
- tv[1].tv_usec = 0;
|
|
|
|
+ tv[1].tv_nsec = 0;
|
|
|
|
|
|
|
|
- if (utimes((char *) name, tv) != -1) {
|
|
|
|
+ if (utimens((char *) name, tv) != -1) {
|
|
|
|
return NGX_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -758,6 +758,9 @@
|
|
|
|
ngx_err_t
|
|
|
|
ngx_trylock_fd(ngx_fd_t fd)
|
|
|
|
{
|
|
|
|
+#ifdef __sortix__
|
|
|
|
+ (void) fd;
|
|
|
|
+#else
|
|
|
|
struct flock fl;
|
|
|
|
|
|
|
|
ngx_memzero(&fl, sizeof(struct flock));
|
|
|
|
@@ -767,7 +770,7 @@
|
|
|
|
if (fcntl(fd, F_SETLK, &fl) == -1) {
|
|
|
|
return ngx_errno;
|
|
|
|
}
|
|
|
|
-
|
|
|
|
+#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -775,6 +778,9 @@
|
|
|
|
ngx_err_t
|
|
|
|
ngx_lock_fd(ngx_fd_t fd)
|
|
|
|
{
|
|
|
|
+#ifdef __sortix__
|
|
|
|
+ (void) fd;
|
|
|
|
+#else
|
|
|
|
struct flock fl;
|
|
|
|
|
|
|
|
ngx_memzero(&fl, sizeof(struct flock));
|
|
|
|
@@ -784,7 +790,7 @@
|
|
|
|
if (fcntl(fd, F_SETLKW, &fl) == -1) {
|
|
|
|
return ngx_errno;
|
|
|
|
}
|
|
|
|
-
|
|
|
|
+#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -792,6 +798,9 @@
|
|
|
|
ngx_err_t
|
|
|
|
ngx_unlock_fd(ngx_fd_t fd)
|
|
|
|
{
|
|
|
|
+#ifdef __sortix__
|
|
|
|
+ (void) fd;
|
|
|
|
+#else
|
|
|
|
struct flock fl;
|
|
|
|
|
|
|
|
ngx_memzero(&fl, sizeof(struct flock));
|
|
|
|
@@ -801,7 +810,7 @@
|
|
|
|
if (fcntl(fd, F_SETLK, &fl) == -1) {
|
|
|
|
return ngx_errno;
|
|
|
|
}
|
|
|
|
-
|
|
|
|
+#endif
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_posix_config.h nginx/src/os/unix/ngx_posix_config.h
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_posix_config.h
|
|
|
|
+++ nginx/src/os/unix/ngx_posix_config.h
|
|
|
|
@@ -37,6 +37,7 @@
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
#include <sys/time.h>
|
|
|
|
+#include <sys/select.h>
|
|
|
|
#if (NGX_HAVE_UNISTD_H)
|
|
|
|
#include <unistd.h>
|
|
|
|
#endif
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_process.c nginx/src/os/unix/ngx_process.c
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_process.c
|
|
|
|
+++ nginx/src/os/unix/ngx_process.c
|
|
|
|
@@ -71,7 +71,9 @@
|
|
|
|
|
|
|
|
{ SIGINT, "SIGINT", "", ngx_signal_handler },
|
|
|
|
|
|
|
|
+#ifdef SIGIO
|
|
|
|
{ SIGIO, "SIGIO", "", ngx_signal_handler },
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
{ SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
|
|
|
|
|
|
|
|
@@ -87,7 +89,9 @@
|
|
|
|
ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data,
|
|
|
|
char *name, ngx_int_t respawn)
|
|
|
|
{
|
|
|
|
+#ifdef FIOASYNC
|
|
|
|
u_long on;
|
|
|
|
+#endif
|
|
|
|
ngx_pid_t pid;
|
|
|
|
ngx_int_t s;
|
|
|
|
|
|
|
|
@@ -142,6 +146,7 @@
|
|
|
|
return NGX_INVALID_PID;
|
|
|
|
}
|
|
|
|
|
|
|
|
+#ifdef FIOASYNC
|
|
|
|
on = 1;
|
|
|
|
if (ioctl(ngx_processes[s].channel[0], FIOASYNC, &on) == -1) {
|
|
|
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
|
|
|
@@ -149,13 +154,16 @@
|
|
|
|
ngx_close_channel(ngx_processes[s].channel, cycle->log);
|
|
|
|
return NGX_INVALID_PID;
|
|
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
+#ifdef F_SETOWN
|
|
|
|
if (fcntl(ngx_processes[s].channel[0], F_SETOWN, ngx_pid) == -1) {
|
|
|
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
|
|
|
"fcntl(F_SETOWN) failed while spawning \"%s\"", name);
|
|
|
|
ngx_close_channel(ngx_processes[s].channel, cycle->log);
|
|
|
|
return NGX_INVALID_PID;
|
|
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
if (fcntl(ngx_processes[s].channel[0], F_SETFD, FD_CLOEXEC) == -1) {
|
|
|
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
|
|
|
@@ -394,9 +402,11 @@
|
|
|
|
ngx_sigalrm = 1;
|
|
|
|
break;
|
|
|
|
|
|
|
|
+#ifdef SIGIO
|
|
|
|
case SIGIO:
|
|
|
|
ngx_sigio = 1;
|
|
|
|
break;
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
case SIGCHLD:
|
|
|
|
ngx_reap = 1;
|
|
|
|
@@ -433,7 +443,9 @@
|
|
|
|
|
|
|
|
case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
|
|
|
|
case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
|
|
|
|
+#ifdef SIGIO
|
|
|
|
case SIGIO:
|
|
|
|
+#endif
|
|
|
|
action = ", ignoring";
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_process_cycle.c nginx/src/os/unix/ngx_process_cycle.c
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_process_cycle.c
|
|
|
|
+++ nginx/src/os/unix/ngx_process_cycle.c
|
|
|
|
@@ -69,6 +69,19 @@
|
|
|
|
static ngx_log_t ngx_exit_log;
|
|
|
|
static ngx_open_file_t ngx_exit_log_file;
|
|
|
|
|
|
|
|
+static void
|
|
|
|
+ready(void)
|
|
|
|
+{
|
|
|
|
+ const char *readyfd_env = getenv("READYFD");
|
|
|
|
+ if ( !readyfd_env )
|
|
|
|
+ return;
|
|
|
|
+ int readyfd = atoi(readyfd_env);
|
|
|
|
+ char c = '\n';
|
|
|
|
+ write(readyfd, &c, 1);
|
|
|
|
+ close(readyfd);
|
|
|
|
+ unsetenv("READYFD");
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
|
|
|
|
void
|
|
|
|
ngx_master_process_cycle(ngx_cycle_t *cycle)
|
|
|
|
@@ -79,7 +92,7 @@
|
|
|
|
ngx_int_t i;
|
|
|
|
ngx_uint_t sigio;
|
|
|
|
sigset_t set;
|
|
|
|
- struct itimerval itv;
|
|
|
|
+ struct itimerspec its;
|
|
|
|
ngx_uint_t live;
|
|
|
|
ngx_msec_t delay;
|
|
|
|
ngx_core_conf_t *ccf;
|
|
|
|
@@ -87,7 +100,9 @@
|
|
|
|
sigemptyset(&set);
|
|
|
|
sigaddset(&set, SIGCHLD);
|
|
|
|
sigaddset(&set, SIGALRM);
|
|
|
|
+#ifdef SIGIO
|
|
|
|
sigaddset(&set, SIGIO);
|
|
|
|
+#endif
|
|
|
|
sigaddset(&set, SIGINT);
|
|
|
|
sigaddset(&set, ngx_signal_value(NGX_RECONFIGURE_SIGNAL));
|
|
|
|
sigaddset(&set, ngx_signal_value(NGX_REOPEN_SIGNAL));
|
|
|
|
@@ -136,8 +151,12 @@
|
|
|
|
sigio = 0;
|
|
|
|
live = 1;
|
|
|
|
|
|
|
|
+ ready();
|
|
|
|
+
|
|
|
|
for ( ;; ) {
|
|
|
|
if (delay) {
|
|
|
|
+ timer_t timer;
|
|
|
|
+
|
|
|
|
if (ngx_sigalrm) {
|
|
|
|
sigio = 0;
|
|
|
|
delay *= 2;
|
|
|
|
@@ -147,15 +166,16 @@
|
|
|
|
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
|
|
|
|
"termination cycle: %M", delay);
|
|
|
|
|
|
|
|
- itv.it_interval.tv_sec = 0;
|
|
|
|
- itv.it_interval.tv_usec = 0;
|
|
|
|
- itv.it_value.tv_sec = delay / 1000;
|
|
|
|
- itv.it_value.tv_usec = (delay % 1000 ) * 1000;
|
|
|
|
+ its.it_interval.tv_sec = 0;
|
|
|
|
+ its.it_interval.tv_nsec = 0;
|
|
|
|
+ its.it_value.tv_sec = delay / 1000000;
|
|
|
|
+ its.it_value.tv_nsec = (delay % 1000 ) * 1000000;
|
|
|
|
|
|
|
|
- if (setitimer(ITIMER_REAL, &itv, NULL) == -1) {
|
|
|
|
+ if (timer_create(CLOCK_REALTIME, NULL, &timer) == -1) {
|
|
|
|
ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
|
|
|
|
- "setitimer() failed");
|
|
|
|
+ "timer_create() failed");
|
|
|
|
}
|
|
|
|
+ timer_settime(timer, 0, &its, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "sigsuspend");
|
|
|
|
@@ -294,6 +314,8 @@
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
+ ready();
|
|
|
|
+
|
|
|
|
for ( ;; ) {
|
|
|
|
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "worker cycle");
|
|
|
|
|
|
|
|
@@ -804,11 +826,13 @@
|
|
|
|
exit(2);
|
|
|
|
}
|
|
|
|
|
|
|
|
+#ifndef __sortix__
|
|
|
|
if (initgroups(ccf->username, ccf->group) == -1) {
|
|
|
|
ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
|
|
|
|
"initgroups(%s, %d) failed",
|
|
|
|
ccf->username, ccf->group);
|
|
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
#if (NGX_HAVE_PR_SET_KEEPCAPS && NGX_HAVE_CAPABILITIES)
|
|
|
|
if (ccf->transparent && ccf->user) {
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_shmem.c nginx/src/os/unix/ngx_shmem.c
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_shmem.c
|
|
|
|
+++ nginx/src/os/unix/ngx_shmem.c
|
|
|
|
@@ -9,18 +9,18 @@
|
|
|
|
#include <ngx_core.h>
|
|
|
|
|
|
|
|
|
|
|
|
-#if (NGX_HAVE_MAP_ANON)
|
|
|
|
+#if (NGX_HAVE_MAP_ANONYMOUS)
|
|
|
|
|
|
|
|
ngx_int_t
|
|
|
|
ngx_shm_alloc(ngx_shm_t *shm)
|
|
|
|
{
|
|
|
|
shm->addr = (u_char *) mmap(NULL, shm->size,
|
|
|
|
PROT_READ|PROT_WRITE,
|
|
|
|
- MAP_ANON|MAP_SHARED, -1, 0);
|
|
|
|
+ MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
|
|
|
|
|
|
|
|
if (shm->addr == MAP_FAILED) {
|
|
|
|
ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
|
|
|
|
- "mmap(MAP_ANON|MAP_SHARED, %uz) failed", shm->size);
|
|
|
|
+ "mmap(MAP_ANONYMOUS|MAP_PRIVATE, %uz) failed", shm->size);
|
|
|
|
return NGX_ERROR;
|
|
|
|
}
|
|
|
|
|
|
|
|
@@ -53,11 +53,11 @@
|
|
|
|
}
|
|
|
|
|
|
|
|
shm->addr = (u_char *) mmap(NULL, shm->size, PROT_READ|PROT_WRITE,
|
|
|
|
- MAP_SHARED, fd, 0);
|
|
|
|
+ MAP_PRIVATE, fd, 0);
|
|
|
|
|
|
|
|
if (shm->addr == MAP_FAILED) {
|
|
|
|
ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
|
|
|
|
- "mmap(/dev/zero, MAP_SHARED, %uz) failed", shm->size);
|
|
|
|
+ "mmap(/dev/zero, MAP_PRIVATE, %uz) failed", shm->size);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (close(fd) == -1) {
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_thread_mutex.c nginx/src/os/unix/ngx_thread_mutex.c
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_thread_mutex.c
|
|
|
|
+++ nginx/src/os/unix/ngx_thread_mutex.c
|
|
|
|
@@ -87,6 +87,7 @@
|
|
|
|
return NGX_ERROR;
|
|
|
|
}
|
|
|
|
|
|
|
|
+#ifdef PTHREAD_MUTEX_ERRORCHECK
|
|
|
|
err = pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_ERRORCHECK);
|
|
|
|
if (err != 0) {
|
|
|
|
ngx_log_error(NGX_LOG_EMERG, log, err,
|
|
|
|
@@ -94,6 +95,7 @@
|
|
|
|
"(PTHREAD_MUTEX_ERRORCHECK) failed");
|
|
|
|
return NGX_ERROR;
|
|
|
|
}
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
err = pthread_mutex_init(mtx, &attr);
|
|
|
|
if (err != 0) {
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_time.h nginx/src/os/unix/ngx_time.h
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_time.h
|
|
|
|
+++ nginx/src/os/unix/ngx_time.h
|
|
|
|
@@ -41,6 +41,10 @@
|
|
|
|
#define ngx_tm_zone tm_zone
|
|
|
|
#endif
|
|
|
|
|
|
|
|
+#ifdef __sortix__
|
|
|
|
+#define timezone 0
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
|
|
|
|
#if (NGX_SOLARIS)
|
|
|
|
|
|
|
|
diff -Paur --no-dereference -- nginx.upstream/src/os/unix/ngx_user.c nginx/src/os/unix/ngx_user.c
|
|
|
|
--- nginx.upstream/src/os/unix/ngx_user.c
|
|
|
|
+++ nginx/src/os/unix/ngx_user.c
|
|
|
|
@@ -46,6 +46,7 @@
|
|
|
|
ngx_int_t
|
|
|
|
ngx_libc_crypt(ngx_pool_t *pool, u_char *key, u_char *salt, u_char **encrypted)
|
|
|
|
{
|
|
|
|
+#ifndef __sortix__
|
|
|
|
char *value;
|
|
|
|
size_t len;
|
|
|
|
ngx_err_t err;
|
|
|
|
@@ -65,6 +66,9 @@
|
|
|
|
}
|
|
|
|
|
|
|
|
err = ngx_errno;
|
|
|
|
+#else
|
|
|
|
+ ngx_err_t err = errno = ENOTSUP;
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
ngx_log_error(NGX_LOG_CRIT, pool->log, err, "crypt() failed");
|
|
|
|
|