Ubuntu使用Apache发布静态网站
本文在Ubuntu 24.04 LTS上用Apache发布一个独立静态网站,适合需要Apache生态或后续LAMP环境的用户。只适用于允许建站的服务器,住宅云不适用。若服务器已有Nginx、宝塔或正式网站,不直接照着安装另一套Apache占用80端口,应先在隔离环境验证部署方案。
确认端口与站点目录未被占用
sudo ss -lntp
ls -ld /var/www/apache-demo
记录80端口监听程序和现有站点。如果Apache已安装,先查看现有虚拟主机配置再新建。示例域名example.com必须替换为自己的真实域名,A记录应指向目标公网IP。不要通过关闭全部防火墙排除访问问题,只放行实际需要的Web端口。
安装并准备独立测试页面
sudo apt update
sudo apt install apache2 curl
systemctl is-active apache2
sudo install -d -m 0755 /var/www/apache-demo
确认新目录没有现有业务文件后,建立测试首页:
printf '%s\n' '<h1>Apache site test</h1>' | sudo tee /var/www/apache-demo/index.html
sudo chmod 0644 /var/www/apache-demo/index.html
sudo nano /etc/apache2/sites-available/apache-demo.conf
写入虚拟主机并启用
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/apache-demo
<Directory /var/www/apache-demo>
Options -Indexes
AllowOverride None
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/apache-demo.error.log
CustomLog ${APACHE_LOG_DIR}/apache-demo.access.log combined
</VirtualHost>
这是静态站点示例:关闭目录列表,并且不依赖.htaccess。应用确实需要.htaccess时,再根据程序官方要求限制允许覆盖的指令范围,不给所有目录一概AllowOverride All。DocumentRoot和Directory都要指向同一个实际目录。
sudo a2ensite apache-demo.conf
sudo apache2ctl configtest
sudo apache2ctl -S
configtest应为Syntax OK;-S用于查看域名、地址端口及配置文件是否被加载。主机全局ServerName提示与具体语法错误要分别识别;不能在存在配置错误时继续reload。检测通过后执行sudo systemctl reload apache2。
分两层验证访问
curl -i --resolve example.com:80:127.0.0.1 http://example.com/
curl -i --resolve example.com:80:127.0.0.1 http://example.com/no-such-file
第一条应返回200及测试文字,第二条返回404。再从外部电脑访问实际域名,确认页面相同。直接访问IP可能命中第一个默认虚拟主机,不是检查域名站点的可靠方法。若返回403,查看站点error.log及父目录权限;若首页是别的网站,用apache2ctl -S排查名称匹配,不直接删除所有默认配置。
停用新站点与下一步
需要回退时,执行sudo a2dissite apache-demo.conf,再运行configtest,成功后reload。该操作停用配置,不删除站点文件或数据库。静态页正常后,再按需要添加PHP-FPM与HTTPS;不要把PHP脚本直接放进尚未配置PHP处理的站点,否则可能把源文件直接提供给访问者。