使apache仅可通过127.0.0.1访问,这可能吗?


19

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

但是问题是,由于它是用于开发的服务器,如何将其私有化?保持内容私有的唯一原因是如果脚本出错,我不希望Apache错误出现在面向公众的网站上(并且其他人也共享同一网络!),而我却更少可能将我的PC用作虚拟主机-我更有可能使用虚拟主机提供商路由来访问实际的实时网站。

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

  • http:// localhost(或http://127.0.0.1,替代方法和localhost的IP,但是我可以接受其中任何一种方法!)

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

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

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

但是,我只想通过第一个访问它。它在端口80上监听(我不想更改它)。这是不可能的,还是我误会了?我对PHP / webdesign的了解比对网络方面的了解还多,所以这对我来说是第一次!

基本上,我希望只能通过该计算机上的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。

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

你会推荐什么?

Answers:


34

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

Listen *:80

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

Listen 127.0.0.1:80

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


12

监听选项可能是最好的,但就像供参考一样,您可以使用allow / deny这样

<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除非明确阻止,否则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将映射到localhost,因此您可以使用http://127.0.0.1/http:// localhost /,它将被允许

这将对任何在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文件中或基于每个目录使用“允许/拒绝”规则


确保它是“拒绝订单,允许”,而不是“允许订单,拒绝”。人们经常犯的一个小错误。
朱Chu

3

我对/ etc / apache2中的ports.conf进行了更改,以便每个对“侦听端口”的引用都仅侦听localhost。似乎没有其他文件包含监听命令。重新启动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>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.