web-dev-qa-db-ja.com

AWS ELBでHTTPSを強制する

カスタムドメインを使用して、JavaベースのJARパッケージ化された小さなwebappをAWS ELBでホストしています。次のようなZipファイルをアップロードします。

myapp.Zip
* myapp.jar

AWS CMを使用して証明書を構成し、http://www.example.comhttps://www.example.comの両方を介してアプリケーションにアクセスできます。

forceHTTPSalwaysにする必要があります。そして、私はそれを行う方法で完全に迷っています。

「configure your nginx」のような多くの答えを見ました:

https://stackoverflow.com/questions/24603620/redirecting-ec2-elb-from-http-to-httpshttps://aws.Amazon.com/de/premiumsupport/ knowledge-center/redirect-http-https-elb /http://www.emind.co/how-to/how-to-force-https-behind-aws-elb/

他の答えは同じ方向に向かっています。

次のようなリライタルールの考え方は理解できますが、

if ($http_x_forwarded_proto = 'http') {
    return 301 https://www.example.com$request_uri;
}

私が欠けているのは、これを実際にAWS ELB nginxに追加する方法です。

私が最後に試したのは、.ebextensions\nginx\conf.d\my.confをZipアーカイブに追加することでした。

myapp.Zip
* myapp.jar
* .ebextensions
  * nginx
    * conf.d
      * my.conf

目次:

if ($http_x_forwarded_proto = 'http') {
    return 301 https://www.example.com$request_uri;
}

これにより、次のエラーが発生します。

2016/12/24 12:08:27 [emerg] 22709#0: "if" directive is not allowed here in /var/elasticbeanstalk/staging/nginx/conf.d/myconf:1

my.confの構文は正しくないと思います。 my.confがAWS ELB nginx構成を拡張することを期待していましたが、明らかに拡張しません。そして、本当に.ebextensionsに完全なnginx構成を含めないようにしたいと思います。どこで手に入れられるかもわかりません。

4
lexicore

私はついにそれを理解しました。私は自分の構成を\.ebextensions\nginx\conf.d\elasticbeanstalk\*.conf、 例えば \.ebextensions\nginx\conf.d\elasticbeanstalk\force-https.conf

内容は次のとおりです。

if ($http_x_forwarded_proto = 'http') {
    return 301 https://www.example.com$request_uri;
}

これはAWS ELB設定ファイルに自動的に含まれます:

# Elastic Beanstalk Nginx Configuration File
...
http {
    ...
    server {
        ...
        # Include the Elastic Beanstalk generated locations
        include conf.d/elasticbeanstalk/*.conf;
    }
}

したがって、全体をコピー/オーバーライドする必要はありませんnginx.conf

7
lexicore