2

Go サービスの前に nginx インスタンスを使用しています。

  • ポート 80 のすべてを https にリダイレクトしたい。[終わり]
  • /* でのすべての (websocket 以外の) https リクエストは、https://localhost:8443/に移動する必要があります* [完了]
  • /ws/* でのすべての websocket https 要求は、https://localhost:8443/ws/に送信する必要があります* [欠落]

私の現在の設定:

ssl_certificate                 ...
ssl_certificate_key             ...
ssl_ciphers                     ...
ssl_prefer_server_ciphers       on;

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

server {
        listen          443 ssl;
        server_name     www.mydomain.com mydomain.com;

        add_header Strict-Transport-Security "max-age=31536000";

        location /ws {   <--- This only works for /ws but not /ws/app1
            proxy_pass http://localhost:8443/ws;
            proxy_http_version 1.1;
            proxy_set_header Host $http_host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }

        location / {    <--- Catches anything, even without wildcard ?!
                proxy_pass http://localhost:8443;
        }
}

server {
        listen 443 ssl;
        server_name *.mydomain.com;
        return 444;
}

なぜこれが必要なのですか?私が理解しているように、アップグレード ヘッダーを明示的に設定する必要があるため、別の場所を指定する必要があると思います。

理想的には、1 つの場所だけを使用しますが、Websocket はブロックされます (アップグレード ヘッダーが Go サービスに到達しないため...)。

私はnginxの専門家ではないので、ご容赦ください=)。

[編集]

私は今それを働かせました。Websocket リクエストでなくても、常に set_header Upgrade/Connection を使用してもよいかどうかはわかりませんが、私の Go サービスは **** を返さないので、うまくいきます =]

ssl_certificate                 ...
ssl_certificate_key             ...
ssl_ciphers                     ...
ssl_prefer_server_ciphers       on;

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

server {
        listen          443 ssl;
        server_name     www.mydomain.com mydomain.com;

        add_header Strict-Transport-Security "max-age=31536000";

        location / {    <--- Catches anything, even without wildcard ?!
            proxy_pass http://localhost:8443;
            proxy_redirect off;
            proxy_http_version 1.1;
            proxy_set_header Host $http_host;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
}

server {
        listen 443 ssl;
        server_name *.mydomain.com;
        return 444;
}
4

1 に答える 1