Я хочу создать обратный прокси-сервер с 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;
}
}