سؤال

أرغب في إعداد جهاز التطوير المحلي الخاص بي حتى يتم الرد على أي طلبات *.local يتم إعادة توجيهها إلى localhost.الفكرة هي أنه عندما أقوم بتطوير مواقع متعددة، يمكنني فقط إضافة مضيفات افتراضية إلى Apache تسمى site1.local, site2.local الخ، واجعلهم جميعا يقررون ذلك localhost, ، بينما يخدم Apache موقعًا مختلفًا وفقًا لذلك.

أنا على نظام التشغيل Windows XP.

حاولت الإضافة

127.0.0.1       *.local

لي c:\windows\system32\drivers\etc\hosts الملف، حاول أيضًا:

127.0.0.1       .local

لا يبدو أن أيًا منهما يعمل.

أعلم أنه يمكنني إعدادها على أرقام منافذ مختلفة، ولكن هذا أمر مؤلم لأنه من الصعب تذكر أي منفذ هو.

لا أريد أن أقوم بإعداد خادم DNS محلي أو أي شيء صعب، هل لديك أي اقتراحات؟

هل كانت مفيدة؟

المحلول

يقوم وكيل DNS الأكريليكي (مجاني ومفتوح المصدر) بهذه المهمة.يقوم بإنشاء خادم DNS وكيل (على جهاز الكمبيوتر الخاص بك) مع ملف المضيفين الخاص به.يقبل ملف المضيفين أحرف البدل.

تحميل من الموقع الرسمي

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

تكوين وكيل DNS الاكريليك

لتكوين وكيل DNS أكريليك، قم بتثبيته من الرابط أعلاه ثم انتقل إلى:

  1. يبدأ
  2. البرامج
  3. وكيل DNS الاكريليك
  4. التكوين
  5. تحرير ملف المضيفين المخصص (AcrylicHosts.txt)

أضف الأسطر التالية في نهاية الملف:

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

أعد تشغيل خدمة وكيل DNS الأكريليك:

  1. يبدأ
  2. البرامج
  3. وكيل DNS أكريليك
  4. التكوين
  5. أعد تشغيل خدمة الأكريليك

ستحتاج أيضًا إلى ضبط إعداد DNS الخاص بك في إعدادات واجهة الشبكة لديك:

  1. يبدأ
  2. لوحة التحكم
  3. شبكة تواصل وانترنت
  4. اتصالات الشبكة
  5. خصائص الاتصال بالمنطقة المحلية
  6. تكب/IPv4

اضبط "استخدام عنوان خادم DNS التالي":

Preferred DNS Server: 127.0.0.1

إذا قمت بعد ذلك بدمج هذه الإجابة مع إجابة jeremyasnyder (باستخدام VirtualDocumentRoot) يمكنك بعد ذلك إعداد المجالات/المضيفين الظاهريين تلقائيًا بمجرد إنشاء دليل.

نصائح أخرى

للإجابة على سؤالك، لا يمكنك استخدام أحرف البدل في ملف المضيفين ضمن Windows.

ومع ذلك، إذا كنت تريد تغيير ملف المضيفين فقط لتشغيل المواقع الجديدة....يمكنك تكوين Apache الخاص بك على هذا النحو ولن تضطر إلى الاستمرار في تعديل تكوينه:

http://postpostmodern.com/instructional/a-smarter-mamp/

في الأساس، ملخص سريع يعتمد على الإعداد الخاص بي، أضف ما يلي إلى ملف apache.conf الخاص بك:

 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>

هذا يسمح لي بإضافة إدخال مثل:

127.0.0.1       test.dev

ثم قم بإنشاء الدليل c:\xampp\sites\dev est ووضع الملفات الضرورية هناك وسيعمل تمامًا.

الخيار الآخر هو الاستخدام <Directory> العلامات في apache.conf والإشارة إلى الصفحات من http://localhost/project/.

لا أعتقد أن هذا ممكن.

يتعين عليك على أي حال تعديل إدخالات Apache virtualroot في كل مرة تقوم فيها بإضافة موقع وموقع جديدين، لذلك ليس من الصعب مزامنة الاسم الجديد مع ملف Windows vhost.

تحديث:يرجى التحقق من الإجابة التالية والتعليقات على هذه الإجابة.هذه الإجابة عمرها 6 سنوات ولم تعد صحيحة.

للإضافة إلى الاقتراحات الرائعة الموجودة هنا بالفعل، XIP.IO هو خادم DNS رائع ومتاح للعامة.

      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

(تعد القدرة على تحديد عناوين غير قابلة للاسترجاع أمرًا رائعًا لاختبار المواقع على أجهزة iOS حيث لا يمكنك الوصول إلى ملف المضيفين.)

