Ubuntu16.04 Apache配置SSL遇阻,求正确配置路径与方法
兄弟,别慌!你的HTTP能正常访问,说明服务器和域名解析的基础是没问题的,HTTPS访问失败大概率是SSL模块没启用、配置细节出错(比如Laravel的根目录)、或者EC2安全组没放行443端口这些小问题,咱们一步步来排查解决:
1. 先确认Apache的SSL模块已经启用
Ubuntu 16.04默认Apache是没开启SSL模块的,这是最容易忽略的点!先执行这个命令:
sudo a2enmod ssl
如果提示模块已经启用就跳过,否则执行完赶紧重启Apache:
sudo systemctl restart apache2
2. 正确配置SSL虚拟主机文件
你找的/etc/apache2/sites-available/default-ssl.conf是完全正确的配置文件位置!别直接改sites-enabled里的文件,那都是软链接到sites-available的,修改源文件才是规范操作。
用编辑器打开它:
sudo nano /etc/apache2/sites-available/default-ssl.conf
把你准备的配置替换成下面这个,重点注意Laravel的根目录和必填的ServerName:
<VirtualHost *:443> # 必须填写你在Nominalia托管的域名,不然Apache不知道对应哪个站点 ServerName your-domain.com # 如果需要支持带www前缀的域名,就加上这行 ServerAlias www.your-domain.com # 划重点!Laravel的入口文件在public目录下,DocumentRoot必须指向这里,之前写/var/www/html会直接导致Laravel无法正常运行 DocumentRoot /var/www/html/public <Directory /var/www/html/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> SSLEngine on SSLCertificateFile /var/www/html/sitename.com.crt SSLCertificateKeyFile /var/www/html/sitename.com.key SSLCertificateChainFile /var/www/html/intermediate-ca.crt </VirtualHost>
3. 启用SSL站点并重启Apache
配置完后,得告诉Apache启用这个SSL站点:
sudo a2ensite default-ssl.conf
然后重启Apache让配置生效:
sudo systemctl restart apache2
4. 给证书文件设置正确权限
Apache运行用的是www-data用户,得确保它能读取你的证书文件,不然会出现权限报错:
sudo chown www-data:www-data /var/www/html/*.crt /var/www/html/*.key sudo chmod 640 /var/www/html/*.crt /var/www/html/*.key
5. 检查EC2安全组!这步90%的人会忘
AWS的EC2安全组默认是不放行443端口的!你得登录AWS控制台,找到你的EC2实例,去安全组规则里添加一条:
- 类型:HTTPS
- 协议:TCP
- 端口范围:443
- 源:0.0.0.0/0(如果要允许所有人访问)或者你指定的IP范围
6. 验证配置有没有语法错误
执行这个命令检查Apache配置是否合法:
sudo apache2ctl configtest
如果输出Syntax OK就没问题,否则根据提示修正错误即可。
可选:把HTTP自动跳转到HTTPS
要是想让所有访问HTTP的用户自动跳转至HTTPS,就打开/etc/apache2/sites-available/000-default.conf,在<VirtualHost *:80>块里添加这段代码:
RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
然后重启Apache生效。
最后再确认下域名解析:去Nominalia后台检查你的域名A记录是否指向EC2的公网IP,解析是否已经生效(可以用nslookup your-domain.com命令验证)。
内容的提问来源于stack exchange,提问作者Jass

