我想要www.example.com
,staging.example.com
和demo.example.com
,其中每个映射到Elastic Beanstalk上相同应用程序的单独环境。
这可能吗?
在我example.com.
的托管区域,我为www.example.com
,staging.example.com
和demo.example.com
设置了cname记录,每个记录的值均指向其各自的EB网址
我设置www.example.com
的第一个工作和请求到达环境。但是,当我尝试使用ping staging.example.com
与其他人联系时,结果为ping: cannot resolve staging.example.com: Unknown host
。
www.example.com
正常工作这可能会起作用吗?
注意:我已将我的实际域名替换为example.com
。
我可能会越来越近但它还没有工作,它正在返回You don't have permission to access /user
。
根据此链接,https://serverfault.com/questions/407961/setting-up-subdomains-within-amazon-aws-elastic-beanstalk。
我补充说:
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>
现在,当我运行ping staging.example.com
时,响应为:
PING 例如... elasticbeanstalk.com (35.182.128.147):56个数据字节
哪个好。但是,当我尝试提出我的实际要求时:
curl -X POST -H "Content-Type: application/json"
-H "Authorization: Bearer ..." -d '{}' https://staging.example.com/user
回复是:
<!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>
我重新排序了我的VirtualHosts并添加了ServerName,所以它现在看起来像这样:
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>
但我仍然从我的POST
请求获得相同的回复:
<!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>
此外,根据我的/var/log/httpd/error_log
日志:
AH01630: client denied by server configuration: /var/app
几点。
更新了Directory
和DocumentRoot
以指向我的应用文件实际存储在我的烧瓶应用的服务器上的位置,"/opt/python/current/app"
,之前我复制并粘贴了{{} 1}}。
使用"/var/app/current/"
检查了我的apache版本。结果是,httpd -v
更新文件:
Server version: Apache/2.4.27 (Amazon) \n Server built: Sep 24 2017 23:19:50
仍然得到相同的结果。
答案 0 :(得分:1)
ping staging.example.com
有效,因为您的CNAME已正确解析。但是,VirtualHost
指令以线性方式应用。由于您的第一个VHost
部分不包含ServerName
,因此默认情况下会将其应用于所有请求。
更改两个VHost
部分的顺序,或者向它们添加ServerName
,事情应该开始工作(可能需要重新启动EB应用程序)。
如果还有其他原因导致403错误,您也可以检查机器本身的日志文件。