Vytvoření RESTful webové služby v PHP

Pracuji s klientem, který již má vlastní web elektronického obchodování nastavený na vlastní doméně, např. example.com

Chceme hostovat jejich blog WordPress v podadresáři jejich domény, např. example.com/blog Kvůli problémům se zabezpečením nemůžeme WordPress hostovat na stejném serveru jako zbytek jejich webu.

Nastavili jsme samostatný server, který bude hostovat blog WordPress, a přidělili jsme mu dočasnou adresu URL subdomény.

Jak to uděláme tak, aby example.com/blog obsluhovala web Wordpress z našeho serveru? Nechceme přesměrování, chceme, aby vypadalo, jako by byl celý blog hostován v podadresáři „/ blog“. Jaké adresy URL vložíme do databáze WordPress? Jak by měli přesměrovat svůj podadresář?

Vím, že lidé doporučují používat subdoménu (to je to, co v současné době máme), ale klient konkrétně požádal o použití podadresáře pro lepší výkon SEO.

  • Subdomény nejsou pro SEO o nic horší. Viz: Pomáhají subdomény / poškozují SEO?
  • @StephenOstermiller Díky! Ano, slyšel jsem to samé z různých zdrojů. To budu muset předat svým klientům.

Subdoména je určitě nejjednodušší volbou, protože chcete hostovat web na jiném serveru. Důvodem je to, že název hostitele lze kdykoli přeložit pouze na jedno místo. Pokud se obáváte SEO ze změněných adres URL, můžete místo toho zvážit přesměrování na subdoménu.

Jelikož se však konkrétně snažíte vyhnout subdoméně, zbytek této odpovědi se zaměří na to, jak to udělat.

Pokud chcete, aby se / blog / zobrazoval z jiného serveru, budete muset vytvořit reverzní proxy. V závislosti na vaší úrovni přístupu k aktuálnímu webovému serveru by bylo nejlepší vytvořit reverzní proxy. Následující pokyny mohou vyžadovat určité dovednosti se změnami serveru k implementaci a řešení potíží.

Používání Apache

Za předpokladu, že používáte Apache, můžete přidat toto pravidlo:

ProxyPass /blog/ http://example.com/blog ProxyPassReverse /blog/ http://example.com/blog 

Toto můžete umístit do svého záznamu VirtualHost nebo někam do svého httpd.conf. To předpokládá, že máte mod_proxy nainstalován a bude vyžadovat restart Apache.

Pokud používáte cPanel, který je populární, můžete zde hledat umístění pro umístění souboru s názvem končícím na .conf: https://documentation.cpanel.net/display/EA/Modify+Virtualhost+Containers+With+Include+Files

Pokud používáte cPanel, mod_proxy by měly být zahrnuty, takže byste se s tím neměli bát, ale budete muset /scripts/rebuildhttpdconf a poté restartujte Apache.

To by vám umožnilo navázat spojení s jiným umístěním, abyste získali aktuální stránky blogu, které budou sloužit prostřednictvím vašeho aktuálního serveru.

Problém WordPressu, stejně jako mnoha CMS, spočívá v tom, že je velmi vybíravý ohledně adresy URL, kterou používáte k přístupu. To znamená, že pokud byste se měli připojit k subdoméně, pokud by se weburl neshodoval, WordPress by poskytoval 404. WordPress také často vydává přesměrování s weburl v něm. Proto byste pravděpodobně potřebovali, aby si server myslel, že se připojujete ke stejné adrese URL, i když se připojujete ke vzdálenému serveru. Složitá část spočívá v tom, že byste také potřebovali přístup root, abyste mohli upravovat server hosts soubor. Na serveru Linux byste to našli na /etc/hosts/, a můžete přidat řádek takto:

123.123.123.123 example.com 

Kde 123.123.123.123 by byla adresa IP serveru, na kterém byste blog hostovali. Samozřejmě to bude fungovat, pouze pokud nic jiného na tomto serveru neočekává připojení k webu example.com.

Používání Nginx

Pokud používáte Nginx, který je o něco méně běžný, můžete to udělat trochu jednodušší:

upstream blogbackend { server 123.123.123.123:80; } location /blog { proxy_pass http://blogbackend; } 

Protože Nginx vám umožňuje určit IP pro backend, neměli byste si hrát s hosts soubor.

Siteurl

V obou případech by měl být vzdálený server s blogem nakonfigurován tak, aby poskytoval obsah http://example.com/bloga tím by byl option_value pro oba siteurl a home v prefixu $options stůl. Pokud se jedná o původní adresu URL, neměli byste ji měnit. Pokud musíte provést změny, buďte připraveni zkontrolovat pevně zadané adresy URL, například nahrané obrázky atd.

Závěr

Toto řešení je trochu špinavé a je tu spousta věcí, které se mohou pokazit. Je to však stále pravděpodobně čistší než další alternativa, kde máte / blog / poskytujete obsah prostřednictvím proxy serveru PHP, možná pomocí curl. To je důvod, proč by standardním přístupem bylo jednoduše použít subdoménu.

  • ProxyPass a ProxyPassReverse (pokud si dobře pamatuji) vyžaduje, aby byl zahrnut modul, který není ve výchozím nastavení vždy součástí všech instalací. Vyžaduje také restartování Apache. Zdá se, že si pamatuji, že jsem musel provést změny konfigurace, než by ProxyPass a ProxyPassReverse fungovaly na mé testovací instalaci Apache 2.4. Za zmínku stojí ve vaší odpovědi. Na zdraví!!
  • @closetnoc Díky. Myslel jsem, že už se dostávám trochu hluboko do správy systému. Také jsem přidal trochu odmítnutí odpovědnosti.
  • Díky za tuto podrobnou odpověď @DKing - Můj klient má vývojáře, který se zabývá všemi věcmi na serveru, takže si myslím, že to udělali jako reverzní proxy pomocí Nginx. Aktualizoval jsem adresy URL v naší databázi WP tak, aby používaly adresu URL nového podadresáře. Zdá se, že nyní vše funguje dobře, ale v rámci wp-admin jsou chyby. Konkrétně chyba „502 Bad Gateway nginx“ při pokusu o vytvoření příspěvku ve WordPressu. Zpráva o odepření přístupu také při pokusu o uložení možností motivů wp. Může to být způsobeno serverem proxy, který si myslíte, nebo nesprávnou konfigurací wp? Ještě jednou děkuji!
  • @ J.Purcell 502 může souviset s nginx, nebo nemusí, ale ukládání možností motivů by pravděpodobně bylo problémem WordPress, například problémem s oprávněními. Proxy jednoduše předává informace dál, takže jakmile změníte téma, mělo by to být provedeno na upstream serveru, takže bych to nejprve prozkoumal. To bych zvládl, než se podívám na problém 502.
  • 1 @Baumr Jistě. Zveřejnil jsem odpověď.

Váš server má adresu IP, takže ji můžete jednoduše chytit a poté vytvořit subdoménu, kdekoli je DNS pro doménu hostován. Řekněme tedy, že chcete vytvořit blog.domain.com, můžete to ukázat na svou IP adresu serverů.

  • Děkujeme za odpověď, ale otázkou bylo, jak nasměrovat podadresář na jiný server, nikoli na subdoménu. Můj problém byl však vyřešen při spolupráci s dalšími vývojáři pomocí techniky reverzního proxy. Dík!

Pracoval pro vás: Charles Robertson | Chcete nás kontaktovat?