Last active
September 7, 2023 11:04
-
-
Save dryan/8271687 to your computer and use it in GitHub Desktop.
Handling EC2 ELB health checks and Django's ALLOWED_HOSTS setting.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Hosts/domain names that are valid for this site; required if DEBUG is False | |
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts | |
ALLOWED_HOSTS = [ | |
'yourdomain.tld', | |
'.compute-1.amazonaws.com', # allows viewing of instances directly | |
] | |
import requests | |
EC2_PRIVATE_IP = None | |
try: | |
EC2_PRIVATE_IP = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4', timeout = 0.01).text | |
except requests.exceptions.RequestException: | |
pass | |
if EC2_PRIVATE_IP: | |
ALLOWED_HOSTS.append(EC2_PRIVATE_IP) |
how about v6 addresses?
Another option is to implement a middleware that returns a health check before Django's SecurityMiddleware
(that checks the request against ALLOWED_HOSTS
): https://gist.github.com/mgax/cf771b1991e68ca454693d5f3597ff04
Hi, I am stuck with this we have an ELB which uses the Round-Robin technique and we have 3-10 servers, and I couldn't get any single of them working. Which IP shall I put into the below line 11
EC2_PRIVATE_IP = requests.get('http://169.254.169.254/latest/meta-data/local-ipv4', timeout = 0.01).text
Please someone help me here
This Works for me
import requests
ALLOWED_HOSTS = [
'yourdomain.tld',
'.compute-1.amazonaws.com', # allows viewing of instances directly
]
EC2_PRIVATE_IP = None
try:
token = requests.put("http://169.254.169.254/latest/api/token",
headers={"X-aws-ec2-metadata-token-ttl-seconds": "21600"}).text
EC2_PRIVATE_IP = requests.get("http://169.254.169.254/latest/meta-data/local-ipv4",
headers={"X-aws-ec2-metadata-token": token}, timeout=0.01).text
except requests.exceptions.RequestException:
pass
if EC2_PRIVATE_IP:
ALLOWED_HOSTS.append(EC2_PRIVATE_IP)
Great,
I also have somewhat similar try/except block.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This is a great solution, congrats