Я использую Synology NAS с DSM 5.x. Наконец-то у меня есть рабочий обратный прокси-сервер nginx с другого сервера с приведенной ниже конфигурацией.

Что я не хочу, так это все места, если это возможно. Веб-интерфейс DSM использует каждый из приведенных ниже фрагментов URL как часть своего интерфейса. Там нет базы URL, и нет возможности добавить ее.

Мой вопрос - возможно ли в nginx с proxy_pass или proxy_redirect или переписать (или что-то еще), чтобы не нужно было перечислять все отдельные местоположения по отдельности? (Я пробовал десятки их комбинаций в течение нескольких дней, и мне так и не удалось заставить работать что-либо, кроме приведенного ниже.)

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;

Изменить: Позвольте мне уточнить - я пропустил несколько деталей. Я хотел бы, чтобы один адрес и порт с несколькими базовыми URL-адресами, которые могут достигать нескольких DSM без базовых URL-адресов, таких как /scripts & /webapi от столкновения / столкновения / слияния. Я знаю, что несколько адресов и портов возможны. То, что я ищу, если это возможно, это способ подключения ssh к серверу, обслуживающему nginx, с локальной переадресацией -L, переадресацией одного порта, чтобы я мог подключиться к нескольким DSM с помощью одного переадресованного порта ssh. Решение, которое у меня сейчас есть, работает, но только для одного DSM. Если я добавлю второй, они сталкиваются.

1 ответ1

0

Блоки местоположения не имеют ничего похожего, поэтому объединение их с регулярным выражением немного трудоемко и сложно.

Вместо этого мы можем просто направить все запросы в DSM.

Существует три способа иметь несколько серверов DSM без конфликтов.

Метод № 1: виртуальные хосты

Вам нужно будет настроить DNS, чтобы указать выбранный вами виртуальный хост на сервере 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/;
    }

Метод № 2, разные порты NGINX

Каждый сервер может быть доступен через собственный порт на сервере 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/;
    }
}

Метод № 3: переписывает

К каждому серверу можно получить доступ через под-URL на сервере NGINX. Может не работать в зависимости от конфигурации веб-страницы DSM и того, имеет ли она относительные, а не абсолютные URL-адреса.

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
      }
     }
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .