我想为 graylog 实例基于 nginx 构建一个 http 到 https 的反向代理,假设它的 url 是 graylog.domain.local。Graylog 不提供 SSL 加密连接,只提供端口 9000 上的标准 http。这其中的棘手之处在于 Graylog 会调用自身 urlhttp://graylog.domain.local:9000/api/。
所以我想要实现的是:
- 所有呼叫https://graylog.domain.local:443重定向至http://graylog.domain.local:900
- 所有呼叫http://graylog.domain.local:900/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;
}
}
如何排除位置 /api 被重定向到 https?
答案1
您的配置基本上是正确的,除了一件事 - 您忘记了proxy_pass
将本地主机的 tcp/9000 端口连接到location /api {}
。
您可能还应该添加rewrite ^/api/(.*)$ /$1 break
行。
答案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;
}
}