web-dev-qa-db-ja.com

nginx:リバースプロキシ構成でサブロケーションを除外します

グレイログインスタンスのnginxに基づいてhttpからhttpsへのリバースプロキシを構築したいと思います。たとえば、URLがgraylog.domain.localであるとします。 Graylogはssl暗号化接続を提供せず、ポート9000を介した標準のhttpのみを提供します。これに関する注意点は、GraylogがURLを呼び出すことです http://graylog.domain.local:9000/api / =。

だから私が達成したいのはこれです:

これは私の設定です。ウェブページを開くのは良さそうです。 Webサイトは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
farosch

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
farosch

設定は基本的に正しいですが、1つだけ例外があります。ローカルホストへの_proxy_pass_を_location /api {}_内のポートtcp/9000に忘れました。

おそらくrewrite ^/api/(.*)$ /$1 break行も追加する必要があります。

1
drookie