服务公告
Apache-星耀云
发布时间:2026-04-28 05:37
一、前言
干了10年运维,见过太多新人对着空荡荡的服务器发呆。Apache装不上、防火墙拦住、端口冲突、权限报错——这些问题我当年全踩过。今天不整那些花里胡哨的理论,直接给你演示生产环境里最常用的Apache安装配置流程。CentOS/RHEL和Ubuntu两条线我都走一遍,你照着敲准能跑起来。
二、操作步骤
步骤1:检查系统环境
装Apache之前先看看你手里是啥系统,别瞎敲命令。执行以下命令查看发行版信息:
cat /etc/os-release预期输出(Ubuntu):
NAME="Ubuntu"
VERSION="22.04.1 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 22.04.1 LTS"
VERSION_ID="22.04"预期输出(CentOS/RHEL):
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"步骤2:CentOS/RHEL安装Apache(httpd)
Red Hat系用yum/dnf包管理器,安装httpd包。生产环境建议先同步软件源:
yum update -y
yum install -y httpd预期输出:
Loaded plugins: fastestmirror
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-97.el7.centos will be installed
Installing:
httpd x86_64 2.4.6-97.el7.centos base 2.7 M
Transaction Summary
Install 1 Package(s)
Complete!如果提示没有httpd包,可能是最小化安装没加源,执行:yum install -y epel-release && yum install -y httpd
步骤3:Ubuntu安装Apache2
Debian系包名是apache2,更新源后直接装:
apt update && apt install -y apache2预期输出:
Reading package lists... Done
Building dependency tree... Done
apache2 is already the newest version (2.4.52-1ubuntu4).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
如果是新装机器,会看到Setting up apache2 ...和Processing triggers for systemd ...的提示。
步骤4:启动Apache服务并设置开机自启
装完不会自动跑,得你手动启动。CentOS/RHEL命令:
systemctl start httpd
systemctl enable httpd
systemctl status httpd预期输出:
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2024-01-15 10:30:00 CST; 5s ago
Main PID: 1234 (httpd)
Status: "Processing requests..."
CGroup: /system.slice/httpd.service
└─1234 /usr/sbin/httpd -DFOREGROUND
Ubuntu命令:
systemctl start apache2
systemctl enable apache2
systemctl status apache2预期输出:
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 10:30:00 CST; 5s ago
Main PID: 1234 (apache2)
Tasks: 55 (limit: 4915)
Memory: 8.2M
CPU: 123ms
CGroup: /system.slice/apache2.service
└─1234 /usr/sbin/apache2 -k start
步骤5:配置防火墙放行HTTP/HTTPS流量
服务起来了,但防火墙拦着你还是访问不了。CentOS/RHEL用firewalld:
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
firewall-cmd --list-services预期输出:
success
success
success
dhcpv6-client http https ssh
看到http和https出现在列表里就对了。
Ubuntu默认没开防火墙,如果用ufw:
ufw allow 'Apache Full'
ufw status预期输出:
Rules updated
Rules updated (v6)
Status: active
To Action From
-- ------ ----
Apache Full ALLOW Anywhere
Apache Full (v6) ALLOW Anywhere步骤6:本地测试Web服务
防火墙放行了,现在本地先测一下能不能通。用curl访问localhost:
curl -I http://localhost预期输出:
HTTP/1.1 200 OK
Date: Mon, 15 Jan 2024 02:30:00 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips
Last-Modified: Mon, 15 Jan 2024 02:00:00 GMT
ETag: "1a2b-3c4d5e6f7g8h"
Content-Type: text/html
Content-Length: 45
看到HTTP/1.1 200 OK说明服务跑通了。如果报403,检查下Selinux和文件权限。
步骤7:修改默认端口(可选)
生产环境有时不让用80端口,或者机器上跑了多个Web服务,需要改端口。以CentOS/RHEL为例,编辑主配置文件:
vi /etc/httpd/conf/httpd.conf找到Listen 80这行,改成你想要的端口,比如8080:
Listen 8080Ubuntu编辑/etc/apache2/ports.conf:
vi /etc/apache2/ports.conf修改内容:
Listen 8080改完重启服务生效:
systemctl restart httpd # CentOS/RHEL
systemctl restart apache2 # Ubuntu然后访问http://你的IP:8080测试。
步骤8:自定义网站根目录
默认DocumentRoot在/var/www/html,实际项目往往有自己的目录路径。CentOS/RHEL修改:
vi /etc/httpd/conf/httpd.conf找到并修改(注意改两处):
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
Require all granted
</Directory>如果想换成/data/www:
DocumentRoot "/data/www"
<Directory "/data/www">
Require all granted
</Directory>Ubuntu修改虚拟主机配置:
vi /etc/apache2/sites-available/000-default.conf修改DocumentRoot:
DocumentRoot /data/www⚠️ 警告:修改完目录后记得给目录授权,否则会报403错误:chown -R www-data:www-data /data/www(Ubuntu)或chown -R apache:apache /data/www(CentOS/RHEL)。
三、常见问题FAQ
Q1:服务启动报错"Address already in use",端口被占用了怎么办?
这种问题80%是你之前开过nginx或者apache没关干净。执行以下命令定位谁在占用端口:
ss -tlnp | grep :80预期输出:
LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=6))看到是nginx占着,要么停掉它,要么给Apache换个端口。停掉nginx:systemctl stop nginx。如果确定不需要nginx,直接yum remove nginx或apt remove nginx卸载。
Q2:本地能访问,外部浏览器打不开,什么情况?
别慌,十有八九是云服务器的安全组没开。阿里云、腾讯云、AWS都有安全组策略,80和443端口默认不放行。去控制台的安全组配置里加一条入站规则:协议TCP,端口80-443,来源0.0.0.0/0。防火墙和云安全组两层都要过,少一个都不行。
Q3:改了配置文件怎么知道语法对不对?
生产环境最怕改配置重启后起不来。先用测试模式检查语法:
# CentOS/RHEL
apachectl configtest预期输出:
Syntax OK或者报错会提示哪一行有问题:
AH00526: Syntax error on line 42 of /etc/httpd/conf/httpd.conf:
Invalid command 'Requiret', perhaps misspelled or defined by a module not included
Ubuntu用:apache2ctl configtest。看到Syntax OK再重启服务,别直接reload。
Q4:SELinux导致403,怎么回事?
CentOS/RHEL老手最烦这玩意儿。关闭SELinux永久解决方案:
vi /etc/selinux/config改成:
SELINUX=disabled临时关闭(重启失效):setenforce 0。生产环境建议保留SELinux但正确配置上下文,不会的先关掉跑起来再说。
四、总结
搞定Apache安装配置就这几板斧:看系统、装包、启服务、放防火墙、测访问。基本功练扎实了,后面的虚拟主机、SSL证书、Rewrite规则都是在这套流程上加东西。
核心要点:
- CentOS/RHEL装httpd,Ubuntu装apache2,包名不一样
- 装完不会自动启动,必须手动start和enable
- 防火墙两层:系统iptables/firewalld + 云安全组,缺一不可
- 改配置前先用configtest检查语法
- 自定义目录记得授权,否则403
延伸阅读:
- Apache虚拟主机配置:同一台服务器跑多个网站
- Let's Encrypt免费SSL证书部署:给网站加HTTPS
- Apache性能优化:MPM模块选择与连接数调优
- 日志管理与轮转:避免磁盘被日志撑爆
相关推荐
上一篇: Cursor 安装配置-星耀云
下一篇: RocketMQ 消息队列-星耀云