Sim*_*mon 31 apache ubuntu virtualhost
我尝试在默认设置之外设置虚拟主机localhost.每当我尝试调用我的虚拟主机时,http://test我都会获得位于目录中的默认Apache2索引文件http://localhost.此外,apache在禁用(a2dissite)两个VirtualHost文件和重新加载apache(service apache2 reload)之后仍然返回此页面.
虚拟主机无法正常工作会出现什么问题?
组态:
我的目录结构如下:
/var/www/html # Default localhost dir
/var/www/html7index.html # Apache2 default index
/var/www/test # HTML dir for the virtual host
/var/www/test/index.html # My "website"
Run Code Online (Sandbox Code Playgroud)
内容/etc/hosts:
127.0.0.1 localhost
127.0.1.1 Laptop
127.0.0.1 test
Run Code Online (Sandbox Code Playgroud)
目录内容/etc/apache2/sites-available:
000-default.conf
default-ssl.conf
test.conf
Run Code Online (Sandbox Code Playgroud)
档案000-default.conf:
<VirtualHost localhost:80>
ServerName localhost
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
档案test.conf:
<VirtualHost test:80>
ServerAdmin test@localhost
ServerName test
NameVirtualHost test
ServerAlias test
DocumentRoot /var/www/test
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
Edu*_*nis 53
我遇到了这个问题,事实证明我必须禁用默认的虚拟主机.
sudo a2dissite 000-default.conf
Run Code Online (Sandbox Code Playgroud)
根据apache文档深入讨论虚拟主机匹配:
[...]如果主服务器此时没有ServerName,则使用运行httpd的计算机的主机名.
这意味着如果默认vhost(通常为000-default.conf)没有设置ServerName(这是默认设置),Apache将回退到操作系统的主机名.
因此,Apache会从默认的vhost(000-default.conf)中选择并提供服务,即使配置了与服务器主机名具有相同ServerName的另一个用户创建的vhost也是如此.
原因是Apache按文件名的字母顺序对vhost进行排序,并选择与请求的HTTP Host头匹配的第一个vhost配置.因此,在用户定义的vhost之前检查000-default.conf,因为它们通常没有前缀000-.
Sim*_*mon 43
tl; dr:用sudo调用它:sudo service apache2 reload
看起来像service apache2 reload愚弄我的行为.请参阅以下日志:
user@Laptop:/etc/apache2/sites-available$ sudo a2ensite test.conf
Enabling site test.
To activate the new configuration, you need to run:
service apache2 reload
user@Laptop:/etc/apache2/sites-available$ service apache2 reload
* Reloading web server apache2 *
user@Laptop:/etc/apache2/sites-available$
Run Code Online (Sandbox Code Playgroud)
尝试达到http://test:不工作
user@Laptop:/etc/apache2/sites-available$ sudo service apache2 reload
* Reloading web server apache2 *
user@Laptop:/etc/apache2/sites-available$
Run Code Online (Sandbox Code Playgroud)
尝试达到http://test:工作
所以,找到差异!关键是我认为它首先会正确重新加载.日志文件中也没有条目.打电话给它有sudo帮助.这是一个错误吗?
只是指出这一点对于有经验的用户来说可能是显而易见的,但如果你是第一个计时器则不是很明显.
确保您使用的配置以您的预期/sites-enabled结束.confapache2.conf
这是我的问题,它修复了它.
小智 5
如果您已经尝试过以下操作:
1. 检查文档根目录和父文件夹的权限。
2. a2dissite 000-default 等
3. 使用 sudo service apache2 reload 重新启动 apache
但它仍然无法正常工作,然后执行以下操作:
1. 启用调试日志:
vi /etc/apache2/apache2.conf
LogLevel debug
2. 重新启动 apache2 并监控日志
sudo service apache2 restart
tail -f /var/log/apache2/*.log
3. 注意服务器的 IP 是否按预期显示在日志中:
==> /var/log/apache2/other_vhosts_access.log <== ip-xxx-xx-xx-xx.eu-west-2.compute.internal:80 xx.78.xx.2xx - - [13/Sep /2017:18:40:44 +0100] "GET / HTTP/1.1" 200 3509 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0"
您会注意到,
我有一些 FQDN,例如“ip-xxx-xx-xx-xx.eu-west-2.compute.internal:80” ,而不是像典型 IP 地址那样的 xxx.xx.xx.xx:80 "
我正在使用 AWS 弹性 IP 为我的 Amazon EC2 Web 服务器创建一个固定 IP。
4. 检查你的虚拟主机 .conf 文件的头部
<VirtualHost 127.0.0.1:80 11.22.33.44:80>
# Added from nessus to make more secure
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
ServerName mydomain.com
...
Run Code Online (Sandbox Code Playgroud)
好的,所以我们在这里看到的是我们告诉 Apache 为来自 127.0.0.1 或 11.22.33.44 端口 80 的请求提供服务。尤里卡!
解决方案:
将 *:80 添加到 VirtualHost 标记中,如下所示:
<VirtualHost 127.0.0.1:80 11.22.33.44:80 *:80>
Run Code Online (Sandbox Code Playgroud)
并重新启动apache。我希望这有帮助。可能还有其他原因,但如果这是导致您问题的原因,那么是时候坐下来喝杯茶放松一下了!如果没有,那么我希望你找到解决方案。
附注。请记住将日志放回警告而不是调试!
| 归档时间: |
|
| 查看次数: |
55259 次 |
| 最近记录: |