Apache'ye yalnızca 127.0.0.1 aracılığıyla erişilebilir olmasını sağlayın, bu mümkün mü?


19

Apache sunucumu kurdum ve PHP / MySQL iyi çalışıyor!

Ancak sorun şu ki, yalnızca geliştirme amaçlı bir sunucu olduğu için bunu nasıl gizli tutabilirim ? İçeriği gizli tutmanın tek nedeni, bir komut dosyasının yanlış gitmesi durumunda, halka açık bir site haline geldiğinde Apache hatalarının görünmesini istemiyorum (ve diğerlerinin de aynı ağı paylaştığı gerçeği!) Ve ben daha azım bilgisayarımı web barındırıcısı olarak kullanma olasılığı yüksek - gerçek bir canlı site için web barındırma sağlayıcısı rotasını kullanma olasılığım daha yüksek.

Şu anda üç şekilde erişebiliyorum:

  • http: // localhost (veya http://127.0.0.1 , alternatif yol ve localhost'un IP'si ancak her iki şekilde de benimle kabul edilebilir!)

  • http 192.168.0.1 (yönlendiricimin IP adresi)

  • http pc-name-here (bilgisayarımın adı, açıkçası bu Windows PC'ler arasında değişir!)

[not, bağlantı gönderemezsiniz, bu nedenle diğer ikisi için ilk satırdaki gibi iki nokta üst üste / eğik çizgi eklemeniz gerekir].

Ancak, sadece birincisi üzerinden erişmek istiyorum. 80 numaralı bağlantı noktasını dinliyor (ve bunu değiştirmek istemiyorum). Bu mümkün değil, yoksa yanılıyor muyum? Ben PHP / webdesign hakkında şeylerin ağ tarafında daha fazla biliyorum, bu yüzden bu benim için bir ilk!

Temel olarak, bu makinedeki localhost üzerinden erişilebilir olmasını istiyorum, harici IP adresi veya 192.168.0.1 değil.

Her testbed sitesinde httpd.conf dosyasını düzenlemem ve reddetmeyi kullanmam gerekir mi yoksa başka bir çözüm var mı?

Misal:

<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>
  • bu bir örnek ama burada neyin doğru neyin yanlış olduğundan emin değilim!

İşletim sistemim Windows 7 Ultimate.

Ben 'net yuvarlak bir göz var, ama bazıları benim için biraz teknik görünüyordu.

Ne önerirsiniz?

Yanıtlar:


34

Bunu yapmanın en kolay yolu Listendirektiftir. Varsayılan olarak, httpd.conf dosyamızda aşağıdakileri okuyan bir satır vardır:

Listen *:80

Bu, bilgisayarınızın tüm ağ adreslerindeki 80 numaralı bağlantı noktasındaki isteklere yanıt vereceği anlamına gelir. Bunu olarak değiştirmek:

Listen 127.0.0.1:80

Apache'ye yalnızca yerel adaptördeki isteklere yanıt vermesini söyler, böylece başka bir şey göz ardı edilir.


12

Dinleme seçeneği muhtemelen en iyisidir, ancak tıpkı bir FYI gibi, izin ver / reddet'i kullanarak bunu yapabilirsiniz

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

Order deny,allowApache'ye "özel olarak izin verilmedikçe tüm istekleri reddet" e ( Order allow,denytam tersi, IE özel olarak engellenmedikçe tüm isteklere izin verir) özel
Deny from allbir şekilde Order deny,allowaçmadıkça tüm IP'lerden gelen tüm istekleri engellemesine benzer bir şey yapar . Her ikisini de kullanmak genel bir uygulama gibi görünüyor Order deny,allowve Deny from allher ikisi de aynı şeyi yaptıkları zaman
Allow from 127.0.0.1"127.0.0.1'den gelen tüm isteklere izin ver" neden% 100 emin değilim . 127.0.0.1, http://127.0.0.1/ veya http: // localhost / komutunu kullanabilmeniz için localhost ile eşleşecektir ve buna izin verilecektir

Bu, localhost'ta site numarası isteyen herkese 403 (Yasak) hatası verecektir.

Diğer bazı yararlı şeyler;
Allow from 192.168.0.ağınızdaki herhangi bir kişinin isteğine izin verir (Ağınızın sağlanması 192.168.0.0-192.168.0.255'dir)
Kurallara sırayla izin verilir / reddedilir.

Deny from 192.168.0.2
Allow from 192.168.0.2

isteklere izin verir ve

Allow from 192.168.0.2
Deny from 192.168.0.2

192.168.0.2'den gelen talepleri reddeder

Yani

Deny from 192.168.0.2
Allow from all

Özel olarak reddedilmiş olsa bile 192.168.0.2'den gelen isteklere izin verir.

İzin Ver / Reddet kurallarını .htaccess dosyalarında veya dizin başına temelinde de kullanabilirsiniz


Bunun dışında "Sipariş reddetme, izin verme", "Sipariş izin verme, reddetme" değil. İnsanların sık sık yaptığı küçük bir hata.
Scott Chu

3

/ Etc / apache2 içindeki ports.conf dosyasında değişiklikler yaptım, böylece bir portu dinlemek için yapılan her referans sadece localhost dinliyordu. Başka hiçbir dosyada dinleme komutu yok gibi görünüyor. Apache yeniden başlatıldıktan sonra bu değişikliklerin istenen etkisi olduğu görülüyordu.

/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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.