tra-loi-cau-hoi-phat-trien-web.com

Trong / etc / hosts / file trên Linux / OSX, làm cách nào để tôi thực hiện một tên miền phụ ký tự đại diện?

Tôi cần kiểm tra tên miền phụ trên localhost của mình. Làm cách nào tôi có thể có kết quả này một cách hiệu quả khi thêm *.localhost.com Vào tệp /etc/hosts/ Của mình?

Nếu không thể, tôi phải giải quyết vấn đề này bằng cách nào? Tôi cần kiểm tra tên miền phụ ký tự đại diện trên máy chủ cục bộ của mình. Đó là một Django devserver, máy chủ Django dev có thể xử lý các tên miền phụ không? Một số phần mềm/định tuyến khác có thể cho tôi kết quả cuối cùng tôi muốn không ?

181
MikeN

Tôi đã viết một proxy dns bằng Python. Nó sẽ đọc các mục ký tự đại diện trong/etc/hosts. Xem tại đây: https://github.com/hubdotcom/marlon-tools/blob/master/tools/dnsproxy/dnsproxy.py

45
marlonyao

Cài đặt dnsmasq (Tôi thực hiện việc này trên tất cả các máy tính để bàn Linux của mình dưới dạng bộ đệm DNS). Trong dnsmasq.conf thêm dòng:

address=/localhost.com/127.0.0.1
160
tomchuk

Không thể chỉ định các ký tự đại diện trong /etc/hosts tập tin. Hoặc chỉ định tên máy chủ được yêu cầu một cách rõ ràng hoặc thay thế thiết lập một máy chủ tên cục bộ với các quy tắc phù hợp.

65
ar.

Bạn cần thiết lập một máy chủ DNS và để mỗi máy khách sử dụng nó để giải quyết. Bản thân máy chủ có thể là một cái gì đó "nhẹ" như dnsmasq hoặc nặng như BIND .

15
Gerald Combs

Quy trình làm việc đơn giản (không cần cài đặt gì cả)

Cá nhân tôi thích tạo một tệp PAC cho điều đó và làm cho trình duyệt của tôi chỉ sử dụng nó.

Bước 1: tạo tệp ví dụ: *.proxy.pac* Ở đâu đó (Tôi sử dụng thư mục $home Của mình)

Bước 2: dán mã này (ví dụ với cổng 8000):

function FindProxyForURL(url, Host) {
  if (shExpMatch(Host, "*localhost")) {
    return "PROXY localhost:8000";
  }
  return "DIRECT";
}

Bước 3 : Làm cho Trình duyệt của bạn sử dụng tệp PAC này.

Video Youtube cho PAC & Firefox

Bước 4 : Bây giờ bạn có thể kiểm tra ứng dụng của mình bằng cách truy cập: http://mysubdomain.localhost/

Bước 5: Tận hưởng :)

11
Bijan

Tôi đã dọn dẹp một dự án cũ của tôi:

https://github.com/airtonix/avahi-aliases

yêu cầu:

  • linux nơi avahi và python-avahi có thể cài đặt được
  • bạn ổn với tên miền .local (avahi không hỗ trợ bất kỳ loại nào khác)

Ưu điểm khi sử dụng dnsmasq hoặc python dns proxy:

  • những người dùng avahi/bonjour khác trên mạng cục bộ của bạn có thể giải quyết các bí danh bạn tạo và thông báo cho mạng (với điều kiện bạn cho phép truy cập vào cổng 5353)
5
airtonix

Bạn không thể sử dụng ký tự đại diện trong /etc/hosts.

Hãy xem tại đây để có hướng dẫn tốt về cách thực hiện trên OS X bằng BIND, máy chủ DNS tích hợp nhưng không hoạt động và Apache.

4
Trevor

Giải pháp dựa trên DNS này hoạt động hoàn hảo trong trường hợp của tôi, không cần cài đặt bất cứ thứ gì: https://Gist.github.com/fedir/04e60d679d5657d1f9f9aa10b3168282 (Mac OSX 10.9)

4
Fedir RYKHTIK

Nếu bạn muốn sử dụng dnsmasq với NetworkManager bạn có thể (hoặc thậm chí phải?) Bắt đầu dnsmasq từ NetworkManager bằng cách thêm

dns=dnsmasq

