在 Ubuntu 上使用 Apache2 做代理,通常是通过 mod_proxy 相关模块来实现,常见用途有:
下面以 反向代理 为例,讲最常用、最实用的做法。
sudo a2enmod proxy
sudo a2enmod proxy_http
# 如果是 WebSocket
sudo a2enmod proxy_wstunnel
启用后重启 Apache:
sudo systemctl restart apache2
example.com 代理到本地 3000 端口编辑站点配置:
sudo nano /etc/apache2/sites-available/example.conf
内容示例:
<VirtualHost *:80>
ServerName example.com
ProxyRequests Off
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
</VirtualHost>
启用站点:
sudo a2ensite example.conf
sudo systemctl reload apache2
ProxyPass /api/ http://127.0.0.1:8080/
ProxyPassReverse /api/ http://127.0.0.1:8080/
访问:
http://example.com/api/ → http://127.0.0.1:8080/先用 certbot 生成证书:
sudo apt install certbot python3-certbot-apache
sudo certbot --apache -d example.com
Apache 会自动生成 443 配置,你只需在里面加:
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
ProxyPass /ws/ ws://127.0.0.1:3000/
ProxyPassReverse /ws/ ws://127.0.0.1:3000/
确保后端使用 相对路径 或正确配置 ProxyPassReverse
ProxyRequests Off
<VirtualHost *:80>
ServerName demo.local
ProxyPass / http://127.0.0.1:5000/
ProxyPassReverse / http://127.0.0.1:5000/
</VirtualHost>
如果你有 具体场景(比如代理 Docker、Spring Boot、Next.js、WebSocket、内网穿透),我可以给你更精确的配置。