إذا قمت بدمج هذا مع بعض تكوينات Apache المذكورة في الإجابات الأخرى، فمن المحتمل أن تتمكن من إضافة VirtualHosts مع الإعداد صفر.

لقد وجدت منشورا حول باستخدام ملف Windows Hosts الذي يقول أيضًا "غير مسموح بأحرف البدل."

في الماضي، قمت للتو بإضافة الإدخالات الإضافية إلى ملف المضيفين، لأنه (كما قلنا سابقًا)، لا يتطلب الأمر الكثير من العمل الإضافي عندما تقوم بالفعل بتحرير ملف تكوين Apache.

يعد تحرير ملف المضيفين أقل صعوبة عند تشغيل "ipconfig /flushdns" من موجه أوامر Windows، بدلاً من إعادة تشغيل جهاز الكمبيوتر الخاص بك.

يمكنك التحدث مع مسؤول الشبكة الخاص بك لإعداد مجال لك (على سبيل المثال "evilpuppetmaster.hell") والحصول على حرف البدل هناك بحيث يتم حل كل شيء (*.evilpuppetmaster.hell') إلى عنوان IP الخاص بك

لدينا هذا العمل باستخدام بدل DNS في خادم DNS المحلي لدينا:إضافة A تسجيل شيء من هذا القبيل *.local -> 127.0.0.1

أعتقد أن إعدادات الشبكة الخاصة بك ستحتاج إلى وجود لاحقة المجال المختارة في قائمة البحث عن لاحقة المجال للأجهزة الموجودة على الشبكة، لذلك قد ترغب في استبدالها .local مع المجال الداخلي لشركتك (على سبيل المثال. .int) ثم قم بإضافة نطاق فرعي مثل .localhost.int لتوضيح الغرض منه.

لذا *.localhost.int سوف تحل ل 127.0.0.1 للجميع على الشبكة، وستعمل إعدادات ملف التكوين لجميع المطورين "فقط" إذا توقفت نقاط النهاية عن هذا النطاق الفرعي، على سبيل المثال. site1.localhost.int, site2.localhost.int هذا هو إلى حد كبير المخطط الذي قدمناه.

com.dnsmasq يبدو جميلاً أيضاً، لكني لم أجربه بعد:http://ihaveabackup.net/2012/06/28/using-wildcards-in-the-hosts-file/

لقد كتبت وكيل DNS بسيط في بايثون.سوف يقرأ إدخالات أحرف البدل في /etc/hosts.انظر هنا: http://code.google.com/p/marlon-tools/source/browse/tools/dnsproxy/dnsproxy.py

لقد قمت باختبار نظامي التشغيل Linux وMac OS X، لكن لم أقم بإجراء الاختبار بعد على Windows.

يمكنك المحاولة AngryHosts, ، والتي توفر وسيلة لدعم أحرف البدل والتعبير العادي.في الواقع، إنه برنامج لتحسين وإدارة ملفات المضيفين.
يمكن رؤية المزيد من الميزات @ http://angryhosts.com/features/

أنا أستخدم DNSChef للقيام بذلك.

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

يجب عليك تنزيل التطبيق، في Linux أو Mac تحتاج إلى لغة python لتشغيله.ويندوز لديها إكس الخاصة بهم.

يجب عليك إنشاء ملف ini يتضمن إدخالات DNS الخاصة بك، على سبيل المثال

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

ثم يجب عليك تشغيل تطبيق DNS بامتيازات المسؤول

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

أو في النوافذ

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

أخيرًا، تحتاج إلى إعداد بيئة المضيف المحلية الخاصة بك كـ DNS الوحيد (الشبكة أو الواجهة أو نظام أسماء النطاقات أو ما شابه ذلك أو في linux /etc/resolv.conf).

هذا كل شيء

لقد صنعت هذه الأداة البسيطة لتحل محل المضيفين.يتم دعم التعبيرات العادية.https://github.com/stackia/DNSAgent

تكوين عينة:

[
    {
        "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"
    }
]

لم أتمكن من العثور على حظر كتابي، ولكن وفقًا للاتفاقية، فإن ملف مضيفي Windows يتبع عن كثب ملف مضيف UNIX، ولا يمكنك وضع مراجع اسم مضيف أحرف البدل في هذا الملف.

إذا قرأت صفحة الرجل تقول:

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

على الرغم من أنه يقول،

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

وهذا غير صحيح من المستوى العملي.

بشكل أساسي، الكود الذي ينظر إلى الملف /etc/hosts لا يدعم إدخال حرف البدل.

الحل البديل هو إنشاء كافة الإدخالات مقدمًا، وربما استخدام برنامج نصي لوضع بضع مئات من الإدخالات مرة واحدة.

يعد @petah و Acrylic DNS Proxy أفضل إجابة، وفي النهاية يشير إلى القدرة على القيام بمواقع متعددة باستخدام Apache الذي يصفه @jeremyasnyder قليلاً ...

...ومع ذلك، في حالتنا نحن نختبر نظام استضافة متعدد المستأجرين وما إلى ذلك معظم المجالات التي نريد اختبارها تذهب إلى نفس الشيء virtualhost, ، بينما يتم توجيه زوجين آخرين إلى مكان آخر.

لذلك، في حالتنا، يمكنك ببساطة استخدام أحرف البدل regex في ملف ServerAlias التوجيه مثل ذلك ...

ServerAlias *.foo.local

فيما يلي التكوين الإجمالي لأولئك الذين يحاولون تحقيق الهدف (أحرف البدل في بيئة التطوير، مثل XAMPP - يفترض هذا المثال أن جميع المواقع تشير إلى نفس قاعدة التعليمات البرمجية)

ملف المضيفين (إضافة إدخال)

ملف:%SystemRoot%\system32\drivers\etc\hosts

127.0.0.1   example.local

تكوين httpd.conf (تمكين vhosts)

ملف:\XAMPP\etc\httpd.conf

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

تكوين httpd-vhosts.conf

ملف:XAMPP\etc\extra\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>

إعادة تشغيل أباتشي

إنشاء ملف باك:

احفظ باسم What.pac أينما تريد ثم قم بتحميل الملف في شبكة المتصفح> الوكيل> إعدادات التكوين التلقائي (أعد التحميل إذا قمت بتغيير هذا)

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*example.local")) {
    return "PROXY example.local";
  }
  return "DIRECT";
}

