Bir web sitesini ana bilgisayar adıyla ilişkilendirilenden farklı bir IP'de görüntülemenin kolay yolu?


1

Bazı arkaplanlar - WordPress, hangi ana bilgisayar adına erişim sağladığınız konusunda gerçekten sinir bozucu, bu da test ortamları yaratmanın oldukça acı verici olmasını sağlıyor. (Aşama için bir alt alan adı oluşturabilirim y.x.com; Oradan değil x.com, DNS değişimini yaptığım anda nerede olacakları. Bunu aşmak için, / etc / hosts dosyasında bir takma ad oluşturdum, bu nedenle WP ayarlarında alan adını değiştirmeye devam etmem gerekmiyor.

Başka bir deyişle: Şu anda IP xve ana bilgisayar adıyla çalışan canlı bir sitem var x.com. Canlı siteyi çalışır durumda bırakmak ve yukarıda belirtilen bir girişi kullanarak y, ana bilgisayar adı aracılığıyla erişilen IP'de bir hazırlama makinesi kurmak istiyorum .x.com/etc/hosts

Sorum şu: Hazırlama makinesini müşteriye / etc / hosts dosyasını düzenlemeden nasıl gösterebilirim? Bir iframe ayarlayan ve size belirli bir ana bilgisayar adı olarak belirli bir IP gösteren çevrimiçi bir hizmet var mı?

Teşekkürler!

Düzenleme: DNS kayıtlarımı nasıl ayarlayacağımı sormuyorum; şu an için iyiler. Sahte makineye IP'sini adres çubuğuna yazarak göz atabilirim ve WordPress yüklenir ve tüm linkler hariç her şey harikadır x.comve tıklamak beni canlı / prodüksiyon sitesine götürür. Bunu , genel DNS kayıtlarını canlı siteye geçersiz kılan ve bunun yerine bana hazırlama makinesini gösteren yerel makinemin hostsdosyasına (yani /etc/hosts) girerek düzeltebilirim . Aslında müşterim için bunu kolayca yapmanın bir yolunu istiyorum, yani, hostsdosyasını düzenlemek zorunda kalmadan .


1
Neden dns kaydını değiştirmiyorsun?
Mehraban

@SAM Çünkü şu anda çalışmakta olan canlı bir site var ve DNS kaydını değiştirirsem çevrimdışı olacak.
Ağustos

Yanıtlar:


1

X.com/staging'i başka bir sunucuya eşleyin

Apache'de çalıştığınızı varsayalım, vekil hile yapabilir. Apache'de bir Ters Proxy çalıştırmak aşağıdakilerin işe yarayabileceğini gösterir, ancak test etmedim:

ProxyPreserveHost on
ProxyPass /staging/ http://y.y.y.y/
ProxyHTMLURLMap http://y.y.y.y /staging

<Location /staging/>
    ProxyPassReverse /
    ProxyHTMLEnable On
    ProxyHTMLURLMap / /staging/
    # We need to peek into the HTML, so ensure we don't get gzip'd content:
    RequestHeader unset Accept-Encoding
</Location>

Yukarıda, sanal bir klasör /stagingtüm eşler http://x.com/staging/için /diğer IP adresine. x.comAna bilgisayar olarak kullanmaya devam etmek için ProxyPreserveHost ekledim .

Bütün bunların sonunda bir eğik çizgi gerekir; bazı standart yeniden yazmalar gerektiğinde bunları ekleyebilir:

# Add trailing slash if omitted
RewriteRule ^staging$ /staging/ [R=302,L]

Çerezleri paylaşmaktan kaçının: özel bir etki alanı kullanın

Ancak, oturum çerezleriyle ilgili çok kötü sorunlardan kaçınmak için, özel bir etki alanı tercih ederim (tercihen bir alt etki alanı bile değil x.com). Bunun için stagingyukarıdaki tüm referansları kaldırın . Beklenen etki alanı adını yine de göndermek için, birinin ek ekleyebileceğini varsayıyorum:

RequestHeader set Host x.com

Böyle bir özel alan kullanıldığında, Apache'nin /some/pageiçine gibi göreceli URL'leri yeniden yazmak zorunda kalmayacak /staging/some/page. Ancak, bu, mutlak URL’lerin yeniden yazılmasındaki başarısızlıkları fark etmeyeceğiniz anlamına gelebilir (özellikle JavaScript söz konusu olduğunda mümkündür). Yeniden yazmak için bir başarısızlık gibi http://x.com/some/pagegeri http://client.mycompany.com/some/pageAynı URL üretim sunucuda mevcutsa ve tarayıcı doğrudan bu getirir eğer fark edilmeden gidebilir. Bu, üretim sunucusuna hala giriş yaptığınızda ve hazırlama sunucusundaki içeriği değiştirdiğinizi düşündüğünüzde bu bir avantaj veya felaket olabilir ...

.Htaccess kullanımı

Sadece posterity için, daha önce bir .htaccessdosyada aşağıdaki gibi bir şey kullanabileceğini düşündüm :

# Does NOT work (for me). On the target server, this gets me:
#   HTTP_HOST = y.y.y.y            - from the proxy request? Expected x.com
#   HTTP_X_FORWARDED_HOST = x.com  - from Host
#   HTTP_X_MY_DUMMY = x.com        - from X-My-Dummy, as expected

RewriteEngine On
RequestHeader set Host x.com 
RequestHeader set X-My-Dummy x.com
RewriteRule ^(.*) http://y.y.y.y/$1 [L,P] 
ProxyPassReverse / http://y.y.y.y/

Ancak, ProxyPassReverseizin verilen görünmüyor .htaccess. Ve bazı temel testler, [P]vekaletin de her zaman kendi Hostbaşlığını eklediğini ve benim Hostkelimemi tercüme ettiğini ortaya koyuyor gibi görünüyor X-Forwarded-Host. Bu çok iyi bir test yapmak için kullandığım paylaşılan sanal barındırma ile ilgili olabilir. Ancak ProxyPreserveHostkullanılamaz .htaccess.

Apache'nin mod_proxy , mod_headers ve mod_rewrite belgelerine bakın.


Bu kurulumu bir sanal ev sahibi olarak yaptım ve çalışmıyor gibi görünüyor - y.y.y.yher iki durumda da sahneleme makinesinin IP'si, değil mi? Yine de sağlam bir yaklaşım gibi görünüyor; Geçmişte Nginx ile benzer bir şey yaptım.
aendrew

Evet, @ aendrew, yyyy, bu evrelemenin IP adresi. Herhangi bir hata? (Yarın, bundan 10 saat veya daha fazla bir süre sonra daha yakından bir göz atabilirim ...)
Arjan,

@ aendrew, testim de başarısız oldu; düzenlenen cevaba bakınız.
Arjan

Ve Nginx için belki bu örnekler yardımcı olabilir. Elbette, Nginx , değiştirmeye çalışırken proxy_set_headerApache ile aynı sorunu gösterebilir . RequestHeader setHost
Arjan

Herhangi bir şans, @ Aendrew?
Arjan

1

aynı ana bilgisayar adını farklı iplere bağlayamazsınız ya etki alanını aşama makinesini gösterecek şekilde DNS kayıtlarınızı düzenlemelisiniz ya da ana bilgisayar dosyası aracılığıyla yerel ana bilgisayar çözünürlüğü değişiklikleri yapmanız gerekir.

Ayrıca eğer varsa sitenizi çalıştıran PHP ya da sitenizin çalıştığı başka bir dilde bir kontrol / durum değişkeni ekleyebilirsiniz. http://examplesite.com/?staging=true


Doğru olsa da, alt alanlar farklı IP adreslerine sahip olabilir. (Sadece bir okuyucunun bilmediği durumda.)
Arjan

Ah evet Subdomain'ler de bir seçenek olabilir :)
Saurabh Sharma

Aslında yapabilirsin. Bu genellikle basit bir esnek hizmet yapmak için kullanılır. İlk giriş her zaman cevap vereceği için burada yardımcı olmaz.
Julian Knight

@Arjan Evet, bir alt etki alanı oluşturabilirim y.x.com, ancak sonra WordPress tüm bağlantıları oradan olacak şekilde ayarlayacaktır x.com; bu, DNS değiştirmeyi yaptığım anda olacakları yerdeydi. Ne yazık ki, müşteriden imza atana kadar bunu yapamam ve önce onu görmeleri gerekir. Ben sadece WordPress'i ayarlayabildiğimi y.x.comve sonra tüm bağlantıları değiştirecek olan WP_RELOCATEyönergeyi kullanabileceğimin farkındayım wp-config.php, ancak daha sonra her güncellenmiş dökümü bastığımda daha fazla DB çalışması yapmam gerekiyor.
aendrew

@ SaurabhSharma İki site farklı makinelerde, proxy_passdüzgün çalışmasını sağlamak için bir grup Nginx yönergesi kurmak zorunda kaldım ve bu noktada Arjan'ın önerisine göre bir alt etki alanına koyabilirim. Gerçekten sadece belirli bir IP adresini görüntülemenin bir yolunu arıyorum, ancak belirli bir Hostbaşlık göndererek bağlantıların çalışmasını sağlayın.
aendrew

1

Başka bir yol normal bir proxy sunucusu ( Squid gibi ) ve /etc/hostsproxy sunucusunda düzenlenen bir düzenlemedir .

Bir HTTP proxy kullandığınızda, istemcinin tarayıcısı x.com için DNS araması yapmaz, ancak proxy sunucusuna bağlanır ve x.com'a bağlanmasını söyler. X.com'u proxy sunucusundaki başka bir IP'ye büktüğünüzden, sonuçları hazırlama sunucusundan alırsınız.


Gitmek için ilginç bir yol gibi görünüyor - herhangi bir yapılandırma ipucu var mı?
30’daki aendrew

Ben sadece bu sunucunun bir kullanıcısıyım - ama özel bir şeye ihtiyacınız yok - yalnızca temel bir konfigürasyona ihtiyacınız var (sertleştirilmiş, böylece herkes için açık bir proxy sağlamıyorsunuz). Arjan ve ben cevabını birleştirebilirsiniz - içinde "proxy" bulunan 2 satırı kullanın (yeniden yazma veya başlık olmadan) ve / etc / hosts dosyasını değiştirin.
Ronny Lindner

Proxy, DNS'de arama yaparsa, HTTPS nasıl çalışır? (Yeni uzantılar bir yana, SSL'deki ilk adımlar ana bilgisayar adlarına değil, yalnızca IP adreslerine dayanıyor, değil mi?)
Arjan

hmm, iyi soru - Kullandığım proxy ile kesinlikle https ve http için çalıştığını biliyorum. Yarın ayarlara bakabilir ve bir numara olup olmadığını görebilirim.
Ronny Lindner

Squid.conf ayarlarına baktım ve sihir yok - açık bir proxy olmaması için standart bir squid.conf. Https bölümü için bunun nasıl çalıştığı hakkında hiçbir fikrim yok, ancak hazırlama sunucusunun sertifikasını alıyorum ve proxy üzerinde hiçbir sertifika yapılandırılmadı.
Ronny Lindner
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.