đến /etc/NetworkManager/NetworkManager.conf. Sau đó, cấu hình dnsmasq chuyển đến /etc/NetworkManager/dnsmasq.conf hoặc là /etc/NetworkManager/dnsmasq.d/ kính trọng.

3
TNT

Một nhiệm vụ phổ biến cho chủ đề này là ánh xạ các thư mục đến các tên miền phụ. Một cách rất đơn giản cho việc đó là tự động nối các mục dựa trên thư mục vào tệp máy chủ:

#!/usr/bin/python [.__.] [.__.] nhập os [.__.] [.__.] hostsFile = open ("/ etc/hosts", "a +"); [.__. ] [.__.] lines = hostsFile.readlines () [.__.] [.__.] cho fileName trong os.listdir ('/ opt/subsomainDirs'): [.__.] [.__.] entryExists = Sai [.__.] Cho dòng trong dòng: [.__.] Nếu fileName trong dòng: [.__.] EntryExists = True [.__.] [.__.] Nếu không entryExists: [.__.] HostFile. write ("127.0.0.1" + fileName + ".localhost\n"); [.__.]
2
Lukas Glowania

dnsmasq làm việc cho tôi, ngoại trừ tôi phải thực hiện một số bước bổ sung.

Đây là thủ tục đầy đủ:

  1. Chuẩn bị /etc/resolv.conf với dòng sau

    nameserver 127.0.0.1
    
  2. Thêm các dòng sau vào /etc/dnsmasq.conf

    listen-address=127.0.0.1
    address=/localhost.localdomain/127.0.0.1
    address=/localhost/127.0.0.1
    
  3. Khởi động lại dnsmasq

2
jbangerter

Câu trả lời ngắn:

Tập tin/etc/hosts/của bạn sẽ không cho phép bạn sử dụng ký tự đại diện hoặc số cổng. Bạn sẽ cần tạo một mục nhập cho mỗi tên miền phụ của bạn

2
Marcos Placona

Câu trả lời ngắn gọn là bạn không. Câu trả lời dài hơn là bạn cần phải rõ ràng hơn về những gì bạn mong muốn thực sự đạt được, bởi vì có lẽ có một cách tốt hơn và một cách khác để đạt được nó.

Đối với lưu trữ web (tôi chưa bao giờ thấy nó được sử dụng theo cách khác) được thực hiện trong DNS kết hợp với máy chủ web nhận biết lưu trữ ảo. Để biết thêm thông tin về bản ghi DNS ký tự đại diện (Wikipedia) và một bài viết Lưu trữ ký tự đại diện với Apache và Bind cho Linux bằng liên kết và Apache.

Tệ nhất, bạn có thể sử dụng máy chủ DNS cục bộ mà tôi cho là.

2
mctylr

Cảm ơn bạn tschundeee vì những gì tôi coi là câu trả lời cuối cùng cho vấn đề này, ước gì tôi chỉ có thể nhận xét nhưng đây là tổng cấu hình cho những người đang cố gắng hoàn thành mục tiêu ban đầu (tất cả các ký tự đại diện chỉ vào cùng một cơ sở mã - không cài đặt gì , XAMPP)

lưu trữ tập tin (thêm một mục)

tập tin:/etc/hosts (không phải windows)

127.0.0.1   example.local

cấu hình httpd.conf (bật vhost)

tệp: /XAMPP/etc/httpd.conf

# Virtual hosts
Include etc/extra/httpd-vhosts.conf

cấu hình httpd-vhosts.conf

tệp: XAMPP/etc/thêm/httpd-vhosts.conf

<VirtualHost *:80>
    ServerAdmin [email protected]
    DocumentRoot "/path_to_XAMPP/htdocs"
    ServerName example.local
    ServerAlias *.example.local
#    SetEnv APP_ENVIRONMENT development
#    ErrorLog "logs/example.local-error_log"
#    CustomLog "logs/example.local-access_log" common
</VirtualHost>

khởi động lại Apache

tạo tập tin pac:

lưu dưới dạng anything.pac bất cứ nơi nào bạn muốn và sau đó tải tệp trong mạng của trình duyệt> proxy> cài đặt auto_configuration (tải lại nếu bạn thay đổi điều này)

function FindProxyForURL(url, Host) {
  if (shExpMatch(Host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}
2
Daniel Jordi