カスタムドメインを使用して、JavaベースのJARパッケージ化された小さなwebappをAWS ELBでホストしています。次のようなZipファイルをアップロードします。
myapp.Zip
* myapp.jar
AWS CMを使用して証明書を構成し、http://www.example.com
とhttps://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構成を含めないようにしたいと思います。どこで手に入れられるかもわかりません。
私はついにそれを理解しました。私は自分の構成を\.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
。