温馨提示×

centos apache如何做反向代理

小樊
37
2026-09-15 02:05:55
栏目: 智能运维

在 CentOS 上使用 Apache 做反向代理(Reverse Proxy),通常借助 mod_proxy 及相关模块来实现。下面以 CentOS 7/8 + Apache(httpd) 为例,给你一个完整、可操作的步骤说明。


一、安装 Apache(如未安装)

# CentOS 7
yum install httpd -y

# CentOS 8 / Stream
dnf install httpd -y

启动并设置开机自启:

systemctl start httpd
systemctl enable httpd

二、启用反向代理模块

Apache 反向代理需要以下模块:

  • mod_proxy
  • mod_proxy_http
  • (可选)mod_proxy_balancer(负载均衡)

查看是否已加载:

httpd -M | grep proxy

若未加载,编辑配置文件或确认模块存在(CentOS 默认通常已编译):

# 一般在 /etc/httpd/conf.modules.d/00-proxy.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

如被注释,取消注释后重启:

systemctl restart httpd

三、配置反向代理(核心)

示例场景

http://yourdomain.com/ 反向代理到后端服务:

  • http://127.0.0.1:8080

方法 1:在虚拟主机中配置(推荐)

编辑或新建配置文件:

vi /etc/httpd/conf.d/proxy.conf

内容示例:

<VirtualHost *:80>
    ServerName yourdomain.com

    ProxyRequests Off
    ProxyPreserveHost On

    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/

    ErrorLog /var/log/httpd/proxy_error.log
    CustomLog /var/log/httpd/proxy_access.log combined
</VirtualHost>

说明:

  • ProxyRequests Off:关闭正向代理(安全)
  • ProxyPass:请求转发规则
  • ProxyPassReverse:修正后端返回的 Location 头

方法 2:在根目录下代理某个路径

ProxyPass /api/ http://127.0.0.1:9000/
ProxyPassReverse /api/ http://127.0.0.1:9000/

即:

  • http://yourdomain.com/api/*http://127.0.0.1:9000/*

四、HTTPS(可选但常见)

如果你使用 Let’s Encrypt

dnf install certbot python3-certbot-apache -y
certbot --apache -d yourdomain.com

Certbot 会自动帮你配置 HTTPS + 反向代理。

手动示例(片段):

<VirtualHost *:443>
    ServerName yourdomain.com
    SSLEngine on
    SSLCertificateFile /path/to/cert.pem
    SSLCertificateKeyFile /path/to/privkey.pem

    ProxyPass / http://127.0.0.1:8080/
    ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>

五、SELinux 注意事项(CentOS 常见问题)

如果后端是本机服务,可能需要允许 Apache 联网:

setsebool -P httpd_can_network_connect 1

六、防火墙放行

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

七、测试与排错

apachectl configtest
systemctl restart httpd

查看日志:

tail -f /var/log/httpd/proxy_error.log

八、常见用途总结

场景 示例
代理 Java / Node Tomcat、Spring、Node.js
统一端口 80/443 暴露,内部多端口
负载均衡 mod_proxy_balancer
隐藏后端 提高安全性

如果你有具体后端服务(如 Tomcat / Node / Docker / 内网 IP),可以告诉我,我可以直接给你一份针对性配置

0