Trong / etc / hosts / file của tôi 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?


169

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

Nếu không thể, làm thế nào để tôi giải quyết vấn đề này? 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. Nó là một devserver Django, 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?


1
Thuộc về siêu người dùng?
Paul R

Tôi biết mọi người nói rằng điều đó là không thể! Nhưng làm thế nào để tôi làm điều đó anyway! Cái gì bên ngoài / etc / hosts / Tôi có thể sử dụng để có được hiệu ứng. Tôi đang thử nghiệm một máy chủ phát triển.
MikeN


Vì hầu hết các câu trả lời đều tập trung vào câu hỏi đầu tiên của bạn (ký tự đại diện tên miền phụ localhost), tôi sẽ trả lời câu hỏi phụ của bạn dưới dạng nhận xét: có, máy chủ Django dev hoàn toàn có khả năng xử lý tên miền phụ localhost, bạn chỉ cần thuyết phục trình duyệt và HĐH của mình để gửi lưu lượng theo cách của mình (sử dụng một trong các giải pháp khác nhau bên dưới)!
hheimbuerger

Câu trả lời:


43

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


Đây là hoàn hảo! Tôi đã tìm kiếm một giải pháp đơn giản như thế này trong một thời gian dài (Làm việc trên OSX Mavericks BTW)
Billy Moon

2
bây giờ, nếu chúng ta chỉ có thể như pip installvậy :)
metakermit

1
Tôi đã cài đặt cái này, làm mọi thứ và chạy nó, nhưng nó không chặn các trang web.
DisplayName

Không thể upvote này đủ. Tôi đã cần điều này mãi mãi, tình cờ tìm thấy câu hỏi và câu trả lời quý giá này, và tôi là một hacker của Python, và đây là một mẩu tin gọn gàng. Cám ơn vì đã chia sẻ!
Farley

152

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

address=/localhost.com/127.0.0.1

7
Xuất sắc! Lưu ý đối với người dùng Mac, nó thực sự đơn giản: 1. sudo port install dnsmasq2. chỉnh sửa /opt/local/etc/dnsmasq.conf3.sudo port load dnsmasq
tomc

17
OSX với brew: tương tự như trên nhưng brew cài đặt dnsmasq
Matt Humphrey

1
fyi brew> port (gợi ý @MattHumphrey)
electblake 22/03/13

1
Ví dụ này không phù hợp với tôi, có thể vì tôi đang sử dụng vagrantup.com để phục vụ tại địa phương. Đừng lo lắng, tôi đã thay đổi IP thành đúng 192.168.50.11nhưng DNS không được giải quyết. Bất kỳ ý tưởng nào, ví dụ này có đúng với IP "không phải 127.0.0.1" không?
Brian

6
Mẹo tuyệt vời. Đối với máy tính để bàn Ubuntu 14.04 (chạy dnsmasq theo mặc định), hãy tạo một tệp được gọi /etc/NetworkManager/dnsmasq.d/dnsmasq-localhost.confvà đặt dòng address=/localhost.com/127.0.0.1trong đó, sau đó khởi động lại.
dùng38394

60

Không thể chỉ định ký tự đại diện trong /etc/hoststệp. 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.


15

Bạn cần thiết lập một máy chủ DNS và yêu cầu 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 .


+1 cho dnsmasq, đây thực sự là tài liệu tốt và dễ sử dụng
David Schmitt

dnsmasq không thể làm điều này.
DisplayName

Phần nào của hành vi được mô tả trong --address=phần của trang người đàn ông dnsmasq.conf không bao gồm trường hợp sử dụng mô tả ở trên?
Gerald Combs

11

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

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 một tệp, ví dụ: *.proxy.pac*ở đâu đó (tôi sử dụng $homethư mục 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: Thưởng thức :)


3
Có lẽ điều đáng nói là điều này sẽ chỉ ảnh hưởng đến trình duyệt của bạn. Các chương trình khác (như wget, sẽ không bị ảnh hưởng bởi điều này). Đó không phải là một vấn đề, nhưng có lẽ tốt hơn là đề cập đến vấn đề này.
Willem Van Onsem

Nếu bạn đi theo tuyến đường .pac và bạn đang triển khai máy chủ node.js, bạn sẽ ngạc nhiên khi thấy đây req.urllà một URL tuyệt đối. Điều này được thực hiện bởi vì giả định là bạn muốn viết một máy chủ proxy thực sự, nhưng thật đáng ngạc nhiên nếu bạn đến với kỹ thuật này giống như một cách để dừng thêm / etc / hosts các mục để gỡ lỗi. FYI cho những người có thể đi trên cùng một con đường tôi đã làm.
Tom Boutell

5

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 proxy python dns:

  • 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)

4

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)


Thật là một giải pháp tuyệt vời cho Mac OSX.
iDev247

Liên kết chết, vui lòng cập nhật liên kết của bạn, giải pháp của bạn hoặc bằng cách nào đó không tán thành câu trả lời này. Chúc mừng.
Eric Hodonsky

Xong (đã thêm bản sao lưu)
Fedir RYKHTIK

3

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

Có một cái nhìn ở đây cho một hướng tốt về cách thực hiện trên OS X sử dụng BIND, máy chủ DNS built-in nhưng không hoạt động, và Apache.


5
Apache không có gì để làm với các tên miền phụ.
Ẩn danh

3

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

dns=dnsmasq

để /etc/NetworkManager/NetworkManager.conf. Sau đó, cấu hình dnsmasq đi đến /etc/NetworkManager/dnsmasq.confhoặc /etc/NetworkManager/dnsmasq.d/resp.


2

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
Điều gì sẽ cho phép bạn chỉ định số cổng? Không phải DNS AFAIK.
ptman

2

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ề các bản ghi DNS ký tự đại diện (Wikipedia) và bài viết lưu trữ Wildcard với Apache và Bind cho Linux bằng cách sử dụ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

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 / trăn

nhập khẩu os

hostsFile = open ("/ etc / hosts", "a +");

dòng = hostsFile.readlines ()

cho fileName trong os.listdir ('/ opt / subomainDirs'):

    entryExists = Sai
    cho dòng trong dòng:
        nếu fileName trong dòng:
            entryExists = True  

    nếu không nhậpExists:
        hostsFile.write ("127.0.0.1" + fileName + ".localhost \ n");

2

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 admin@example.local
    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

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 /etc/resolv.confbị 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


Điều này sẽ không hoạt động nếu bản phân phối của bạn sử dụng netplan (ubfox 18.04 Tôi đang nhìn bạn)
MrMesees
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.