在 CentOS 上用 Apache 做代理,通常有两种常见场景:
下面以 CentOS 7/8 + Apache(httpd) 为例说明。
yum install httpd -y
# 或 CentOS 8
dnf install httpd -y
systemctl start httpd
systemctl enable httpd
Apache 默认未加载代理模块,需要确认:
httpd -M | grep proxy
若没有,编辑配置文件(通常已默认加载):
vi /etc/httpd/conf.modules.d/00-proxy.conf
确保有以下内容:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so # WebSocket
重启 Apache:
systemctl restart httpd
/api 代理到 127.0.0.1:8080编辑虚拟主机或主配置:
vi /etc/httpd/conf.d/proxy.conf
<VirtualHost *:80>
ServerName example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass /api http://127.0.0.1:8080/
ProxyPassReverse /api http://127.0.0.1:8080/
</VirtualHost>
重启:
systemctl restart httpd
✅ 访问 http://example.com/api → 实际访问后端 8080
<VirtualHost *:80>
ServerName app.example.com
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
ProxyPass /ws ws://127.0.0.1:3000/
ProxyPassReverse /ws ws://127.0.0.1:3000/
<VirtualHost *:8080>
ProxyRequests On
ProxyVia On
<Proxy "*">
Require ip 192.168.1.0/24
</Proxy>
</VirtualHost>
⚠️ 正向代理有安全风险,不建议公网开放。
CentOS 默认开启 SELinux,否则代理会 503:
setsebool -P httpd_can_network_connect 1
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
如果你有 具体场景(如代理 Tomcat / Docker / HTTPS / 多端口),可以告诉我,我给你完整配置示例。