nginx: exclude sub-location in reverse proxy configuration

Я хочу создать http to https reverse proxy на базе 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?

1
задан 19 December 2018 в 23:05
2 ответа

Я только что нашел решение моей проблемы, скрытое где-то в документации 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;
    }
}
0
ответ дан 3 December 2019 в 23:09

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

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

1
ответ дан 3 December 2019 в 23:09

Теги

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