يمكنك استخدام echoipdns لهذا (https://github.com/zapty/echoipdns).

عن طريق الركض echoipdns local تتم إعادة توجيه جميع طلبات النطاقات الفرعية .local إلى 127.0.0.1، لذا فإن أي نطاق به xyz.local وما إلى ذلك سيتم حله إلى 127.0.0.1.يمكنك استخدام أي لاحقة أخرى، فقط استبدل الاسم المحلي بالاسم الذي تريده.

يعد Echoipdns أكثر قوة، فعندما تريد استخدام عنوان url الخاص بك من أجهزة أخرى في الشبكة، فلا يزال بإمكانك استخدامه بدون أي تكوين.

على سبيل المثال.إذا كان عنوان IP لجهازك هو 192.168.1.100، فيمكنك الآن استخدام اسم المجال xyz.192-168-1-100.local والذي سيتحول دائمًا إلى 192.168.1.100.يتم تنفيذ هذا السحر بواسطة echoipdns من خلال النظر إلى عنوان IP في الجزء الثاني من اسم المجال وإرجاع نفس عنوان IP عند استعلام DNS.سيكون عليك تشغيل echoipdns على الجهاز الذي تريد الوصول منه إلى النظام البعيد.

يمكن أيضًا إعداد echoipdns كوكيل DNS مستقل، لذلك بمجرد الإشارة إلى DNS هذا، يمكنك الآن استخدام جميع المزايا المذكورة أعلاه دون تشغيل أمر خاص في كل مرة، ويمكنك حتى استخدامه من الأجهزة المحمولة.

لذا فإن هذا يبسط بشكل أساسي تطوير DNS المستند إلى مجال البدل للبيئة المحلية وكذلك لبيئة الفريق.

يعمل echoipdns على أنظمة Mac، وLinux، وWindows.

ملحوظة:أنا مؤلف لـ echoipdns.

تكوين المجال الفرعي التلقائي لـ nginx باستخدام Acrylic DNS Proxy

ملف auto.conf لمجلد مواقع nginx الخاص بك

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

أضف إلى ملف المضيفين الاكريليك 127.0.0.1 example.com *.example.com وأعد تشغيل خدمة الأكريليك.فرع $ - اسم المجال الفرعي الخاص بك.

تعيين بدلا من الجذر /var/www/html/$branch/public; مسار مشروعك

يمكنك استخدام عميل DNS ديناميكي مثل http://www.no-ip.com.ثم، باستخدام خادم DNS خارجي CNAME *.mydomain.com إلى mydomain.no-ip.com.

بينما لا يمكنك إضافة حرف بدل من هذا القبيل، يمكنك إضافة القائمة الكاملة للمواقع التي تحتاجها، على الأقل للاختبار، والتي تعمل بشكل جيد بالنسبة لي، في ملف المضيفين الخاص بك، ما عليك سوى إضافة:

127.0.0.1 موقع 1. محلي
127.0.0.1 موقع 2. محلي
127.0.0.1 موقع 3. محلي
...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top