Ký tự đại diện trong tệp máy chủ Windows


289

Tôi muốn thiết lập máy phát triển cục bộ của mình để mọi yêu cầu *.localđược chuyển hướng đến localhost. Ý tưởng là khi tôi phát triển nhiều trang web, tôi chỉ có thể thêm vhost vào Apache được gọi site1.local, site2.localv.v. và để tất cả chúng giải quyết localhost, trong khi Apache phục vụ một trang web khác theo đó.

Tôi đang dùng Windows XP.

Tôi đã thử thêm

127.0.0.1       *.local

vào c:\windows\system32\drivers\etc\hoststập tin của tôi , cũng đã thử:

127.0.0.1       .local

Cả hai dường như không hoạt động.

Tôi biết tôi có thể thiết lập chúng trên các số cổng khác nhau, nhưng đó là một nỗi đau vì thật khó để nhớ đó là cổng nào.

Tôi không muốn phải thiết lập một máy chủ DNS cục bộ hoặc bất cứ điều gì khó khăn, bất kỳ đề xuất nào?


1
Xin vui lòng sử dụng anysubdomain.reconn.co.uk như một công việc xung quanh (nếu bạn đang trực tuyến), điều này sẽ luôn luôn trỏ đến localhost của bạn (xem câu trả lời của tôi dưới đây).
Paul Grimshaw

Điều gì về một tập lệnh phân tích cú pháp apache vhosts ServerName và cập nhật tệp máy chủ?
Elvis Ciotti

1
Tôi tin rằng * .local có ngữ nghĩa đặc biệt và bạn nên sử dụng một cái gì đó không tồn tại. Tôi sử dụng * .dev vì tôi không nghĩ đó là sự thật.
WraithKenny

Câu trả lời:


431

Proxy DNS acrylic (miễn phí, mã nguồn mở) thực hiện công việc. Nó tạo ra một máy chủ DNS proxy (trên máy tính của riêng bạn) với tệp máy chủ riêng. Các tập tin máy chủ chấp nhận ký tự đại diện.

Tải xuống từ trang web chính thức

http://mayakron.altervista.org/support/browse.php?path=Acrylic&name=Home

Cấu hình Proxy DNS DNS

Để định cấu hình Proxy DNS acrylic, cài đặt nó từ liên kết trên, sau đó truy cập:

  1. Khởi đầu
  2. Chương trình
  3. Proxy DNS acrylic
  4. Cấu hình
  5. Chỉnh sửa tệp máy chủ lưu trữ tùy chỉnh (Acrylichosts.txt)

Thêm các dòng folowing ở cuối tập tin:

127.0.0.1   *.localhost
127.0.0.1   *.local
127.0.0.1   *.lc

Khởi động lại dịch vụ Proxy DNS DNS:

  1. Khởi đầu
  2. Chương trình
  3. Proxy DNS Acrilic
  4. Cấu hình
  5. Khởi động lại dịch vụ acrylic

Bạn cũng sẽ cần điều chỉnh cài đặt DNS trong cài đặt giao diện mạng của mình:

  1. Khởi đầu
  2. Bảng điều khiển
  3. Mạng và Internet
  4. Kết nối mạng
  5. Thuộc tính kết nối khu vực địa phương
  6. TCP / IPv4

Đặt "Sử dụng địa chỉ máy chủ DNS sau":

Preferred DNS Server: 127.0.0.1

Nếu sau đó bạn kết hợp câu trả lời này với câu trả lời (sử dụng VirtualDocumentRoot) của jeremyasnyder, thì bạn có thể tự động thiết lập tên miền / máy chủ ảo bằng cách tạo thư mục.


12
Nói rõ hơn, "tệp máy chủ tùy chỉnh" là Acrylichosts.txt, không phải là AcrylicConfiguration.ini. Có lẽ điều đó là hiển nhiên, nhưng nó làm tôi bối rối trong một thời gian.
mhenry1384

@Petah - cấu hình chính xác này đã hoạt động với tôi với các tên miền ký tự đại diện, nhưng nó chỉ dừng lại và tôi không thể hiểu tại sao. Tất cả các yêu cầu trả về "Trang này không có sẵn". Đã khởi động lại Acryllic, thiết lập lại tất cả bộ nhớ cache ... bạn nghĩ nó có thể là gì khác?
SB2055

