下面以 Apache 2(httpd) 为例,介绍如何配置反向代理(Reverse Proxy)。示例基于 Linux(Ubuntu / Debian / CentOS 通用)。
反向代理需要以下模块:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_html # 可选,处理 HTML 内容
sudo a2enmod headers # 可选,但推荐
Ubuntu / Debian 使用
a2enmod
CentOS / RHEL 可直接修改/etc/httpd/conf/httpd.conf
重启 Apache:
sudo systemctl restart apache2 # Ubuntu / Debian
sudo systemctl restart httpd # CentOS / RHEL
假设:
www.example.comhttp://127.0.0.1:8080<VirtualHost *:80>
ServerName www.example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
✅ 效果:
访问 http://www.example.com/ 实际由 localhost:8080 提供服务。
<VirtualHost *:80>
ServerName www.example.com
ProxyRequests Off
ProxyPass /api/ http://127.0.0.1:3000/
ProxyPassReverse /api/ http://127.0.0.1:3000/
ProxyPass /admin/ http://127.0.0.1:8081/
ProxyPassReverse /admin/ http://127.0.0.1:8081/
</VirtualHost>
✅ 效果:
/api/* → 后端 3000/admin/* → 后端 8081sudo apt install certbot python3-certbot-apache
sudo certbot --apache
certbot 会自动生成 HTTPS 配置。
<VirtualHost *:443>
ServerName www.example.com
SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.crt
SSLCertificateKeyFile /etc/ssl/private/example.key
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
| 指令 | 作用 |
|---|---|
ProxyRequests Off |
关闭正向代理(必须) |
ProxyPreserveHost On |
保留原始 Host 头 |
ProxyPass |
设置转发规则 |
ProxyPassReverse |
修正后端返回的重定向 |
ProxyTimeout |
后端超时时间 |
示例:
ProxyTimeout 60
<Directory />
Require all granted
</Directory>
或检查 SELinux(CentOS):
setsebool -P httpd_can_network_connect 1
RemoteIPHeader X-Forwarded-For
或在后端读取:
X-Forwarded-For
X-Real-IP
<VirtualHost *:80>
ServerName app.example.com
ProxyRequests Off
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
</VirtualHost>
如果你愿意,可以告诉我:
我可以给你一份完全可直接用的配置。