23

I have deployed my Backend/API server in a AWS EC2 instance, which is being loaded without SSL and the url is like, 'http://ec2-67-ap-southeast-3.compute.amazonaws.com'

And I have deployed my React Frontend/Client using AWS AMPLIFY Console. Which is automatically adding SSL to the production branch URL and the URL is like, https://branch.d3as6d542.amplifyapp.com

Now the problem is, I am unable to make any API/HTTP request to my server from client. And getting bellow error,

Mixed Content: The page at 'https://branch.d3as6d542.amplifyapp.com' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://ec2-67.ap-southeast-3.compute.amazonaws.com/api/profile’. This request has been blocked; the content must be served over HTTPS.

I am able to make this API call from my client localhost development environment. But getting error from AWS AMPLIFY SERVER because of miss match of HTTP.

How can I resolve the issue or is there any way to remove the automatically added AWS AMPLIFY's SSL?

Muhaimenul Islam
  • 747
  • 1
  • 7
  • 22

5 Answers5

8

You can use cors everywhere proxy. It is hosted as https and is a proxy so you just need to add it before your api end point url.

Ex. http://myapi.com/v1/users can be written as https://cors-everywhere.herokuapp.com/http://myapi.com/v1/users

This will do the trick. I'm personally using this for the same setup you mentioned.

And if don't like to use their proxy, you can create your own proxy.

Milan Patel
  • 395
  • 2
  • 9
1

You can create a CloudFront distribution of your backend with https support.

1

Heroku now supports HTTPS calls to your-app-name.heroku.com without any configuration changes.

https://devcenter.heroku.com/changelog-items/1815

To avoid this issue, simply replace http://... with https://... in your code hosted on Amplify.

Michel
  • 11
  • 4
0

Here are AWS official instructions (with free option):

https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/configuring-https.html

Riza Khan
  • 2,712
  • 4
  • 18
  • 42
-2

Rather than AWS Amplify you can run your frontend in S3, if you don't want Authentication. Simply build your react app and upload the build files and properly setup the access in AWS.

You won't get the Mixed Content issue because AWS S3 endpoint also http.

p.kovelan
  • 9
  • 2
  • 2
    I know I can deploy my project on S3. And also adding SSL to my backend server is a solution. But these are just way around and avoiding the problem. I am looking for a solution keeping the project on Amplify console. Thank you – Muhaimenul Islam Apr 02 '20 at 05:20
  • This might work only for html websites and not javascript enabled websites like react-js. You need to have cloudfront attached to S3 bucket and deliver the content. – saumilsdk Sep 16 '20 at 04:32