Apache 2.4配置ProxyPass反向代理Diaspora与Mastodon时出现403错误求助
Apache 2.4配置ProxyPass反向代理Diaspora与Mastodon时出现403错误求助
各位大佬好,我在自己的服务器上同时跑Diaspora和Mastodon(这想法确实有点疯哈哈),但用Apache的ProxyPass反向代理到本地3000(Diaspora)和4000(Mastodon)端口时一直卡壳——访问https://diaspora.thechatpit.com和https://mastodon.thechatpit.com都返回403错误。
目前我已经做了这些尝试:
- 把两个应用的运行用户都加入了Apache所属的用户组
- 给应用相关的文件和目录设置了用户与组权限一致的配置
实在没辙了,总不能直接chmod 777吧,那绝对不是正确的解决方式,所以来求助各位!
以下是我整理好的两个应用的Apache配置文件:
Diaspora的Apache配置
<VirtualHost *:80> ServerName diaspora.thechatpit.com RedirectPermanent / https://diaspora.thechatpit.com/ </VirtualHost> <VirtualHost *:443> ServerName diaspora.thechatpit.com DocumentRoot "/usr/share/webapps/diaspora/public" SSLEngine on SSLCertificateFile <cert> SSLCertificateKeyFile <key> RewriteEngine on RewriteCond %{HTTP_HOST} !^diaspora\.thechatpit\.com [NC] RewriteRule ^/(.*)$ https://diaspora\.thechatpit\.com/$1 [L,R,QSA] # For Camo support RewriteRule ^/camo/(.*)$ balancer://camo/$1 [P,QSA,L] RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://upstream%{REQUEST_URI} [P,QSA,L] <Proxy balancer://upstream> BalancerMember http://localhost:3000 BalancerMember http://localhost:8081 </Proxy> ProxyRequests on ProxyVia on ProxyPreserveHost on RequestHeader set X_FORWARDED_PROTO https <Proxy *> Require all granted </Proxy> <Directory "/usr/share/webapps/diaspora/public"> Options -MultiViews Require all granted </Directory> <Location "/usr/share/webapps/diaspora/public"> ProxyPass "https://localhost:3000" ProxyPassReverse "https://localhost:3000" </Location> </VirtualHost>
Mastodon的Apache配置
<VirtualHost *:80> ServerName mastodon.thechatpit.com RedirectPermanent / https://mastodon.thechatpit.com/ </VirtualHost> <VirtualHost *:443> ServerName mastodon.thechatpit.com DocumentRoot /var/lib/mastodon/public SSLEngine on SSLCertificateFile <cert> SSLCertificateKeyFile <key> RewriteEngine On RewriteCond %{HTTP_HOST} !^mastodon\.thechatpit\.com [NC] RewriteRule ^/(.*)$ https://mastodon\.thechatpit\.com/$1 [L,R,QSA] ProxyRequests on ProxyVia on ProxyPreserveHost on RequestHeader set X_FORWARDED_PROTO https <Proxy balancer://upstream> BalancerMember https://localhost:4000 </Proxy> <Proxy *> Require all granted </Proxy> <Directory /var/lib/mastodon/public> Options -MultiViews Require all granted </Directory> <Location /var/lib/mastodon/public> ProxyPass "https://localhost:4000" ProxyPassReverse "https://localhost:4000" </Location> </VirtualHost>
我感觉问题可能出在代理配置的细节上,但折腾了一整天还是没头绪,希望各位能帮忙看看!
补充排查方向(供参考)
- 先确认应用本身是否正常:直接在服务器上访问
http://localhost:3000和http://localhost:4000,看能不能正常打开,排除应用自身的问题 - 查看Apache错误日志:一般路径是
/var/log/apache2/error.log(不同系统可能有差异),里面会记录403错误的具体原因,是权限不足还是代理规则冲突 - 检查代理规则冲突:Diaspora配置里同时用了Balancer转发和Location块的ProxyPass,可能存在规则冲突,可以尝试移除Location块,或者调整Rewrite规则的优先级
- Mastodon的代理协议:Mastodon默认生产环境一般是监听http端口(如果用反向代理的话),你这里BalancerMember用了
https://localhost:4000,如果Mastodon本身没配置ssl,改成http://localhost:4000试试 - 确认Apache模块是否加载:确保
proxy、proxy_http、proxy_balancer、rewrite、ssl这些模块都已启用,用命令sudo a2enmod proxy proxy_http proxy_balancer rewrite ssl启用后重启Apache - 检查父目录权限:除了应用的public目录,父目录(比如
/usr/share/webapps/diaspora、/var/lib/mastodon)也要确保Apache运行用户有执行权限(目录的执行权限允许用户进入该目录)
备注:内容来源于stack exchange,提问作者headrift
相关产品推荐
相关产品推荐

