ทำให้ Apache สามารถเข้าถึงได้ผ่านทาง 127.0.0.1 เป็นไปได้หรือไม่


19

ฉันตั้งค่าเซิร์ฟเวอร์ Apache ของฉันแล้ว PHP / MySQL ทำงานได้ดี!

แต่ปัญหาคือฉันจะเก็บความเป็นส่วนตัวนี้ไว้อย่างไรเพราะมันเป็นเซิร์ฟเวอร์สำหรับการพัฒนาเท่านั้น ? เหตุผลเดียวที่ทำให้เนื้อหาเป็นส่วนตัวคือถ้าสคริปต์ผิดฉันไม่ต้องการให้ Apache แสดงข้อผิดพลาดหากกลายเป็นเว็บไซต์สาธารณะ (และคนอื่น ๆ ใช้เครือข่ายเดียวกันด้วย!) และฉันก็น้อยลง มีแนวโน้มที่จะใช้พีซีของฉันเป็นเว็บโฮสต์ - ฉันมีแนวโน้มที่จะลงไปใช้เส้นทางของผู้ให้บริการโฮสต์เว็บสำหรับไซต์สดจริง

ขณะนี้ฉันสามารถเข้าถึงได้สามวิธี:

  • http: // localhost (หรือhttp://127.0.0.1 , ทางเลือกและ IP ของ localhost แต่วิธีใดทางหนึ่งเป็นที่ยอมรับกับฉัน!)

  • http 192.168.0.1 (IP ของเราเตอร์ของฉัน)

  • http pc-name-here (ชื่อพีซีของฉันเห็นได้ชัดว่าสิ่งนี้แตกต่างกันระหว่างพีซี Windows!)

[หมายเหตุไม่สามารถโพสต์ลิงก์ได้ดังนั้นสำหรับอีกสองรายการที่คุณต้องแทรกเครื่องหมายโคลอน / เครื่องหมายสแลชเช่นเดียวกับอันแรก]

อย่างไรก็ตามฉันต้องการเข้าถึงผ่านทางแรกเท่านั้น กำลังฟังบนพอร์ต 80 (และฉันไม่ต้องการเปลี่ยน) สิ่งนี้เป็นไปไม่ได้หรือฉันเข้าใจผิด? ฉันรู้เพิ่มเติมเกี่ยวกับ PHP / webdesign มากกว่าด้านเครือข่ายของสิ่งต่าง ๆ ดังนั้นนี่เป็นครั้งแรกสำหรับฉัน!

โดยทั่วไปฉันต้องการให้เข้าถึงได้เฉพาะผ่าน localhost บนเครื่องนั้นไม่ใช่ IP address ภายนอกหรือ 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

ฉันได้ดูรอบ 'สุทธิ แต่บางคนก็ดูเหมือนเทคนิคเล็กน้อยสำหรับฉัน

คุณจะแนะนำอะไร

คำตอบ:


34

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือผ่านListenคำสั่ง ตามค่าเริ่มต้นจะมีบรรทัดใน httpd.conf ของเราที่อ่าน:

Listen *:80

หมายความว่ามันจะตอบคำขอ ro ที่พอร์ต 80 ในที่อยู่เครือข่ายคอมพิวเตอร์ทั้งหมดของคุณ เปลี่ยนเป็น:

Listen 127.0.0.1:80

จะบอกให้ apache ตอบกลับเฉพาะคำร้องขอบนอะแด็ปเตอร์ในระบบเท่านั้นจึงไม่สนใจสิ่งอื่น


12

ตัวเลือกฟังน่าจะดีที่สุด แต่ในฐานะที่เป็น FYI คุณสามารถทำได้โดยใช้การอนุญาต / ปฏิเสธเช่นนี้

<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,allowและDeny 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 /และจะอนุญาต

ที่จะให้บริการข้อผิดพลาด 403 (ต้องห้าม) ให้กับทุกคนที่ขอเว็บไซต์ไม่ได้บน localhost

สิ่งที่มีประโยชน์อื่น ๆ ;
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 หรือต่อไดเรกทอรีได้


เพราะมันคือ "Order deny, allow" ไม่ใช่ "Order allow, deny" ความผิดพลาดเล็ก ๆ ที่เกิดขึ้นบ่อยครั้งที่คนทำ
Scott Chu

3

ฉันทำการเปลี่ยนแปลง ports.conf ใน / etc / apache2 เพื่อให้แต่ละการอ้างอิงไปยังพอร์ต Listen คือการรับฟัง localhost เท่านั้น ดูเหมือนไม่มีไฟล์อื่นที่จะมีคำสั่ง 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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.