安装后无法启动服务
不少人在CentOS或Ubuntu上装完Apache,执行systemctl start httpd或者apache2命令却启动失败。这时候先别急着重装,打开终端输入systemctl status httpd看看具体报错。常见的问题是端口被占用,比如Nginx已经在用80端口,Apache自然起不来。可以用netstat -tulnp | grep :80查一下是谁占了坑。
如果确认是端口冲突,改配置就行。编辑httpd.conf或者ports.conf文件,把Listen 80改成Listen 8080,再重启服务试试。浏览器访问http://你的IP:8080,能打开默认页面就说明通了。
网页显示403 Forbidden
明明文件放在/var/www/html下,权限也设成755了,结果还是弹出403错误。这多半是SELinux在作怪。CentOS默认开启SELinux,它会限制Apache读取某些目录。临时关闭可以用setenforce 0测试是否是这个问题,如果是,可以考虑调整上下文类型:
chcon -R -t httpd_exec_t /var/www/html
chmod -R 755 /var/www/html另外检查httpd.conf里的<Directory>段落,确保AllowOverride和Require all granted设置正确,否则即使文件存在也会被拒之门外。
虚拟主机配置不生效
想搭多个站点,配置好VirtualHost之后刷新浏览器,出来的总是默认页。这时候得检查两件事:一是httpd.conf里有没有包含额外的vhost文件,像Include conf/sites-enabled/*.conf这样的语句;二是域名对应的配置文件中ServerName写对没有,别把example.com写成exmaple.com这种低级错误。
还有一个容易忽略的点是DNS解析。本地测试时可以在/etc/hosts加一行127.0.0.1 test.local,这样浏览器输test.local就能指向本机。不然就算Apache配好了,域名解析不到IP也是白搭。
HTTPS证书加载失败
启用SSL模块后,配置好证书路径却发现服务启动报错。常见原因是证书路径写的是相对路径,而Apache工作目录不是你想的那样。建议使用绝对路径,比如/etc/apache2/ssl/server.crt这种。
同时确认mod_ssl已经启用,在Debian系系统上可能需要运行a2enmod ssl,然后重启Apache。查看error.log通常能看到“unable to load certificate”的提示,顺着日志线索找最快。
静态资源加载慢或失败
网站HTML能打开,但CSS、JS、图片全都加载不出来。这种情况先看浏览器开发者工具的Network标签,如果是404,检查DocumentRoot路径是否拼错;如果是超时,可能是文件权限问题。
Apache以www-data用户运行,如果静态资源属于root且权限为600,那它根本读不了。把所有权改过来:chown -R www-data:www-data /var/www/html,再配合755目录权限和644文件权限,基本能解决大部分读取问题。
有时候还会遇到符号链接不让访问的情况。默认配置禁止FollowSymLinks,可以在对应目录段落下加上Options FollowSymLinks,记得重启服务生效。