Использование NGINX для аутентификации AD как пользователей API, так и веб-пользователей

В настоящее время мы используем сервер NGINX в качестве обратного прокси-сервера для различных служб и приложений. Он обрабатывает и передает трафик в созданное нами веб-приложение, прокси-сервер API, а также отдельный программный API. Ниже приведен пример схемы, показывающей ресурсы, стоящие за прокси.

​   foobar.com
    |-foobar.com/api
    |-foobar.com/webapp
    |-foobar.com/proxy

У нас есть корпоративная система AD с возможностью единого входа. Я пытаюсь интегрировать это с обратным прокси-сервером NGINX для аутентификации пользователей при доступе к одной или нескольким из этих служб за NGINX.

Я видел сообщения вроде https://www.nginx.com/blog/nginx-plus-authenticate-users/ , в которых описывается, как заставить NGINX использовать AD-аутентификацию пользователей, когда пользователи заполняют форма входа в систему, но в нашем случае это не сработает. Это связано с тем, что некоторые из этих пользователей будут взаимодействовать со службой API и прокси-службой через операции HTTP CRUD и / или команды curl. Кроме того, эти пользователи API и прокси могут принадлежать другим приложениям, а не людям. В этом смысле они полностью программные взаимодействия. У меня есть установка Moodle, работающая с nginx на моем Synology NAS, и я хотел бы ...

Я действительно застрял здесь и не могу найти помощь в связанных сообщениях, и это первый раз, когда я имею дело с nginx . У меня есть установка Moodle, работающая с nginx на моем NAS-устройстве Synology, и я хотел бы получить к ней доступ извне через доменное имя, т.е. я не хочу использовать свой общедоступный IP-адрес. У меня уже есть домен (скажем, mymoodle.com), и я добавил в этот домен запись A, указывающую на общедоступный IP-адрес моего маршрутизатора. Когда я ввожу «mymoodle.com» в своем браузере, он указывает мне на корень веб-папки Synology, которая в моем случае находится здесь:

/var/services/web/

и содержит следующее:

index.html  moodle  phpMyAdmin  web_images

и мой браузер в основном отображает index.html, поэтому Кажется, моя запись A работает должным образом, т.е. mymoodle.com указывает на index.html в этой папке. Но я бы хотел, чтобы mymoodle.com указывал на подпапку moodle (которая содержит файл index.php).

Я нашел следующий файл конфигурации nginx для Moodle:

/etc/nginx/conf.d/www.Moodle.conf

который выглядит так:

location ^~ /moodle {
    include proxy.conf;
    proxy_read_timeout 3600s;
    proxy_pass  http://127.0.0.1:914;
}

Я пробовал кучу настроек, но, похоже, никто не работает. Моя последняя попытка выглядела так:

server {
   server_name moodle.trucker.in;
   root /var/services/web/moodle;
}

, но, конечно же, безуспешно. Содержимое / etc / nginx / выглядит так

ash-4.3# ls -l /etc/nginx/
total 52
lrwxrwxrwx 1 root root   20 Oct  9 12:13 app.d -> /var/tmp/nginx/app.d
lrwxrwxrwx 1 root root   27 Oct  9 12:13 conf.d -> /usr/local/etc/nginx/conf.d
-rw-r--r-- 1 root root 1077 Jul 13 00:42 fastcgi.conf
-rw-r--r-- 1 root root 1007 Jul 13 00:42 fastcgi_params
-rw-r--r-- 1 root root 2837 Jul 13 00:42 koi-utf
-rw-r--r-- 1 root root 2223 Jul 13 00:42 koi-win
-rw-r--r-- 1 root root 3957 Jul 13 00:42 mime.types
-rw-r--r-- 1 root root 9043 Oct 25 21:13 nginx.conf
-rw-r--r-- 1 root root 3491 Jul 13 00:31 nginx.conf.default
-rw-r--r-- 1 root root  277 Jul 13 00:31 proxy.conf
-rw-r--r-- 1 root root 1204 Jul 13 00:42 scgi_params
lrwxrwxrwx 1 root root   34 Oct  9 12:13 sites-enabled -> /usr/local/etc/nginx/sites-enabled
-rw-r--r-- 1 root root  664 Jul 13 00:42 uwsgi_params
-rw-r--r-- 1 root root 3610 Jul 13 00:42 win-utf

Вот файл nginx.conf в соответствии с запросом:

