Apache只允许域名访问

本文提供了一个Apache服务器的配置示例,包括如何设置虚拟主机、文档根目录、索引文件及权限控制等。此外还展示了如何配置PHP环境变量,确保应用程序在特定路径下运行。
NameVirtualHost 11.11.11.11
<VirtualHost *:80>
        ServerName 11.11.11.11
        <Location />
                Order Allow,Deny
                Deny from all
        </Location>
</VirtualHost>

<VirtualHost *:80>
        ServerName www.test.com
        ServerAlias www.test.com
        DocumentRoot /data/html/
        DirectoryIndex index.php index.html index.htm
        <Directory /data/www/>
                Options +Includes -Indexes
                AllowOverride All
                Order Deny,Allow
                Allow from All
                php_admin_value open_basedir /data/www/:/tmp:/proc:/dev/urandom
        </Directory>
</VirtualHost>

 

转载于:https://my.oschina.net/leozhou/blog/743694

<think>我们正在配置HTTP服务(如Apache或Nginx)以限制只允许通过域名访问,禁止直接通过IP地址访问。在Red Hat系统上,常见的HTTP服务器有Apache(httpd)和Nginx。下面分别介绍两种服务器的配置方法。 ###配置Apache (httpd)只允许域名访问1. **编辑Apache配置文件**通常主配置文件是`/etc/httpd/conf/httpd.conf`。另外,可以在虚拟主机配置文件中进行设置(如`/etc/httpd/conf.d/`目录下的.conf文件)。 2. **配置虚拟主机**在配置文件中,找到或添加一个`<VirtualHost>`块,并设置`ServerName`为你的域名(例如`example.com`)。然后,添加一个拒绝直接通过IP访问的规则。示例配置:```apache#禁止通过IP访问<VirtualHost *:80>ServerName服务器IP地址<Location/>Requireall denied</Location></VirtualHost>#允许通过域名访问<VirtualHost*:80>ServerName www.example.comServerAlias example.comDocumentRoot /var/www/html#其他配置...<Directory "/var/www/html">Require allgranted</Directory></VirtualHost>```这里,第一个`<VirtualHost>`块匹配任何通过IP地址的访问(因为`ServerName`设置为IP地址),并拒绝所有请求。第二个虚拟主机则配置域名访问允许访问。 3. **重启Apache服务**```bashsudo systemctl restarthttpd``` ###配置Nginx只允许域名访问1. **编辑Nginx配置文件**通常主配置文件是`/etc/nginx/nginx.conf`,但更常见的做法是在`/etc/nginx/conf.d/`目录下创建独立的配置文件(如`example.com.conf`)。 2. **配置服务器块**在配置文件中,设置一个默认服务器块来拒绝IP访问,然后配置一个以域名为`server_name`的服务器块来允许访问。示例配置:```nginx#禁止通过IP访问server{listen80 default_server;server_name _;return403;#直接返回403禁止访问}#允许通过域名访问server{listen80;server_name www.example.comexample.com;root /usr/share/nginx/html;#其他配置...location/ {try_files $uri $uri/=404;}}```注意:`default_server`表示这个服务器块将处理所有未匹配到其他`server_name`的请求(即通过IP访问的请求)。我们在这个默认块中返回403错误。3.**重启Nginx服务**```bashsudo systemctl restartnginx``` ###注意事项-确保你的域名已正确解析到服务器的IP地址。 -如果使用HTTPS,需要在相应的端口(如443)上进行类似配置。-配置防火墙(如firewalld)允许HTTP(80)和HTTPS(443)端口。 ###引用说明在配置DNS解析时,我们可能需要设置域名的A记录指向服务器IP[^1]。另外,在配置服务器块时,我们参考了Nginx的服务器块配置方法[^2]。 §§相关问题§§1.如何验证HTTP服务是否只允许域名访问?2.除了配置Web服务器,还可以通过哪些方式限制IP访问?3.在Red Hat系统上如何配置防火墙以配合HTTP服务?</think>### 在Red Hat系统上配置HTTP服务只允许域名访问 #### 方法1:通过Web服务器配置(推荐) ##### Apache (httpd) 配置 1. **编辑虚拟主机文件** 修改 `/etc/httpd/conf.d/your_site.conf`: ```apache <VirtualHost *:80> ServerName your-domain.com # 你的域名 DocumentRoot /var/www/html # 拒绝直接IP访问 <If "%{HTTP_HOST} != 'your-domain.com'"> Require all denied </If> </VirtualHost> # 默认虚拟主机拒绝所有IP访问 <VirtualHost *:80> ServerName _ <Location /> Require all denied </Location> </VirtualHost> ``` 2. **重启服务** ```bash sudo systemctl restart httpd ``` ##### Nginx 配置 1. **编辑站点配置文件** 修改 `/etc/nginx/conf.d/your_site.conf`: ```nginx server { listen 80 default_server; server_name _; # 匹配所有未定义域名 return 403; # 直接拒绝IP访问 } server { listen 80; server_name your-domain.com; # 你的域名 root /usr/share/nginx/html; # 其他正常配置... } ``` 2. **重启服务** ```bash sudo systemctl restart nginx ``` #### 方法2:通过防火墙限制 ```bash # 允许80端口 sudo firewall-cmd --permanent --add-service=http # 拒绝所有IP直接访问(需配合域名白名单) sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source not ipset=allowed_dns drop' # 创建IP集合(需提前解析域名) sudo firewall-cmd --permanent --new-ipset=allowed_dns --type=hash:ip sudo firewall-cmd --permanent --ipset=allowed_dns --add-entry=$(dig +short your-domain.com) # 重载防火墙 sudo firewall-cmd --reload ``` #### 验证配置 1. 通过域名访问应正常响应 2. 直接通过服务器IP访问应返回 `403 Forbidden` 错误 3. 检查日志: ```bash tail -f /var/log/httpd/access_log # Apache tail -f /var/log/nginx/access.log # Nginx ``` #### 注意事项 1. **DNS解析**:确保域名已正确解析到服务器IP[^1] 2. **SSL配置**:若启用HTTPS,需在SSL虚拟主机中重复上述限制 3. **多域名处理**:在 `ServerName` 或 `server_name` 中添加所有允许域名 4. **IPv6支持**:若启用IPv6,需在防火墙和Web服务器中同步配置 > **关键原理**:通过虚拟主机匹配机制,将默认请求拒绝,仅响应指定域名的请求[^2]。防火墙方案需动态更新DNS解析结果[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值