Apache如何根据用户来自本地还是外部网络设置不同根目录
Apache配置实现仅暴露指定子目录给外网访问
前置说明
你目前的配置是外网访问直接指向Sites根目录,我们通过配置基于域名的虚拟主机实现本地访问根目录正常使用、外网仅能访问subsite子目录,完全隔离根目录其他内容。
步骤1:开启Apache虚拟主机支持
编辑Apache主配置文件,macOS系统默认路径为/etc/apache2/httpd.conf,找到以下两行,删除行首的#注释符:
LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so Include /private/etc/apache2/extra/httpd-vhosts.conf
如果是Homebrew安装的Apache,主配置文件路径为/usr/local/etc/httpd/httpd.conf。
步骤2:编辑虚拟主机配置
打开虚拟主机配置文件/etc/apache2/extra/httpd-vhosts.conf,替换原有内容为以下配置,替换对应参数为你自己的实际值:
# 本地访问配置:仅允许内网/本地IP访问Sites根目录 <VirtualHost *:80> ServerName localhost DocumentRoot "/Users/username/Sites" <Directory "/Users/username/Sites"> Options Indexes FollowSymLinks MultiViews AllowOverride All # 允许本地回环、内网IP段访问 Require ip 127.0.0.1 192.168.0.0/16 10.0.0.0/8 172.16.0.0/12 </Directory> </VirtualHost> # 外网访问配置:动态域名绑定subsite为根目录,允许所有访问 <VirtualHost *:80> ServerName 你的动态DNS域名(例:xxx.dyndns.org) DocumentRoot "/Users/username/Sites/subsite" <Directory "/Users/username/Sites/subsite"> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> </VirtualHost>
步骤3:验证配置并重启Apache
- 执行配置语法校验命令,确认返回
Syntax OK:apachectl configtest - 重启Apache生效配置:
sudo apachectl restart
可选排查项
如果配置后外网访问报错403 Forbidden,可执行以下命令授予subsite目录读取权限:sudo chmod -R 755 /Users/username/Sites/subsite
内容的提问来源于stack exchange,提问作者ReX357
相关产品推荐
相关产品推荐