1
@ SB2055 kiểm tra cài đặt DNS của bạn trong thuộc tính mạng của bạn vẫn đúng.
Petah

Cần lưu ý rằng Acrylic không phù hợp với tình huống môi trường mạng của bạn thay đổi thường xuyên. Máy chủ DNS công cộng của Google sẽ không giải quyết tên máy thực trong mạng của bạn ... và bạn có thể sửa lỗi đó cho một mạng, nhưng bạn vẫn không thể giải quyết tên máy nội bộ khi bạn truy cập mạng khác. Điều này có thể đặc biệt đau đớn. Nhưng tôi cũng nên chỉ ra rằng tôi không biết mọi thứ cần biết về Acrylic.
Alexoupko

Nếu điều này được thực hiện trong một VM, thì PrimaryServerAddresstrong cấu hình (không phải tệp máy chủ) nên được thay đổi từ mặc định thành mặc định 8.8.8.8mà máy chủ cung cấp. Trong VirtualBox, đây là 10.0.2.3.
mightyiam

80

Để trả lời câu hỏi của bạn, bạn không thể sử dụng ký tự đại diện trong tệp máy chủ trong Windows.

Tuy nhiên, nếu bạn chỉ muốn thay đổi tệp máy chủ để làm cho các trang web mới hoạt động .... bạn có thể định cấu hình Apache của mình như thế này và bạn không phải tiếp tục chỉnh sửa cấu hình của nó:

http://postpostmodern.com/in cảnal/a-smarter-mamp/

Về cơ bản một bản tóm tắt nhanh dựa trên thiết lập của tôi, hãy thêm phần sau vào tệp apache.conf của bạn:

 LoadModule vhost_alias_module modules/mod_vhost_alias.so

 NameVirtualHost *:80

  <Directory "/xampp/sites">
      Options Indexes FollowSymLinks Includes ExecCGI
      AllowOverride All
      Order allow,deny
      Allow from all 
  </Directory>

  <VirtualHost *:80>
      VirtualDocumentRoot c:/xampp/sites/%-1/%-2+/
  </VirtualHost>

Điều này cho phép tôi thêm một mục như:

127.0.0.1       test.dev

và sau đó tạo thư mục, c: \ xampp \ site \ dev \ test và đặt các tệp cần thiết vào đó và nó chỉ hoạt động.

Tùy chọn khác là sử dụng <Directory>các thẻ trong apache.conf và tham chiếu các trang từ http: // localhost / project / .


Bạn có thể sử dụng ký tự đại diện trên OSX không?
cjm2671


30

Tôi không nghĩ rằng nó có thể.

Dù sao, bạn phải sửa đổi các mục nhập apro virtualroot mỗi khi bạn thêm một trang web và vị trí mới, vì vậy việc đồng bộ hóa tên mới vào tệp vhost của Windows không phải là một công việc lớn.

Cập nhật: vui lòng kiểm tra câu trả lời tiếp theo và các ý kiến ​​về câu trả lời này. Câu trả lời này đã 6 tuổi và không còn đúng nữa.


3
Nhưng khi sử dụng Nginx, không cần thiết phải thay đổi tệp cấu hình của Nginx để thêm một nhóm tên miền cấp hai mới * .localhost. Vì vậy, đó là điểm trừ của tệp máy chủ.
sergzach

8
Chỉ cần chỉ ra rằng khi bạn có một trang web đa ngôn ngữ, bạn có thể có <Virtualhost> với ServerAlias *.mydomain.localhost( *là mã ngôn ngữ), để bạn không phải chỉnh sửa httpd.conf mỗi khi bạn thêm ngôn ngữ mới; nhưng bạn vẫn cần thêm tên miền phụ vào tệp máy chủ, do đó có liên quan đến câu hỏi ở trên.
Benjamin

10
Máy chủ ảo động là từ khóa ở đây và được hầu hết các máy chủ hỗ trợ, tức là Apache và Nginx. Vì vậy, không, bạn chắc chắn không phải chạm vào cấu hình Apache của mình mỗi khi bạn tạo dự án.
Valentin Klinghammer

2
Chúng ta cũng có thể có các máy chủ ảo ký tự đại diện, nó chỉ xuống hoststập tin thực sự
ericn

6

