LINUX.ORG.RU
решено ФорумAdmin

1c > IIS > Nginx

 , ,


1

1

Всем привет. Спецы по веб, прошу помощи! Что-то не выходит добить авторизацию в 1с приложении через веб с помощью nginx. Изначально 1с опубликован на IIS, я в Nginx делаю такой vhost. В IIS через проверку подлинности, авторизация работает вся, кроме Negotiate/NTLM.

server {
    listen       80;
    listen       [::]:80;
    server_name  my.server.com;
    rewrite ^(.*) https://my.server.com/SoftOnIT/$1 permanent;
}

server {
    listen       443;
    listen       [::]:443;
        ssl on;
        ssl_certificate /etc/nginx/certs/my.server.com_bundle.crt;
        ssl_certificate_key /etc/nginx/certs/my.server.com_private.key;

        server_name  my.server.com;

        access_log  /srv/web/my.server.com/log/access.log;

        if ( $http_user_agent ~* (nmap|nikto|wikto|sf|sqlmap|bsqlbf|w3af|acunetix|havij|appscan) ) {
            return 403;
        }

        if ($request_uri = /) {
            rewrite ^ https://my.server.com/SoftOnIT/ permanent;
        }

        location /SoftOnIT/ {
            proxy_pass         http://my.localserver.com/SoftOnIT/;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            client_max_body_size       50m;
            client_body_buffer_size    128k;
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_buffer_size          4k;
            proxy_buffers              4 32k;
            proxy_busy_buffers_size    64k;
            proxy_temp_file_write_size 64k;

#            Разрешить доступ только из локальной сети
#            allow 192.168.0.0/16;
#            deny all;
        }

    }


Последнее исправление: gidrotormoz (всего исправлений: 1)

1c > IIS > Nginx

Прочитал как 1с лучше iis, котрый лучше nginx. А оказалось не наброс, а тех. вопрос)

goingUp ★★★★★
()

Проблема в том, что nginx не умеет в ntlm. Есть несколько решений с nginx - openresty+плагин на lus,spnego,nginx+.
Луашлак у меня не заработал ни в каком виде. В итоге плюнул на всё это и перешел на haproxy.
Хотя более правильным решением будет отказ от ntlm, т.к. он дыряв и не рекомендуется к использованию, я не могу от него отказаться по независящим от меня причинам.

Deleted
()
Ответ на: комментарий от Deleted

прискорбно, костыли городить так же нет ни малейшего желания, а вот про haproxy вы не первый, кто мне говорит.

gidrotormoz
() автор топика
Ответ на: комментарий от gidrotormoz

Я его использую только для прокидывания.
Взял дефолтный конфиг на просторах интернета, на бэкенде для проброса ntlm сделал так

        option http-keep-alive
        mode http
        timeout server 30s
        timeout connect 4s

Версия 2+ умеет в http2 к клиентам и серверам одновременно. Удобная штука.

Deleted
()
Ответ на: комментарий от gidrotormoz
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        user haproxy
        group haproxy
        maxconn 500000
        maxpipes 25000
        ulimit-n 200000
        spread-checks 5
        nbproc 1
        nbthread 4
        cpu-map auto:1/1-4 0-3
        tune.h2.initial-window-size 1048576
        daemon
        debug
        stats socket /var/run/haproxy.sock mode 660 level admin
        ssl-server-verify none
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private
        ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
        ssl-default-bind-options no-sslv3
        tune.ssl.default-dh-param 4096

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        contimeout 5000
        clitimeout 50000
        srvtimeout 50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http
        stats enable
        stats uri /stats
        stats realm Global\ statistics
        stats auth admin:xxxx

userlist user-pass
        user ACCESSUSER password xxx


frontend www-http
        bind :80
        reqadd X-Forwarded-Proto:\ http
        mode http
        option http-server-close
        option http-keep-alive
        acl letsencrypt-acl path_beg /.well-known/acme-challenge/
        use_backend letsencrypt-backend if letsencrypt-acl
        use_backend cloud if { hdr_dom(host) -i cloud.site.ru }     { dst_port 80 }
        use_backend 1с if { hdr_dom(host) -i 1с.site.ru }    { dst_port 80 }





frontend www-https
#тут аказан список сертификатов для сайтов
        bind :443 ssl crt-list /etc/haproxy/certs/haproxy_ssl.txt alpn h2,http/1.1
	option forwardfor
	http-request set-header X-Forwarded-Port %[dst_port]
	http-request set-header X-Forwarded-Proto https if { ssl_fc }
	http-request set-header X-Forwarded-Host %[req.hdr(Host)]

        mode http
        option http-server-close
        option http-keep-alive
        acl letsencrypt-acl path_beg /.well-known/acme-challenge/
        use_backend letsencrypt-backend if letsencrypt-acl
        use_backend cloud if { hdr_dom(host) -i cloud.site.ru }     { dst_port 443 }
        use_backend 1c if { hdr_dom(host) -i 1c.site.ru }    { dst_port 443 }
        


backend letsencrypt-backend
        server letsencrypt 127.0.0.1:54321

backend cloud
        redirect scheme https if !{ ssl_fc }
        option forwardfor header X-Real-IP
#если хочется http2 до сервера внутри сети без проверки сертификата
        server cloud cloud.internal.site.ru:443 ssl verify none sni req.hdr(host) alpn h2,http/1.1

backend 1c
        redirect scheme https if !{ ssl_fc }
        server 1c 1c.internal.site.ru:8080 check
        option http-keep-alive
        mode http
        timeout server 30s
        timeout connect 4s

backend somesite
        server server  server:80
#можно включить basic авторизацию
        acl draw-auth http_auth(user-pass)
        http-request auth realm draw unless draw-auth


ставил haproxy из backports для debian.

Deleted
()

Я просто проксировал все запросы на ИИС через фронт из нгинкса..

работало.

Если надо - могу поискать конфиг.

zelenij
()
Ответ на: комментарий от zelenij

Ну вот я аналогичную процедуру выполняя получаю шиш. Поделитесь, если не затруднит.

gidrotormoz
() автор топика
3 февраля 2021 г.
Ответ на: комментарий от zelenij

Буду рад бесконечно конфигу. Как вы это реализовали? Работа встала.

akatim
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.