Apache HTTP Server
> Apache HTTP Server — 一个跑了几十年还在被无数网站使用的开源Web服务器,帮你把静态文件、动态脚本稳稳地发给全世界。
## 先说这玩意儿是干嘛的
你平时上网,输入网址,浏览器咔一下弹出页面,背后那个“咔”的动作基本都是Web服务器干的。Apache HTTP Server(俗称httpd)就是其中最老牌、最皮实的一个。它不搞花活,就是把你的HTML、图片、CSS,或者通过PHP、Python跑的动态内容,按HTTP协议打包发出去。
它解决的问题很实在:**怎么让外网的人稳定访问你机器上的文件**。比如你写了个个人博客,或者公司要挂个官网,又或者你想在内网搭个文件共享,Apache都能干。它跨平台,Windows、Linux、macOS通吃,而且模块化设计,想要啥功能装个模块就行,不像某些新潮服务器那样“全家桶”绑架你。
## 下载方式:别去乱七八糟的站
官网就是 [Apache HTTP Server官网](https://httpd.apache.org/),这是唯一正儿八经的下载源。但注意,Apache本身只提供源码,你得自己编译。如果你不想折腾,推荐用下面这些打包好的发行版:
- **Windows**:去 [Apache Lounge](https://www.apachelounge.com/download/) 下载预编译的zip包,解压就能用,省心。
- **Linux(Debian/Ubuntu)**:直接 `sudo apt install apache2`,系统帮你管好。
- **Linux(CentOS/RHEL)**:`sudo yum install httpd`。
- **macOS**:系统自带Apache,但版本老,建议用 `brew install httpd` 装新版。
## 安装方法:分平台说,别慌
### Windows(以Apache Lounge为例)
1. 下载zip包,比如 `httpd-2.4.59-win64-VS17.zip`。
2. 解压到 `C:\Apache24`(路径别带空格)。
3. 打开 `C:\Apache24\conf\httpd.conf`,把 `Define SRVROOT "/Apache24"` 改成 `Define SRVROOT "C:/Apache24"`(注意正斜杠)。
4. 以管理员身份打开命令行,进入 `C:\Apache24\bin`,运行 `httpd.exe -k install` 注册为Windows服务。
5. 启动服务:`net start Apache2.4`,然后浏览器访问 `http://localhost`,看到“It works!”就成功了。
### Ubuntu/Debian
```bash
sudo apt update
sudo apt install apache2 -y
sudo systemctl enable apache2 # 开机自启
sudo systemctl start apache2 # 启动
```
装完直接访问 `http://localhost`,默认页面出来就行。
### CentOS
```bash
sudo yum install httpd -y
sudo systemctl enable httpd
sudo systemctl start httpd
```
注意CentOS防火墙默认挡80端口,记得 `sudo firewall-cmd --permanent --add-service=http && sudo firewall-cmd --reload`。
## 基础使用教程:改配置、放文件、看日志
### 1. 网站根目录
默认在 `/var/www/html/`(Linux)或 `C:\Apache24\htdocs`(Windows)。你把 `index.html` 放进去,访问 `http://你的IP/` 就能看到。
### 2. 改端口
想用8080?编辑 `conf/httpd.conf`,找到 `Listen 80` 改成 `Listen 8080`,然后重启服务:
```bash
sudo systemctl restart apache2 # Linux
# Windows: net stop Apache2.4 && net start Apache2.4
```
### 3. 虚拟主机(一个服务器跑多个网站)
这是Apache的看家本领。在 `conf/extra/httpd-vhosts.conf` 里加:
```apache
<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot "/var/www/blog"
ErrorLog "logs/blog-error.log"
CustomLog "logs/blog-access.log" common
</VirtualHost>
```
然后记得在 `httpd.conf` 里取消这行的注释:
```apache
Include conf/extra/httpd-vhosts.conf
```
重启后,把 `blog.example.com` 解析到你服务器IP,就能访问 `/var/www/blog` 了。
### 4. 开HTTPS(SSL证书)
现在没HTTPS的网站等于裸奔。用Let's Encrypt免费证书,在Ubuntu上:
```bash
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d yourdomain.com
```
跟着提示走,自动改配置、自动续期,爽到飞起。
### 5. 看日志排错
日志是Apache的生命线。默认日志位置:
- Linux:`/var/log/apache2/access.log` 和 `error.log`
- Windows:`C:\Apache24\logs\error.log`
出问题先看error.log,比如权限不对、配置语法错误,都在里面写着。
## 进阶技巧:让你的Apache更顺手
### 1. 开启mod_rewrite(伪静态)
WordPress、ThinkPHP这类东西必须有它。启用模块:
```bash
sudo a2enmod rewrite
```
然后在你网站的 `.htaccess` 文件里写规则。比如把 `?id=123` 变成 `/post/123.html`:
```apache
RewriteEngine On
RewriteRule ^post/([0-9]+)\.html$ index.php?id=$1 [L]
```
### 2. 用gzip压缩,页面秒开
在 `httpd.conf` 或虚拟主机配置里加:
```apache
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>
```
### 3. 隐藏Apache版本号
安全第一,别让人知道你用哪个版本。在 `httpd.conf` 里:
```apache
ServerTokens Prod
ServerSignature Off
```
### 4. 限制IP访问(比如只让公司内网看后台)
```apache
<Location /admin>
Require ip 192.168.1.0/24
Require ip 10.0.0.1
</Location>
```
### 5. 反向代理(把请求转发给Node或Tomcat)
```apache
ProxyPass /api http://localhost:3000
ProxyPassReverse /api http://localhost:3000
```
需要先 `sudo a2enmod proxy proxy_http`。
### 6. 性能调优:开启KeepAlive
默认是开的,但确认一下:
```apache
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
```
这能减少TCP握手次数,对高并发很有用。
## 最后说两句
Apache确实不如Nginx那么“潮”,但它稳啊。我见过跑了十年没重启过的生产服务器,就是Apache。它的配置语法虽然老,但网上资料多,踩坑容易找答案。如果你刚开始学Web服务器,从Apache入手,你会理解HTTP协议、虚拟主机、权限控制这些底层概念,之后换Nginx或者Caddy都是降维打击。
别被命令行吓到,照着上面一步步来,十分钟你就能有个能访问的网站。遇到问题就翻日志,日志看不懂就复制去搜索引擎,基本都能解决。玩得开心!