Để thêm vào các đề xuất tuyệt vời đã có ở đây, XIP.IO là một máy chủ DNS ký tự đại diện tuyệt vời có sẵn công khai.

      myproject.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
  other.project.127.0.0.1.xip.io  -- resolves to -->   127.0.0.1
   other.machine.10.0.0.1.xip.io  -- resolves to -->   10.0.0.1

(Khả năng chỉ định địa chỉ không lặp lại là tuyệt vời để thử nghiệm các trang web trên thiết bị iOS nơi bạn không thể truy cập tệp máy chủ.)

Nếu bạn kết hợp điều này với một số cấu hình Apache được đề cập trong các câu trả lời khác, bạn có khả năng có thể thêm Virtualhost với thiết lập bằng không .


Và nó hoạt động cho các thành viên trong nhóm của bạn trong trường hợp IP trong mạng LAN của bạn. Họ không phải cài đặt máy chủ DNS cục bộ có cùng tệp máy chủ.
Tobias Uhmann

4

Tôi tìm thấy một bài đăng về Sử dụng tệp Windows Hosts cũng cho biết "Không cho phép ký tự đại diện."

Trước đây, tôi chỉ thêm các mục bổ sung vào tệp máy chủ, bởi vì (như đã nói trước đây), đó không phải là công việc thêm khi bạn đang chỉnh sửa tệp cấu hình apache.


Bạn tạo tập tin lưu trữ càng lâu thì càng mất nhiều thời gian để giải quyết các yêu cầu. Không phải là một giải pháp tốt nếu bạn có nhiều mục.
cchamberlain

4

Chỉnh sửa tập tin máy chủ sẽ bớt khó khăn hơn khi bạn chạy "ipconfig / flushdns" từ dấu nhắc lệnh của windows, thay vì khởi động lại máy tính của bạn.


1
nó không xóa bộ nhớ cache của trình duyệt, nhưng cửa sổ. Vì vậy, anh ta phải chờ 20-30 phút để trình duyệt phát hành bộ nhớ đệm dns.
Jacob Melvad Jensen

3

Bạn có thể nói với quản trị viên mạng của mình để thiết lập tên miền cho bạn (giả sử 'evilpuppetmaster.hell') và có ký tự đại diện ở đó để mọi thứ (* .evilpuppetmaster.hell ') phân giải thành IP của bạn


1
Cảm ơn nhưng đây là trên một máy chủ nhà, không có DNS hoặc quản trị viên mạng khả dụng.
EvilPuppetMaster

OK, có thể bạn có quyền truy cập vào một tên miền hoặc biết ai đó làm điều đó? Ví dụ: * .evilpuppetmatser.arealdomain.com
Stu Thompson

Không hẳn vậy. Mặc dù vậy, đây là một máy gia đình nên nó nhận được IP mới mỗi khi bộ định tuyến của tôi kết nối với internet. Một máy chủ DNS bên ngoài sẽ không giúp đỡ.
EvilPuppetMaster

1
1) Không có lý do * .evilpuppetmatser.arealdomain.com không thể giải quyết thành 127.0.0.1, 2) Tôi không đề xuất máy chủ DNS bên ngoài. Tôi đề nghị bạn nên sử dụng tên miền phụ trên tên miền thực. Về mặt kỹ thuật, bất kỳ ai cũng có thể giải quyết server.evp.arealdomain.com.
Stu Thompson

3
Ngoài ra còn có một số công khai như * .127.0.0.1.xip.io và những người khác
Dave James Miller

3

Chúng tôi đã làm việc này bằng cách sử dụng DNS ký tự đại diện trong máy chủ DNS cục bộ của mình: thêm Abản ghi giống như*.local -> 127.0.0.1

Tôi nghĩ rằng cài đặt mạng của bạn sẽ cần phải có hậu tố tên miền được chọn trong danh sách tìm kiếm hậu tố tên miền cho các máy trên mạng, vì vậy bạn có thể muốn thay thế .localbằng tên miền nội bộ của công ty (ví dụ .int) và sau đó thêm tên miền phụ .localhost.intđể làm rõ để làm gì

Vì vậy, *.localhost.intsẽ giải quyết 127.0.0.1cho tất cả mọi người trên mạng và cài đặt tệp cấu hình cho tất cả các nhà phát triển sẽ "chỉ hoạt động" nếu các điểm cuối tắt tên miền phụ đó site1.localhost.int, ví dụ , site2.localhost.intĐây là khá nhiều lược đồ chúng tôi đã giới thiệu.