worker_processes        auto;
#worker_cpu_affinity    auto;
worker_rlimit_nofile    65535;

include conf.d/main.conf;

events {
    use             epoll;
    multi_accept    on;
    accept_mutex    on;
    worker_connections 1024;

    include conf.d/events.conf;
}

http {
    include         mime.types;
    default_type    application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  off;
    #access_log syslog:server=unix:/dev/log,facility=local7,tag=nginx_access,nohostname main;
    error_log   syslog:server=unix:/dev/log,facility=local7,tag=nginx_error,nohostname error;

    sendfile        on;
    server_tokens   off;

    proxy_request_buffering     off;
    fastcgi_request_buffering   off;
    scgi_request_buffering      off;

    proxy_buffering     off;
    fastcgi_buffering   off;
    scgi_buffering      off;

    resolver_timeout              5s;
    client_header_timeout         10s;
    client_body_timeout           60s;
    send_timeout                  60s;
    keepalive_timeout             65s 20s;
    client_max_body_size          0;
    server_names_hash_max_size    8192;

    ssl_certificate           /usr/syno/etc/certificate/system/default/fullchain.pem;
    ssl_certificate_key       /usr/syno/etc/certificate/system/default/privkey.pem;
    ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers               ECDHE-....;
    ssl_dhparam               /usr/syno/etc/ssl/dh2048.pem;
    ssl_prefer_server_ciphers on;

    ssl_session_tickets       off;
    ssl_session_cache         shared:SSL:1m;
    ssl_session_timeout       3600s;

    server_tag     "nginx";

    gzip_disable    "msie6";
    gzip_min_length 1000;
    gzip_types      text/plain text/css application/javascript application/json;
    gzip_vary       on;
    gzip_static     on;

    upstream synoscgi {
        server unix:/run/synoscgi.sock;
    }

    index index.html index.htm index.php;

    set_real_ip_from 127.0.0.1;
    real_ip_header X-Real-IP;

    server {
        listen 5000 default_server;
        listen [::]:5000 default_server;

        server_name _;

        gzip on;

        include app.d/alias.*.conf;
        root /usr/syno/synoman;
        index index.cgi;

        ignore_invalid_headers off;

        include app.d/dsm.*.conf;
        include /usr/syno/share/nginx/conf.d/dsm.*.conf;
        include conf.d/dsm.*.conf;

        location = / {
            try_files $uri /index.cgi$is_args$query_string;
        }

        location ~ ^/volume(?:X|USB|SATA|Gluster)?\d+/ {
            internal;

            root /;

            include app.d/x-accel.*.conf;
            include conf.d/x-accel.*.conf;
        }

        location ~ /webman/modules/(PersonalSettings|ExternalDevices|FileBrowser)/index_ds.php$ {
            alias /usr/syno/share/OAuth/index_ds.php;
            default_type text/html;
        }

        location ~ \.cgi {
            include             scgi_params;
            scgi_read_timeout   3600s;
            scgi_pass           synoscgi;
        }

        error_page 403 404 500 502 503 504 @error_page;

        location @error_page {
            root /usr/syno/share/nginx;
            rewrite (.*) /error.html break;
        }

        location ~ ^/webman/modules/Indexer/ {
            deny all;
        }

        location ~ ^/webapi/lib/ {
            deny all;
        }

        location ~ ^/webapi/(:?(:?.*)\.lib|(:?.*)\.api|(:?.*)\.auth|lib.def)$ {
            deny all;
        }

        location ~ /\. { access_log off; log_not_found off; deny all; }

        location ~* \.(?:js|css|png|jpg|gif|ico)$ {
            access_log off;
            log_not_found off;
        }

        location = /favicon.ico {
            access_log off;
            log_not_found off;
        }

        location = /robots.txt {
            allow all;
            access_log off;
            log_not_found off;
        }
    }

    server {
        listen 5001 default_server ssl;
        listen [::]:5001 default_server ssl;

        server_name _;

        include app.d/alias.*.conf;
        root /usr/syno/synoman;
        index index.cgi;

        ignore_invalid_headers off;

        include app.d/dsm.*.conf;
        include /usr/syno/share/nginx/conf.d/dsm.*.conf;
        include conf.d/dsm.*.conf;

        location = / {
            try_files $uri /index.cgi$is_args$query_string;
        }

        location ~ ^/volume(?:X|USB|SATA|Gluster)?\d+/ {
            internal;

            root /;

            include app.d/x-accel.*.conf;
            include conf.d/x-accel.*.conf;
        }

        location ~ /webman/modules/(PersonalSettings|ExternalDevices|FileBrowser)/index_ds.php$ {
            alias /usr/syno/share/OAuth/index_ds.php;
            default_type text/html;
        }


        location ~ \.cgi {
            include             scgi_params;
            scgi_read_timeout   3600s;
            scgi_pass           synoscgi;
        }

        error_page 403 404 500 502 503 504 @error_page;

        location @error_page {
            root /usr/syno/share/nginx;
            rewrite (.*) /error.html break;
        }

        location ~ ^/webman/modules/Indexer/ {
            deny all;
        }

        location ~ ^/webapi/lib/ {
            deny all;
        }

        location ~ ^/webapi/(:?(:?.*)\.lib|(:?.*)\.api|(:?.*)\.auth|lib.def)$ {
            deny all;
        }

        location ~ /\. { access_log off; log_not_found off; deny all; }

        location ~* \.(?:js|css|png|jpg|gif|ico)$ {
            access_log off;
            log_not_found off;
        }

        location = /favicon.ico {
            access_log off;
            log_not_found off;
        }

        location = /robots.txt {
            allow all;
            access_log off;
            log_not_found off;
        }

    }

    server {
        listen 80 default_server;
        listen [::]:80 default_server;

        gzip on;

        server_name _;

        location ~ ^/volume(?:X|USB|SATA|Gluster)?\d+/ {
            internal;

            root /;

            include app.d/x-accel.*.conf;
            include conf.d/x-accel.*.conf;
        }

        include app.d/www.*.conf;
        include app.d/alias.*.conf;
        include /usr/syno/share/nginx/conf.d/www.*.conf;
        include conf.d/www.*.conf;

        location = /webdefault/images/logo.jpg {
            alias /usr/syno/share/nginx/logo.jpg;
        }

        error_page 403 404 500 502 503 504 @error_page;

        location @error_page {
            root /usr/syno/share/nginx;
            rewrite (.*) /error.html break;
        }

        location ^~ /.well-known/acme-challenge {
            root /var/lib/letsencrypt;
            default_type text/plain;
        }

        include app.d/.location.webstation.conf*;

        location / {
            rewrite ^ / redirect;
        }
        location ~ ^/$ {
            rewrite / http://$host:5000/ redirect;
        }
    }

    server {
        listen 443 default_server ssl;
        listen [::]:443 default_server ssl;

        server_name _;

        location ~ ^/volume(?:X|USB|SATA|Gluster)?\d+/ {
            internal;

            root /;

            include app.d/x-accel.*.conf;
            include conf.d/x-accel.*.conf;
        }

        include app.d/www.*.conf;
        include app.d/alias.*.conf;
        include /usr/syno/share/nginx/conf.d/www.*.conf;
        include conf.d/www.*.conf;

        location = /webdefault/images/logo.jpg {
            alias /usr/syno/share/nginx/logo.jpg;
        }

        error_page 403 404 500 502 503 504 @error_page;

        location @error_page {
            root /usr/syno/share/nginx;
            rewrite (.*) /error.html break;
        }

        location ^~ /.well-known/acme-challenge {
            root /var/lib/letsencrypt;
            default_type text/plain;
        }
        include app.d/.location.webstation.conf*;

        location / {
            rewrite ^ / redirect;
        }

        location ~ ^/$ {
            rewrite / https://$host:5001/ redirect;
        }
    }

    include conf.d/http.*.conf;
    include app.d/server.*.conf;
    include sites-enabled/*;
}
0
задан 26 October 2017 в 00:56
1 ответ

Я не могу дать никаких гарантий, что следующее будет работать, потому что вся установка довольно сложна.

server {
    server_name moodle.tracker.im;
    listen 443 ssl;
    ssl_certificate /path/to/moodle/certificate;
    ssl_certificate_key /path/to/moodle/key;
    ... other SSL directives if desired...

    include proxy.conf;
    proxy_read_timeout 3600s;
    location / {
        proxy_pass  http://127.0.0.1:914;
    }
}

Итак, для этого нужно определить другой виртуальный хост для Moodle. быть доступным через доменное имя. Вам также необходимо убедиться, что Moodle правильно настроен для использования этого доменного имени или корневого каталога.

0
ответ дан 5 December 2019 в 07:17

Теги

Похожие вопросы