Назад | Перейти на главную страницу

nginx: исключить подобласть в конфигурации обратного прокси

Я хочу создать обратный прокси-сервер с http на https на основе nginx для экземпляра graylog, допустим, это url-адрес graylog.domain.local. Graylog НЕ обслуживает зашифрованные ssl-соединения, только стандартный http через порт 9000. Сложность в том, что Graylog обращается к самому себе по URL-адресу. http: //graylog.domain.local: 9000 / api /.

Итак, чего я хочу добиться:

Это мой конфиг. Открытие веб-страницы выглядит хорошо. Теперь веб-сайт защищен SSL и загружается правильно. К сожалению Graylog встречает меня с ошибкой, что он не может достичь http://10.32.0.109:9000/api/.

server {
        listen 443 ssl default_server;
        listen [::]:443 ssl default_server;
        server_name graylog.domain.local;

        location / {
                proxy_pass http://localhost:9000/;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        }

        ssl_certificate /etc/ssl/graylog.domain.local.crt;
        ssl_certificate_key /etc/ssl/graylog.domain.local.pem;
}

server {
        listen 80;
        listen [::]:80;
        server_name graylog.domain.local;

        location /api {
        }

        location / {
                return 301 https://$host$request_uri;
        }
}

Как я могу исключить перенаправление loaction / api на https?

Ваша конфигурация в основном правильная, за исключением одного - вы забыли proxy_pass на ваш локальный хост для порта tcp / 9000 внутри location /api {}.

Вам, вероятно, также следует добавить rewrite ^/api/(.*)$ /$1 break линия.

Я только что нашел решение своей проблемы где-то в документация Graylog. Я полностью скопировал конфигурацию nginx и просто добавил перенаправление для 80-> 443. Теперь это выглядит так и работает как положено:

server {
    listen      443 ssl;
    server_name graylog.domain.local;
    ssl_certificate /etc/ssl/graylog.domain.local.crt;
    ssl_certificate_key /etc/ssl/graylog.domain.local.pem;

    location /
    {
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Graylog-Server-URL https://$server_name/api;
      proxy_pass       http://127.0.0.1:9000;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name graylog.domain.local;

    location / {
        return 301 https://$host$request_uri;
    }
}