dnsmasq cũng có vẻ tốt, nhưng tôi chưa thử: http://ihaveabackup.net/2012/06/11/USE-wildcards-in-the-hosts-file/



2

Bạn có thể dùng thử Angryhost , cung cấp cách hỗ trợ ký tự đại diện và biểu thức chính quy. Trên thực tế, đó là một phần mềm quản lý và tăng cường tập tin máy chủ.
Nhiều tính năng có thể được xem @ http://angryhosts.com/features/


2

Tôi đang sử dụng DNSChef để làm điều đó.

https://thesprawl.org/projects/dnschef/

Bạn phải tải xuống ứng dụng, trong Linux hoặc Mac, bạn cần python để chạy nó. Windows có exe riêng của họ.

Bạn phải tạo một tệp ini với các mục dns của bạn, ví dụ

[A]
*.google.com=192.0.2.1
*.local=127.0.0.1
*.devServer1.com=192.0.2.3

Sau đó, bạn phải khởi chạy ứng dụng dns với quyền quản trị viên

sudo python dnschef.py --file myfile.ini -q

hoặc trong cửa sổ

runas dnschef.exe --file myfile.ini -q

Cuối cùng, bạn cần thiết lập làm DNS duy nhất cho môi trường máy chủ cục bộ của mình (mạng, giao diện, dns hoặc tương tự hoặc trong linux /etc/resolv.conf).

Đó là nó


2

Tôi đã thực hiện công cụ đơn giản này để thay thế máy chủ. Biểu thức thông thường được hỗ trợ. https://github.com/stackia/DNSAgent

Một cấu hình mẫu:

[
    {
        "Pattern": "^.*$",
        "NameServer": "8.8.8.8"
    },
    {
        "Pattern": "^(.*\\.googlevideo\\.com)|((.*\\.)?(youtube|ytimg)\\.com)$",
        "Address": "203.66.168.119"
    },
    {
        "Pattern": "^.*\\.cn$",
        "NameServer": "114.114.114.114"
    },
    {
        "Pattern": "baidu.com$",
        "Address": "127.0.0.1"
    }
]

0

Tôi không thể tìm thấy lệnh cấm bằng văn bản, nhưng theo quy ước, tệp máy chủ Windows theo sát tệp máy chủ UNIX và bạn không thể đặt tham chiếu tên máy chủ ký tự đại diện vào tệp đó.

Nếu bạn đọc trang người đàn ông, nó nói:

DESCRIPTION
     The hosts file contains information regarding the known hosts on the net-
     work.  For each host a single line should be present with the following
     information:

           Internet address
           Official host name
           Aliases

Mặc dù nó nói,

     Host names may contain any printable character other than a field delim-
     iter, newline, or comment character.

Điều đó không đúng từ cấp độ thực tế.

Về cơ bản, mã nhìn vào tệp / etc / hosts không hỗ trợ mục nhập ký tự đại diện.

Cách giải quyết là tạo trước tất cả các mục, có thể sử dụng tập lệnh để đặt vài trăm mục cùng một lúc.


0

@petah và Proxy DNS Acrylic là câu trả lời tốt nhất và cuối cùng, anh ta tham khảo khả năng thực hiện nhiều trang web bằng cách sử dụng một Apache mà @jeremyasnyder mô tả sâu hơn một chút ...

... tuy nhiên, trong trường hợp của chúng tôi, chúng tôi đang thử nghiệm một hệ thống lưu trữ nhiều bên thuê và vì vậy hầu hết các tên miền mà chúng tôi muốn kiểm tra đều giống nhau virtualhost, trong khi một vài tên miền khác được hướng đến nơi khác.

Vì vậy, trong trường hợp của chúng tôi, bạn chỉ cần sử dụng các ký tự đại diện regex trong ServerAliaschỉ thị, như vậy ...

ServerAlias *.foo.local

0

Dưới đâ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 (ký tự đại diện trong môi trường dev, tức là XAMPP - ví dụ này giả định tất cả các trang web trỏ đến cùng một cơ sở mã)

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

tệp:% SystemRoot% \ system32 \ driver \ etc \ hosts

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";
}

