让 apache 只能通过 127.0.0.1 访问,这可能吗?

让 apache 只能通过 127.0.0.1 访问,这可能吗?

我已经设置了我的 Apache 服务器,并且 PHP/MySQL 运行良好!

但问题是,我该如何保密,因为这是一个仅限开发服务器?将内容保密的唯一原因是,如果脚本出错,我不希望当它成为面向公众的网站时出现 Apache 错误(而且其他人也共享同一个网络!),而且我不太可能将我的 PC 用作网络主机 - 我更有可能使用网络主机提供商路线来访问实际的实时网站。

目前我可以通过三种方式访问​​它:

  • http://本地主机(或者http://127.0.0.1,替代方法和本地主机的 IP,但无论哪种方式我都可以接受!)

  • http 192.168.0.1(我的路由器的 IP)

  • http pc-name-here(我的电脑名称,显然这在 Windows 电脑之间有所不同!)

[注意,不能发布链接,因此对于另外两个,您必须像第一个一样插入冒号/正斜杠]。

但是,我只想通过第一个来访问它。它监听端口 80(我不想改变这一点)。这不可能吗,还是我搞错了?我对 PHP/网页设计的了解比网络方面的了解多一点,所以这对我来说是第一次!

基本上,我希望它只能通过该计算机上的 localhost 访问,而不是外部 IP 地址或 192.168.0.1 访问。

我是否需要编辑 httpd.conf 并在每个测试平台站点上使用拒绝,或者还有其他解决方案?

例子:

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    order allow,deny
    allow from 127.0.0.1
            deny from 192.168.0.1
            deny from my-pc-name
</Directory>
  • 这是一个例子,但我不确定这里什么是对的,什么是错的!

我的操作系统是Windows 7 Ultimate。

我确实浏览了一下网络,但其中一些内容对我来说似乎有点技术性。

你会推荐什么?

答案1

最简单的方法是通过Listen指令。默认情况下,我们的 httpd.conf 中有一行内容:

Listen *:80

这意味着它将响应您计算机的所有网络地址上的端口 80 上的 ro 请求。将其更改为:

Listen 127.0.0.1:80

将告诉 apache 仅响应本地适配器上的请求,从而忽略其他任何请求。

答案2

监听选项可能是最好的,但仅供参考,你可以像这样使用允许/拒绝

<Directory /www/vhosts/localhost/>
    Options All
    AllowOverride All
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
</Directory>

Order deny,allow告诉 Apache“除非特别允许,否则拒绝所有请求”(Order allow,deny相反,IE 允许所有请求,除非特别阻止)
Deny from all的作用与Order deny,allow它将阻止来自所有 IP 的所有请求,除非您特别打开它们。使用两者似乎是一般做法Order deny,allowDeny from all但我不能 100% 确定为什么当它们都做同样的事情时
Allow from 127.0.0.1会说“允许来自 127.0.0.1 的所有请求”。127.0.0.1 将映射到本地主机,因此您可以使用http://127.0.0.1/或者http://本地主机/并会被允许

这将向任何在 localhost 上请求该网站的人提供 403(禁止访问)错误

其他一些有用的东西;
Allow from 192.168.0.将允许网络上任何人的请求(假设您的网络是 192.168.0.0-192.168.0.255)
允许/拒绝规则按顺序处理,因此

Deny from 192.168.0.2
Allow from 192.168.0.2

将允许请求和

Allow from 192.168.0.2
Deny from 192.168.0.2

将拒绝来自 192.168.0.2 的请求

所以

Deny from 192.168.0.2
Allow from all

允许来自 192.168.0.2 的请求,即使该请求已被明确拒绝。

您还可以在 .htaccess 文件中或每个目录中使用允许/拒绝规则

答案3

我对 /etc/apache2 中的 ports.conf 进行了更改,以便每次引用监听端口时都只监听本地主机。其他文件似乎都没有 listen 命令。重新启动 apache 后,这些更改似乎产生了预期的效果。

/etc/apache2/ports.conf

NameVirtualHost *:80
########################## Listen 80
Listen 127.0.0.1:80

<IfModule mod_ssl.c>
# If you add NameVirtualHost *:443 here, you will also have to change
# the VirtualHost statement in /etc/apache2/sites-available/default-ssl
# to <VirtualHost *:443>
# Server Name Indication for SSL named virtual hosts is currently not
# supported by MSIE on Windows XP.
###############################Listen 443
Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls.c>
##################################Listen 443
Listen 127.0.0.1:443
</IfModule>

相关内容