I'd like to have www.example.com
, staging.example.com
and demo.example.com
, where each of those maps to a separate environment for the same application on Elastic Beanstalk.
Is this possible?
On my hosted zone for example.com.
, I've setup cname records for www.example.com
, staging.example.com
and demo.example.com
with each having a value that points to their respective EB url.
The first one I setup www.example.com
works and requests reach the environment. But when I try to reach the others with ping staging.example.com
, the results is ping: cannot resolve staging.example.com: Unknown host
.
www.example.com
works fineIs this possible to get working?
Note: I've substituted my actual domain for example.com
.
I might be getting closer but its not working yet, it's returning You don't have permission to access /user
.
Per this link, https://serverfault.com/questions/407961/setting-up-subdomains-within-amazon-aws-elastic-beanstalk.
I added:
files:
"/etc/httpd/conf.d/vhost.conf":
mode: "000644"
owner: root
group: root
encoding: plain
content: |
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot "/var/app/current/"
<Directory "/var/app/current/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName staging.example.com
DocumentRoot "/var/app/current/your-new-webroot"
<Directory "/var/app/current/your-new-webroot">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Now when I run ping staging.example.com
, the response is:
PING example...elasticbeanstalk.com (35.182.128.147): 56 data bytes
Which is great. But when I try to make my actual request:
curl -X POST -H "Content-Type: application/json"
-H "Authorization: Bearer ..." -d '{}' https://staging.example.com/user
The response is:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /user
on this server.<br />
</p>
</body></html>
I've reordered my VirtualHosts and added ServerName so it now looks like this:
files:
"/etc/httpd/conf.d/vhost.conf":
mode: "000644"
owner: root
group: root
encoding: plain
content: |
NameVirtualHost *:80
<VirtualHost *:80>
ServerName staging.example.com
DocumentRoot "/var/app/current/your-new-webroot"
<Directory "/var/app/current/your-new-webroot">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot "/var/app/current/"
<Directory "/var/app/current/">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
But I'm still getting the same response from my POST
request:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /user
on this server.<br />
</p>
</body></html>
Additionally, per my /var/log/httpd/error_log
logs:
AH01630: client denied by server configuration: /var/app
A couple points.
Updated the Directory
and DocumentRoot
to point to where my app files are actually stored on the server for my flask app, "/opt/python/current/app"
, previously I copied and pasted "/var/app/current/"
.
Checked my apache version with httpd -v
. The result is, Server version: Apache/2.4.27 (Amazon) \n Server built: Sep 24 2017 23:19:50
Updated file:
files:
"/etc/httpd/conf.d/vhost.conf":
mode: "000644"
owner: root
group: root
encoding: plain
content: |
NameVirtualHost *:80
<VirtualHost *:80>
ServerName staging.example.com
DocumentRoot "/opt/python/current/app"
<Directory "/opt/python/current/app">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot "/opt/python/current/app"
<Directory "/opt/python/current/app">
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Still getting the same results.
The ping staging.example.com
works because your CNAME resolved properly. However, the VirtualHost
directive is applied in a linear manner. Since your first VHost
section does not contain a ServerName
, it is applied by default to all the requests.
Change the order of both VHost
sections, or add a ServerName
to them all, and things should start working (restart of the EB application might be required).
You can also check the log files on the machine itself, if there is some other reason for the 403 error though.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With