proxy reverso nginx para Synology DSM, sem base de URL

0

Estou executando um Synology NAS com o DSM 5.x. Eu finalmente tenho um proxy reverso nginx funcional de outro servidor com a configuração abaixo.

O que eu não quero é todos os locais, se possível. A interface da web do DSM usa cada um dos fragmentos de URL abaixo como parte de sua interface. Não há base de URL e nenhuma opção para adicionar uma.

A minha pergunta é - é possível em nginx com proxy_pass ou proxy_redirect ou reescrever (ou outra coisa) para não ter que listar todos os locais separados individualmente? (Eu tentei dezenas de combinações destes por vários dias, e nunca consegui fazer nada, exceto o abaixo, para trabalhar.)

nginx.conf

http {
    upstream dsm {
        server 1.1.1.1:5000;
    }
    server {
        location /dsm/ {
            include proxy_headers;
            proxy_pass http://dsm/;
        }
        location /scripts/ {
            include proxy_headers;
            proxy_pass http://dsm;
        }
        location /synoSDSjslib/ {
            include proxy_headers;
            proxy_pass http://dsm;
        }
        location /webapi/ {
            include proxy_headers;
            proxy_pass http://dsm;
        }
        location /webdefault/ {
            include proxy_headers;
            proxy_pass http://dsm;
        }
        location /webfm/ {
            include proxy_headers;
            proxy_pass http://dsm;
        }
        location /webman/ {
            include proxy_headers;
            proxy_pass http://dsm;
        }
    }
}

proxy_headers

proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;

Editar: Deixe-me esclarecer - deixei de fora alguns detalhes. Eu gostaria de um único endereço & porta com vários URLs de base que podem alcançar vários DSMs sem os scripts / & / webapi de colisão / colisão / conluio. Eu sei que vários endereços & portas são possíveis. O que estou procurando, se for possível, é uma forma de ssh no servidor que serve nginx com um encaminhamento local -L, encaminhando uma única porta, para que eu possa alcançar vários DSMs com uma única porta encaminhada por ssh. A solução que tenho agora funciona, mas apenas para um DSM. Se eu adicionar um segundo, eles colidem.

    
por snapshoe 16.10.2015 / 23:46

1 resposta

0

Os blocos de localização não têm nada semelhante, então combiná-los com uma regex é um pouco demorado e complicado.

Em vez disso, podemos encaminhar todas as solicitações para o DSM.

Existem três métodos para ter vários servidores DSM sem conflito.

Método 1: hosts virtuais

Você precisará configurar seu DNS para apontar seu host virtual escolhido no servidor NGINX.

http {
    #DSM 1 Standard DSM setup
    upstream dsm1 {
        server 1.1.1.1:5000;
    }
    #DSM 2 - DSM has different Port, same IP Address
    upstream dsm2 {
        server 1.1.1.1:6000;
    }
    #DSM 3 - DSM has different IP Address
    upstream dsm3 {
        server 2.1.1.1:5000;
    }
    #DSM 1 Standard DSM setup
    server {
        listen       80;
        server_name dsm1.mydomain.com;
        location / {
            include proxy_headers;
            proxy_pass http://dsm1/;
    }
    #DSM 2 - DSM has different Port, same IP Address
    server {
        listen       80;
        server_name dsm2.mydomain.com;
        location / {
            include proxy_headers;
            proxy_pass http://dsm2/;
    }
    #DSM 3 - DSM has different IP Address
    server {
        listen       80;
        server_name dsm3.mydomain.com;
        location / {
            include proxy_headers;
            proxy_pass http://dsm3/;
    }

Método 2, portas NGINX diferentes

Cada servidor pode ser acessado em sua própria porta no servidor NGINX

http {
    #DSM 1 Standard DSM setup
    upstream dsm1 {
        server 1.1.1.1:5000;
    }
    #DSM 2 - DSM has different Port, same IP Address
    upstream dsm2 {
        server 1.1.1.1:6000;
    }
    #DSM 3 - DSM has different IP Address
    upstream dsm3 {
        server 2.1.1.1:5000;
    }
    #DSM 1 Standard DSM setup
    server {
        listen       80;
        location / {
            include proxy_headers;
            proxy_pass http://dsm1/;
    }
    #DSM 2 This DSM server is available on another port (8081). Access using http://nginx_ip:8081
    server {
        listen       81;
        location / {
            include proxy_headers;
            proxy_pass http://dsm1/;
    }
}

Método 3: reescreve

Cada servidor pode ser acessado por meio de um sub-URL no servidor NGINX. Pode não funcionar dependendo da configuração da página da web do DSM e se ela possui ou não URLs absolutas em vez de absolutas.

http {
    #DSM 1
    upstream dsm1 {
      server 1.1.1.1:5000
    }
    #DSM 2
    upstream dsm2 {
      server: 1.1.1.2:5000
    }
    server {
      listen 80;
      location /dsm1/(?<dsmurl>.*) {
        include proxy_headers;
        proxy_pass http://dsm1/$dsmurl
      }
      location /dsm2/(?<dsmurl>.*) {
        include proxy_headers;
        proxy_pass http://dsm2/$dsmurl
      }
     }
}
    
por 17.10.2015 / 01:31