Chưa hoạt động, chưa biết về PAC nhưng dòng này 'trả về "PROXY example.local";' Sẽ không trả lại một ip proxy: cổng được trình duyệt sử dụng làm proxy?
Iovy

0

Bạn có thể sử dụng echoipdns cho việc này ( https://github.com/zapty/echoipdns ).

Bằng cách chạy echoipdns local tất cả các yêu cầu cho tên miền phụ .local được chuyển hướng đến 127.0.0.1, do đó, bất kỳ tên miền nào có xyz.local, v.v. sẽ giải quyết thành 127.0.0.1. Bạn có thể sử dụng bất kỳ hậu tố khác cũng chỉ cần thay thế địa phương với tên bạn muốn.

Echoipdns thậm chí còn mạnh hơn, khi bạn muốn sử dụng url của mình từ các máy khác trong mạng, bạn vẫn có thể sử dụng nó với cấu hình bằng không.

Ví dụ: Nếu địa chỉ IP máy của bạn là 192.168.1.100, bây giờ bạn có thể sử dụng tên miền xyz.192-168-1-100.local sẽ luôn phân giải thành 192.168.1.100. Phép thuật này được thực hiện bởi echoipdns bằng cách xem địa chỉ IP trong phần thứ hai của tên miền và trả về cùng một địa chỉ IP trên truy vấn DNS. Bạn sẽ phải chạy echoipdns trên máy mà bạn muốn truy cập hệ thống từ xa.

echoipdns cũng có thể được thiết lập dưới dạng proxy DNS độc lập, do đó, chỉ cần trỏ đến DNS này, giờ đây bạn có thể sử dụng tất cả các lợi ích trên mà không cần chạy lệnh đặc biệt mỗi lần và thậm chí bạn có thể sử dụng nó từ thiết bị di động.

Vì vậy, về cơ bản, điều này đơn giản hóa việc phát triển DNS dựa trên miền ký tự đại diện cho môi trường nhóm cũng như cục bộ.

echoipdns hoạt động trên Mac, Linux và Windows.

LƯU Ý: Tôi là tác giả cho echoipdns.


0

Cấu hình cho tên miền phụ tự động cấu hình nginx với Proxy DNS Acrylic

tập tin auto.conf cho thư mục trang web nginx của bạn

server {
    listen 80;
    server_name ~^(?<branch>.*)\.example\.com;
    root /var/www/html/$branch/public;  

    index index.html index.htm index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_log  /var/log/nginx/$branch.error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
       try_files $uri /index.php =404;
       fastcgi_pass php-fpm:9000;
       fastcgi_index index.php;
       fastcgi_buffers 16 16k;
       fastcgi_buffer_size 32k;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Thêm vào tập tin máy chủ acrylic 127.0.0.1 example.com *.example.comvà khởi động lại dịch vụ Acrylic. $ chi nhánh - tên miền phụ của bạn.

Đặt thay vì root / var / www / html / $ chi nhánh / công khai; con đường dự án của bạn


0

Điều này có thể được thực hiện bằng cách sử dụng Pi-Hole , chỉ cần chỉnh sửa "/ etc / hosts" và khởi động lại dịch vụ dns.

nano /etc/hosts
pihole restartdns

Thí dụ:

127.0.1.1       raspberrypi
192.168.1.1     w1.dev.net
192.168.1.2     w2.dev.net
192.168.1.3     w3.dev.net

-1

Bạn có thể sử dụng máy khách DNS động như http://www.no-ip.com . Sau đó, với máy chủ DNS bên ngoài CNAME * .mydomain.com đến mydomain.no-ip.com.


2
điều đó sẽ giải quyết với ip bên ngoài của bạn và thông thường sẽ chỉ hiển thị trang cấu hình bộ định tuyến / modem của bạn
Sam

-1

Mặc dù bạn không thể thêm ký tự đại diện như vậy, nhưng bạn có thể thêm danh sách đầy đủ các trang web mà bạn cần, ít nhất là để thử nghiệm, hoạt động đủ tốt cho tôi, trong tệp lưu trữ của bạn, bạn chỉ cần thêm:

127.0.0.1 site1.local
127.0.0.1 site2.local
127.0.0.1 site3.local
...


Tôi nghĩ rằng poster ban đầu đang cố gắng tránh những rắc rối của bước này.
Simon East
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.