2017-10-12 160 views
0

我使用亚马逊Linux与Apache(Apache/2.4.25(亚马逊))。我有几个域名和几个子域名。我使用letsencrypt/cerbot作为ssl证书。这工作。我可以访问https而没有问题。但是,我无法访问我的任何非默认http虚拟主机。它们都重新路由到默认虚拟主机。我只发现了其他一些没有解析的帖子,这似乎很难搜索。 Letsencrypt抱怨说我需要虚拟主机的单独文件,这就是我为http和https所做的。我已经把所有的http转移到了httpd.conf中,但这也不起作用。我的域名和子域名也有“A”记录。我错过了什么?Apache虚拟主机https工作,但http只需默认虚拟主机

###Begin httpd.conf### 

ServerRoot "/etc/httpd" 

Listen 80 

Include conf.modules.d/*.conf 

User nona_yo_biz 
Group nona_yo_biz 

ServerAdmin [email protected] 

<Directory /> 
    AllowOverride none 
    Require all denied 
</Directory> 

<Directory "/var/www"> 
    AllowOverride All 
    # Allow open access: 
    Require all granted 
</Directory> 

<Directory "/var/www/html"> 
    Options FollowSymLinks 
    AllowOverride All 
    Require all granted 
</Directory> 

# Load config files in the "/etc/httpd/conf.d" directory, if any. 
# This is where my ssl files are stored 
IncludeOptional conf.d/*.conf 

#Some other module crap etc 

#Some other AWS settings 

<Directory "/var/www/html"> 
    Options FollowSymLinks 
    AllowOverride All 
    DirectoryIndex index.html index.php 
    Require all granted 
</Directory> 

<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot "/var/www/html/basesite" 
ServerName basesite.com 
</VirtualHost> 

<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot "/var/www/html/sub1example" 
ServerName sub1.example.com 
</VirtualHost> 

<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot "/var/www/html/sub2example" 
ServerName sub2.example.com 
</VirtualHost> 

<VirtualHost *:80> 
ServerAdmin [email protected] 
DocumentRoot "/var/www/html/example" 
ServerName example.com 
</VirtualHost> 

###End httpd.conf### 

###BEGIN ssl.conf### 

Listen 443 https 

#Some other stuff 

<VirtualHost *:443> 
DocumentRoot "/var/www/html/basesite" 
ServerName basesite.com:443 
ErrorLog logs/ssl_error_log 
TransferLog logs/ssl_access_log 
LogLevel warn 
SSLEngine on 
SSLProtocol all -SSLv3 
SSLProxyProtocol all -SSLv3 
SSLHonorCipherOrder on 
#Some other stuff 
CustomLog logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" 
ServerAdmin s[email protected] 
SSLCertificateFile /etc/letsencrypt/live/basesite.com/fullchain.pem 
SSLCertificateKeyFile /etc/letsencrypt/live/basesite.com/privkey.pem 
</VirtualHost> 

###END ssl.conf 

###Separate conf file for vhost### 

<VirtualHost *:443> 
ServerAdmin [email protected] 
DocumentRoot "/var/www/html/sub1example" 
ServerName sub1.example.com:443 
SSLCertificateFile /etc/letsencrypt/live/basesite.com/fullchain.pem 
SSLCertificateKeyFile /etc/letsencrypt/live/basesite.com/privkey.pem 
</VirtualHost> 

###Separate conf file for vhost### 

<VirtualHost *:443> 
ServerAdmin [email protected] 
DocumentRoot "/var/www/html/sub2example" 
ServerName sub2.example.com:443 
SSLCertificateFile /etc/letsencrypt/live/basesite.com/fullchain.pem 
SSLCertificateKeyFile /etc/letsencrypt/live/basesite.com/privkey.pem 
</VirtualHost> 

###Separate conf file for vhost### 

<VirtualHost *:443> 
ServerAdmin [email protected] 
DocumentRoot "/var/www/html/example" 
ServerName example.com:443 
SSLCertificateFile /etc/letsencrypt/live/basesite.com/fullchain.pem 
SSLCertificateKeyFile /etc/letsencrypt/live/basesite.com/privkey.pem 
</VirtualHost> 

编辑的apachectl -S输出

sudo apachectl -S 
VirtualHost configuration: 
*:443     is a NameVirtualHost 
     default server basesite.com (/etc/httpd/conf.d/ssl.conf:57) 
     port 443 namevhost basesite.com (/etc/httpd/conf.d/ssl.conf:57) 
     port 443 namevhost sub1.example.com (/etc/httpd/conf.d/ssl_sub1_exa.conf:1) 
     port 443 namevhost example.com (/etc/httpd/conf.d/ssl_exa.conf:1) 
     port 443 namevhost sub2.example.com (/etc/httpd/conf.d/ssl_sub2_exa.conf:1) 
*:80     is a NameVirtualHost 
     default server basesite.com (/etc/httpd/conf/httpd.conf:392) 
     port 80 namevhost basesite.com (/etc/httpd/conf/httpd.conf:392) 
     port 80 namevhost sub1.example.com (/etc/httpd/conf/httpd.conf:400) 
       alias sub1.example.com:80 
     port 80 namevhost example.com (/etc/httpd/conf/httpd.conf:407) 
ServerRoot: "/etc/httpd" 
Main DocumentRoot: "/var/www/html/" 
Main ErrorLog: "/etc/httpd/logs/error_log" 
Mutex default: dir="/var/run/httpd/" mechanism=default 
Mutex mpm-accept: using_defaults 
Mutex cache-socache: using_defaults 
Mutex authdigest-opaque: using_defaults 
Mutex watchdog-callback: using_defaults 
Mutex proxy-balancer-shm: using_defaults 
Mutex rewrite-map: using_defaults 
Mutex ssl-stapling-refresh: using_defaults 
Mutex authdigest-client: using_defaults 
Mutex ssl-stapling: using_defaults 
Mutex proxy: using_defaults 
Mutex authn-socache: using_defaults 
Mutex ssl-cache: using_defaults 
PidFile: "/var/run/httpd/httpd.pid" 
Define: DUMP_VHOSTS 
Define: DUMP_RUN_CFG 
User: name="nona_yo_biz" id=404 
Group: name="nona_yo_biz" id=505 

回答

0

所以我已经解决了这个问题,不幸的是它是尝试几个不同的事情的组合。所以我没有一个简单的答案来提供,但我可以提供一些帮助我一路走来的事情。

  1. 感谢Vasya Zhuryk我用须藤的apachectl -S确定在何处/如何实际上被加载我virtualhosts。在亚马逊Linux apache默认设置中,当您的ssl文件以“.conf”结尾时,会从conf.d动态加载。它们通过从主httpd.conf文件中加载IncludeOptional conf.d/*。conf。正如我以前所认识到的那样,不要将备份放在conf.d中,而是使用“.conf”,否则最终会出现问题。这不会发生在conf文件夹中。所以那些需要包含在包含/ path/file.conf
  2. 我发现,当私人在铬浏览(ctrl + shift + N),非ssl网站工作正常。因此,自“时间的开始”以来,清除自动填充表单数据(可能缓存的图像和文件)清除了Chrome中的错误域重定向。这是非常误导的,因为我会输入地址,正确的域名会显示,但总是会重定向到错误的地址。这很可能是因为以前配置不当的虚拟主机。

再次,有很多事情都做了,并尝试沿途,但以上是一些可以帮助他人的关键点。

0

我没有看到一个条目了NameVirtualHost *:80,基于虚拟主机这个名字是你需要在你的配置中的条目文件。试试吧。

+0

我已经试过了。在apache 2.4中,它已从文档中删除,并在检查语法时抛出警告/错误。所以我没有实际部署它就删除了它。 – vdidxho

0

我有2个主意: (见虚拟主机)

1. httpd -S 

而且

2. SSLCertificateKeyFile must have *.key extension 

你不有规则的虚拟主机指令(index.php文件,使的.htaccess等),你可以试试这个:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot "/var/www/html/basesite" 
    ServerName basesite.com 

    <Directory "/var/www/html/basesite/"> 
     Options Indexes FollowSymLinks 
     AllowOverride All 
     DirectoryIndex index.php index.html 
     Require all granted 
    </Directory> 
</VirtualHost> 
+0

谢谢,我不知道apachectl -S。我会将输出添加到上面的问题中。我不相信.key的事情是一个问题,因为https工作正常,我发现在一个关于letsencrypt和amazon linux的地方。 – vdidxho

+0

我应该将目录添加到每个*:80虚拟主机吗?我还以为他们会从我的配置文件 中继承自全局的选项。选项FollowSymLinks AllowOverride全部 要求全部授予 vdidxho

0

你需要添加“NS”记录到域管理面板。