{"id":9875,"date":"2020-05-07T11:55:00","date_gmt":"2020-05-07T11:55:00","guid":{"rendered":"https:\/\/icrowdnewswire.com\/?p=2545016"},"modified":"2020-05-07T11:55:00","modified_gmt":"2020-05-07T11:55:00","slug":"caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server","status":"publish","type":"post","link":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/","title":{"rendered":"Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server"},"content":{"rendered":"<h2>We put Caddy 2.0.0 head to head against a ranking heavyweight, Apache 2.4.41.<\/h2>\n<section class=\"post-meta\"><img decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png\" alt=\"Production-ready in a few lines? Color us interested.\" \/><\/section>\n<section class=\"post-meta\">\n<p>Yesterday, the&nbsp;<a href=\"https:\/\/caddyserver.com\/\">Caddy<\/a>&nbsp;Web server reached an important milestone, with its 2.0.0 release. Caddy bills itself as &#8220;The Ultimate Server,&#8221; with no dependencies, automatic TLS certificate obtainment and renewal, and much smaller configuration files than Apache or Nginx.<\/p>\n<p>Senior Technology Editor&nbsp;<a href=\"https:\/\/arstechnica.com\/author\/lee-hutchinson\/\">Lee Hutchinson<\/a>&nbsp;expressed both curiosity about Caddy and his own personal inertia in the Ars slack:<\/p>\n<blockquote>\n<p>Caddy is an app where every time i see it or think of it i say &ldquo;I should mess with it, it looks neat&rdquo; and then I never do. I&rsquo;ve gotten so enmeshed in my haproxy &#8211; varnish &#8211; nginx stack that breaking out feels like more trouble than it&rsquo;s worth.<\/p>\n<\/blockquote>\n<p>I hadn&#8217;t ever heard of Caddy until Lee mentioned it, but I know a call to action when I hear one.<\/p>\n<h2>Baby&#8217;s first (mis)steps with Caddy<\/h2>\n<figure class=\"image shortcode-img center large\"><a class=\"enlarge\" href=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/caddy-a-whole-new-server-experience.png\" data-height=\"655\" data-width=\"1436\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/caddy-a-whole-new-server-experience-640x292.png\" srcset=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/caddy-a-whole-new-server-experience-1280x584.png 2x\" alt=\"Really fun to use, they said... HTTPS just works, they said. Spoiler alert: kinda depends on how you go about it.\" width=\"640\" height=\"292\" \/><\/a><figcaption class=\"caption\">\n<div class=\"caption-text\"><a class=\"enlarge-link\" href=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/caddy-a-whole-new-server-experience.png\" data-height=\"655\" data-width=\"1436\">Enlarge<\/a>&nbsp;<span class=\"sep\">\/<\/span>&nbsp;Really fun to use, they said&#8230; HTTPS just works, they said. Spoiler alert: kinda depends on how you go about it.<\/div>\n<div class=\"caption-credit\"><a class=\"caption-link\" href=\"https:\/\/caddyserver.com\/v2\" rel=\"nofollow\">Light Code Labs<\/a><\/div>\n<\/figcaption><\/figure>\n<p>After watching a short animation demonstrating rapid deployment of Caddy, I dove right into the linked&nbsp;<a href=\"https:\/\/caddyserver.com\/docs\/quick-starts\/https\">HTTPS quick-start<\/a>&nbsp;docs. This turned out not to be the best way to experience Caddy for the first time, to put it mildly. The quick-start tutorial glossed over the actual installation of Caddy, and I&#8217;d already left the Github release page&mdash;so my next thought was to look for Caddy in the usual places, on a fresh Ubuntu 20.04 VM.<\/p>\n<p>When&nbsp;<code>apt search caddy<\/code>&nbsp;came up empty, I tried&nbsp;<code>snap search caddy<\/code>&nbsp;instead&mdash;and, bingo:<\/p>\n<figure class=\"image shortcode-img center large\"><a class=\"enlarge\" href=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/000-snap-install-caddy.png\" data-height=\"900\" data-width=\"1440\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/000-snap-install-caddy-640x400.png\" srcset=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/000-snap-install-caddy-1280x800.png 2x\" alt=\"It can&#039;t be this easy... can it?\" width=\"640\" height=\"400\" \/><\/a><figcaption class=\"caption\">\n<div class=\"caption-text\"><a class=\"enlarge-link\" href=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/000-snap-install-caddy.png\" data-height=\"900\" data-width=\"1440\">Enlarge<\/a>&nbsp;<span class=\"sep\">\/<\/span>&nbsp;It can&#8217;t be this easy&#8230; can it?<\/div>\n<div class=\"caption-credit\">Jim Salter<\/div>\n<\/figcaption><\/figure>\n<p>Not only was caddy available in the Ubuntu snap repositories, it was 2.0.0&mdash;the version that was just released! So I did a&nbsp;<code>snap install caddy<\/code>, and I was off to the races. Unfortunately, I wasn&#8217;t off to the races in a good way. The caddy snap didn&#8217;t just install caddy, it also started it as a service&mdash;somewhere&mdash;which I discovered when I attempted to follow the quick-start&#8217;s directive to run&nbsp;<code>caddy start<\/code>&nbsp;in any random directory where I&#8217;d created a file named&nbsp;<code>Caddyfile<\/code>.<\/p>\n<p>Although it was&nbsp;<em>possible<\/em>&nbsp;to make Caddy do my bidding from this snap, I never did figure out where the snap kept Caddy&#8217;s configs&mdash;so the only way I could get it to work was to&nbsp;<code>snap stop caddy<\/code>,&nbsp;<code>ps wwaux | grep caddy | grep -v grep<\/code>&nbsp;to make sure the snap didn&#8217;t still have a process running sneakily (which it sometimes did) and kill it if so, then run it manually.<\/p>\n<p>To be fair, the quick-start docs seemed to make out running caddy manually to be a good thing&mdash;and several of the top results I found when googling &#8220;install caddy&#8221; instructed me to pipe&nbsp;<code>curl https:\/\/getcaddy.com\/<\/code>&nbsp;directly to&nbsp;<code>sudo bash -s personal<\/code>.<\/p>\n<p>As a sysadmin, not developer&mdash;and a particularly security-aware sysadmin&mdash;I had a pretty violent reaction to that advice. It still makes my eyelid twitch just&nbsp;<em>looking<\/em>&nbsp;at that. Please, folks&mdash;do not just pipe the Internet directly into your system&#8217;s brain, complete with root privileges.<\/p>\n<h2>Installing Caddy the right way<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/002-install-caddy-from-apt.png\" width=\"705\" height=\"529\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/004-no-https-no-service-no-dice-150x150.png\" alt=\"With the stock Caddyfile, Caddy only services requests on port 80&mdash;but its default behavior also includes mandatory redirection to HTTPS, so all you see in a browser is &quot;Unable to connect.&quot;\" \/><img decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/005-caddy-running-on-localhost-with-snake-oil-cert-150x150.png\" alt=\"For dev purposes, you can get Caddy running by replacing &quot;:80&quot; with &quot;localhost&quot; in your Caddyfile. This gets you a snake oil certificate&mdash;and security warnings in your browser.\" \/><img decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/006-caddy-snakeoil-cert-in-firefox-150x150.png\" alt=\"Firefox is deeply unhappy about Caddy Local Authority - ECC Intermediate, whether the rest of the system trusts it or not.\" \/><img decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/007-caddy-default-webpage-150x150.png\" alt=\"Oh hey, look&mdash;it&#039;s a default webpage! Unfortunately, you really need the helpful instructions it contains well before you get to the point where you can actually see them here.\" \/><\/p>\n<p>Fortunately, there are much saner paths to happy Caddy-ing. There are native packages for several distributions and architectures available at the Github&nbsp;<a href=\"https:\/\/github.com\/caddyserver\/caddy\/releases\">release<\/a>&nbsp;page, and that&#8217;s how I installed Caddy next&mdash;but&nbsp;if you steer clear of search engines and restrict yourself to Caddy&#8217;s own&nbsp;<a href=\"https:\/\/caddyserver.com\/docs\/install\">install document<\/a>, there is an even better path; they maintain their own apt repository.<\/p>\n<p>When Caddy is installed either directly from a .deb at the Github release, or from the repository at apt.fury.io, you get a functional, integrated Web server that&#8217;s ready to go&mdash;well, mostly, anyway. The default Caddyfile runs the server on&nbsp;<code>localhost:80<\/code>, but its default behavior also includes a mandatory HTTPS redirect&mdash;so all you&#8217;ll see in a browser is &#8220;Unable to connect.&#8221;<\/p>\n<p>Updating the host line in your Caddyfile from&nbsp;<code>:80<\/code>&nbsp;to&nbsp;<code>localhost<\/code>&nbsp;and then doing&nbsp;<code>caddy reload<\/code>&nbsp;gets you an automatic&nbsp;<a href=\"https:\/\/wiki.debian.org\/Self-Signed_Certificate\">snake oil certificate<\/a>&nbsp;issued. It looks like Caddy also attempted to add the new snake oil certificate to my Ubuntu VM&#8217;s certificate trust store&mdash;but Firefox certainly didn&#8217;t trust it, and we&#8217;re presented with trust errors and dire warnings.<\/p>\n<p>These can at least be clicked through, and finally we have proof of function: a strangely slanted default webpage. That default webpage tells us something that should be obvious now: all of this would really work&nbsp;<em>much<\/em>&nbsp;better if we had a real domain to play with. Caddy doesn&#8217;t just default to HTTPS\/TLS available, it really doesn&#8217;t want anything to do with you&nbsp;<em>without<\/em>&nbsp;TLS&mdash;and that means a real, publicly resolvable domain.<\/p>\n<h2>Zero to WordPress&mdash;eventually<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/008-caddytest-vs-apache-test-fight-1440x900.png\" width=\"858\" height=\"536\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/009-caddytest-vs-apachetest-wp-admin-150x150.png\" alt=\"Our Caddy droplet had a redirect loop problem with wp-admin&mdash;this turned out to be due to an odd directive in the sample Caddyfile used in the docs.\" \/><img decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/010-caddytest-wp-admin-redirect-loop-solved-150x150.png\" alt=\"Commenting out a line in the sample Caddyfile turned out to be all that was needed to resolve the redirect loop in wp-admin.\" \/><\/p>\n<p>Now that I knew I could get Caddy working at all, it was time to get it working for real&mdash;or at least, &#8220;real&#8221; enough to write an article about it. A simple &#8220;hello world&#8221; static webpage wasn&#8217;t enough of a test&mdash;and since WordPress powers roughly&nbsp;<a href=\"https:\/\/w3techs.com\/technologies\/details\/cm-wordpress\">36%<\/a>&nbsp;of the websites on the planet, it looked like a great place to start.<\/p>\n<p>I also wanted to do a head-to-head comparison with a more traditional Web server, since my first exposure to Caddy was its claims of being simple, fun, and much easier to configure. Frankly, I was a little dubious of the last claim&mdash;much of the time, when a developer tells you something is &#8220;easy to configure&#8221; they really should just be telling you &#8220;I know all the pitfalls here very well.&#8221;<\/p>\n<figure class=\"image shortcode-img center large\"><a class=\"enlarge\" href=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/011-sample-Caddyfile-with-noob-trap.png\" data-height=\"639\" data-width=\"1087\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/011-sample-Caddyfile-with-noob-trap-640x376.png\" srcset=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/011-sample-Caddyfile-with-noob-trap.png 2x\" alt=\"There&#039;s a noob trap lurking in this sample Caddyfile&mdash;that try_files directive is unnecessary for most sites and caused our WordPress redirect loop.\" width=\"640\" height=\"376\" \/><\/a><figcaption class=\"caption\">\n<div class=\"caption-text\"><a class=\"enlarge-link\" href=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/011-sample-Caddyfile-with-noob-trap.png\" data-height=\"639\" data-width=\"1087\">Enlarge<\/a>&nbsp;<span class=\"sep\">\/<\/span>&nbsp;There&#8217;s a noob trap lurking in this sample Caddyfile&mdash;that try_files directive is unnecessary for most sites and caused our WordPress redirect loop.<\/div>\n<div class=\"caption-credit\">Jim Salter<\/div>\n<\/figcaption><\/figure>\n<p>One such pitfall is the sample Caddyfile presented at&nbsp;<a href=\"https:\/\/caddyserver.com\/docs\/caddyfile\">https:\/\/caddyserver.com\/docs\/caddyfile<\/a>. The tutorial proudly tells you &#8220;that&#8217;s a real, production-ready Caddyfile that serves a Craft CMS site with fully managed HTTPS.&#8221; What it doesn&#8217;t tell you is that one of the directives in that simple file will break most sites that&nbsp;<em>aren&#8217;t<\/em>&nbsp;the&nbsp;<a href=\"https:\/\/craftcms.com\/\">Craft CMS<\/a>. The&nbsp;<code>try_files<\/code>&nbsp;directive shown overrides the&nbsp;<code>try_files<\/code>&nbsp;directive implicit in the&nbsp;<code>fastcgi<\/code>&nbsp;directive itself, and it caused a nasty redirect loop in the WordPress dashboard once I got it up and running.<\/p>\n<h2>Caddy 2.0.0 vs Apache 2.4.41&mdash;installation fight!<\/h2>\n<p>I had two major questions about Caddy 2.0.0&mdash;was it really easier to configure than a more conventional Web server, and how well would it perform? If this was a boxing match, Caddy was clearly the contender&mdash;and I chose Apache to serve as the reigning champion for it to challenge.<\/p>\n<p>I spun up two new Digital Ocean droplets running Ubuntu 20.04 and set up WordPress from scratch on each of them&mdash;one running Caddy 2.0.0 from its third-party repository, and one running Apache 2.4 straight from the Ubuntu Focal Fossa repos.<\/p>\n<p>The usual buzz is that Apache is old and slow compared to the other common Web service heavyweight, Nginx. Most of this reputation is undeserved&mdash;Apache has been around forever, and&nbsp;<a href=\"https:\/\/www.digitalocean.com\/community\/tutorials\/how-to-install-linux-apache-mysql-php-lamp-stack-ubuntu-18-04\">guide,<\/a>&nbsp;after&nbsp;<a href=\"https:\/\/ubuntu.com\/tutorials\/install-and-configure-wordpress#2-install-wordpress\">guide,<\/a>&nbsp;after&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/web-servers\/lamp\/how-to-install-a-lamp-stack-on-ubuntu-18-04\/\">guide<\/a>&nbsp;advises users to configure it poorly. Yes, if you configure Apache to use the antediluvian&nbsp;<code>mod_php<\/code>&nbsp;module, performance as an application server will suck&mdash;this forces Apache to use the&nbsp;<code>prefork<\/code>&nbsp;<a href=\"https:\/\/www.liquidweb.com\/kb\/apache-mpms-explained\/\" rel=\"nofollow\">MPM<\/a>.<\/p>\n<p>If you don&#8217;t&nbsp;<em>force<\/em>&nbsp;Apache into using&nbsp;<code>prefork<\/code>, under modern Ubuntu it defaults instead to the&nbsp;<code>event<\/code>&nbsp;multi-processing module, which is far lighter-weight. Under&nbsp;<code>prefork<\/code>&nbsp;and&nbsp;<code>mod_php<\/code>, Apache and PHP are run as one gigantic hybrid process, which is extremely wasteful of RAM and processing power when serving static files such as CSS, images, or pure HTML.<\/p>\n<p>When you avoid&nbsp;<code>mod_php<\/code>&nbsp;and use&nbsp;<code>event<\/code>&nbsp;with&nbsp;<code>php-fpm<\/code>&nbsp;instead, Apache changes from a sluggish beast into a real contender that can go toe to toe with nginx.<\/p>\n<h3>Common pre-installation steps<\/h3>\n<p>There&#8217;s a lot of installation necessary to get a working WordPress instance up that doesn&#8217;t have anything specific to do with either Apache or Caddy. I&#8217;m going to list those necessary steps here, which were identical for both Web servers as (eventually) configured.<\/p>\n<p><code>root@droplet:~# apt update ; apt install mysql-server php-fpm php-common php-mbstring php-xmlrpc php-soap php-gd php-xml php-intl php-mysql php-cli php-ldap php-zip php-curl<br \/>root@droplet:~# grep pass \/etc\/mysql\/debian.cnf<\/code><\/p>\n<p>First, we install the MySQL database server, the PHP fast process manager, and a whole string of PHP extensions that WordPress will need to run properly. Then we get the maintenance user&#8217;s password from&nbsp;<code>\/etc\/mysql\/debian.cnf<\/code>, so that we can install a database for our WordPress instance to use.<\/p>\n<p><code>root@droplet:~# mysql -u debian-sys-maint -p<br \/>mysql&gt; create database wordpress;<br \/>mysql&gt; create user &#039;wordpress&#039;@&#039;localhost&#039; identified by &#039;supersecretpassword&#039;;<br \/>mysql&gt; grant all on wordpress.* to &#039;wordpress&#039;@&#039;localhost&#039;;<\/code><\/p>\n<p>This was actually a bit of a head-scratcher&mdash;the MySQL syntax for granting privileges on a database changed with MySQL 8.0, which is now the default in Ubuntu Focal. The syntax shown above is correct!<\/p>\n<p>The other step you need is a domain to play with and working DNS that actually points to your server. I used new hostnames at one of my own domains and just updated my BIND zone file to add them. For someone with less existing infrastructure, it&#8217;s easier to use the provided DNS at a registrar such as&nbsp;<a href=\"https:\/\/www.namecheap.com\/\" rel=\"nofollow\">Namecheap<\/a>.<\/p>\n<p>However you handle it, you&#8217;re going to need a publicly accessible IP address, reachable on both ports 80 and 443&mdash;and you&#8217;re going to need public, resolvable DNS to point to it. Detailing that is unfortunately out of scope here.<\/p>\n<h3>Installing and configuring Apache 2.4<\/h3>\n<p>Apache, unsurprisingly, is right there in Ubuntu 20.04&#8217;s main apt repository. Installation is as straight-forward as it can be, with minimal reconfiguration necessary to get things working.<\/p>\n<p><code>root@droplet:~# apt install apache2 python3-certbot-apache<br \/>root@droplet:~# a2enmod proxy_fcgi<br \/>root@droplet:~# a2enconf php7.4-fpm<br \/>root@droplet:~# sed -i &#039;s\/#ServerName www.example.com\/ServerName yourdomain.com\/&#039; \/etc\/apache2\/sites-enabled\/000-default.conf<br \/>root@droplet:~# systemctl restart apache2<br \/>root@droplet:~# certbot<\/code><\/p>\n<p>If that&nbsp;<code>sed<\/code>&nbsp;command is making you nervous, don&#8217;t let it&mdash;that&#8217;s just a bit of shorthand to let me get away with not putting a&nbsp;<code>nano<\/code>&nbsp;in the middle of the workflow. All the&nbsp;<code>sed<\/code>&nbsp;command is doing is finding the commented-out line in the default vhost config file, which would set the&nbsp;<code>ServerName<\/code>&nbsp;directive, and replacing it with a real directive to use our working DNS hostname.<\/p>\n<p>This is it for the Apache-specific configs&mdash;with this done, we skip to the post-installation, and we&#8217;ve got a working WordPress!<\/p>\n<h3>Installing and configuring Caddy 2.0.0<\/h3>\n<p>I didn&#8217;t really find getting Caddy going any easier than I had getting Apache going. Granted, I&#8217;ve technically got more than 20 years of Apache experience&mdash;but this wasn&#8217;t my first trip to the new-software-for-the-same-purpose rodeo, either.<\/p>\n<p>I&#8217;m skipping most of the fumbling-toward-goal trial and error I slogged through on the way to finally getting a working Caddy configuration, in the interests of making this comparison as fair to Caddy as possible despite my much greater experience with Apache.<\/p>\n<p><code>root@caddytest:~# echo&nbsp;\"deb [trusted=yes] https:\/\/apt.fury.io\/caddy\/ \/\" &gt; \/etc\/apt\/sources.list.d\/caddy-fury.list<br \/>root@caddytest:~# apt update<br \/>root@caddytest:~# apt install caddy<\/code><\/p>\n<p>At this point, I need to break from the workflow I had with Apache&mdash;there&#8217;s no option as simple as just uncommenting a line in the default config; I needed to start over with a new Caddyfile. I used the example Caddyfile&nbsp;<a href=\"https:\/\/caddyserver.com\/docs\/caddyfile\">provided<\/a>&nbsp;at caddyserver.com&mdash;but with the unfortunate noob trap edited out.<\/p>\n<pre>root@caddytest:~# cat \/etc\/caddy\/Caddyfile\r\n\r\nyourdomain.com\r\nroot * \/var\/www\/html\r\n\r\n# this wasn&#039;t in the sample Caddyfile&mdash;\r\n# and without it, Caddy gets no logging at all!\r\n#\r\nlog {\r\noutput file \/var\/log\/caddy\/access.log\r\nformat console\r\n}\r\n\r\n# this is the noob trap that caused a wp-admin redirect loop\r\n#try_files {path} \/index.php?{query}&amp;p={path}\r\n\r\nphp_fastcgi unix\/\/run\/php\/php-fpm.sock\r\nfile_server<\/pre>\n<p>So far, so good&mdash;but the ownership of the&nbsp;<code>php-fpm<\/code>&nbsp;pool also needs to be changed. By default, it&#8217;s owned by the&nbsp;<code>www-data<\/code>&nbsp;user&mdash;but Caddy runs as&nbsp;<code>caddy<\/code>, not&nbsp;<code>www-data<\/code>. Without updating that permission, Caddy won&#8217;t be allowed to access the unix socket that&nbsp;<code>php-fpm<\/code>&nbsp;is operating from.<\/p>\n<p>We could also work around this by running&nbsp;<code>php-fpm<\/code>&nbsp;over a TCP socket on&nbsp;<code>localhost<\/code>&mdash;but that would also require more configuration and would result in a lower-performance stack.<\/p>\n<p><code>root@caddytest:~# sed -i &#039;s\/www-data\/caddy\/g&#039; \/etc\/php\/7.4\/fpm\/pool.d\/www.conf<br \/>root@caddytest:~$ systemctl restart php7.4-fpm<br \/>root@caddytest:~$ systemctl restart caddy<\/code><\/p>\n<p>I needed a much deeper knowledge of the&nbsp;<code>php-fpm<\/code>&nbsp;stack to get things working here than I did with Apache. There was also no working logging in the sample Caddyfile provided&mdash;and a noob trap in that sample that enables a highly unusual setup (Craft CMS, with a&nbsp;<a href=\"https:\/\/w3techs.com\/technologies\/details\/cm-craft\">0.2%<\/a>&nbsp;CMS marketshare), while breaking most setups, including the most common one on the planet (WordPress, with a&nbsp;<a href=\"https:\/\/w3techs.com\/technologies\/details\/cm-wordpress\">63.3%<\/a>&nbsp;CMS marketshare).<\/p>\n<p>I&#8217;m well aware that I have a lot more experience with Apache than Caddy, but I don&#8217;t see how Caddy can reasonably be granted an ease-of-use win here.<\/p>\n<h3>Common post-installation steps<\/h3>\n<p>We also need to download WordPress itself, unpack it, and put it in the directory where it will be served.<\/p>\n<p><code>root@droplet:~# mkdir -p \/var\/www<br \/>root@droplet:~# cd \/var\/www\/<br \/>root@droplet:\/var\/www# wget https:\/\/wordpress.org\/latest.tar.gz<br \/>root@droplet:\/var\/www# tar zvxf latest.tar.gz<br \/>root@droplet:\/var\/www# mv html html-dist ; mv wordpress html<br \/>root@droplet:\/var\/www# chown -R $webserveruser html<\/code><\/p>\n<p>Okay, we had to fudge things a little in this step: Apache doesn&#8217;t actually need you to create the&nbsp;<code>\/var\/www<\/code>&nbsp;directory, and Caddy doesn&#8217;t need you to&nbsp;<code>mv html html-dist<\/code>, since it didn&#8217;t have a directory in&nbsp;<code>\/var\/www<\/code>&nbsp;to start with. But in the interest of getting common things out of the way, we&#8217;re going to call this one a draw.<\/p>\n<p>If some poor soul is trying to use this as a guide to getting WordPress working, I should also point out that $webserveruser isn&#8217;t literal here&mdash;for Apache, it&#8217;s&nbsp;<code>www-data<\/code>, and for Caddy, it&#8217;s&nbsp;<code>caddy<\/code>.<\/p>\n<p>Once this is done, you&#8217;re ready to point the nearest browser to&nbsp;<code>https:\/\/yourdomain.com\/<\/code>&nbsp;and walk through the WordPress installation.<\/p>\n<h2>Caddy 2.0.0 vs Apache 2.4.41&mdash;performance fight!<\/h2>\n<p>Once WordPress was installed and fully operational on both droplets, it was time for a performance test. I used the venerable apachebench tool running on localhost on each droplet for the testing; this was provided along with Apache itself on the Apache droplet and provided with&nbsp;<code>apt install apache2-utils<\/code>&nbsp;on the Caddy droplet.<\/p>\n<p>The short version here is that Caddy wins. With a simple&nbsp;<code>ab -c5 -t10 https:\/\/yourdomain.com\/<\/code>&nbsp;running against a default virgin WordPress with the single Hello World post, Apache pulls 37.8 requests per second to Caddy&#8217;s 42.4. Caddy also delivered slightly faster median requests, at 114ms to Apache&#8217;s 129ms, and faster 99th percentile requests at 182ms to Apache&#8217;s 184ms.<\/p>\n<p>With that said, this is a pretty silly artificial benchmark that isn&#8217;t much use aside from giving us a reasonable overall idea of Web server performance. A real-world WordPress site tuned to survive a&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/Slashdot_effect\">Slashdotting<\/a>&nbsp;(Arsdotting?) is going to need a lot of configuration and tuning beyond what we did here&mdash;we need more&nbsp;<code>php-fpm<\/code>&nbsp;workers available, we need to install a WordPress performance plugin such as&nbsp;<a href=\"https:\/\/wordpress.org\/plugins\/w3-total-cache\/\">W3-Total-Cache<\/a>&nbsp;installed, and we need to configure that performance plugin to cache objects, files, queries, and more.<\/p>\n<p>On the Apache side, that means installing&nbsp;<code>php-apc<\/code>&nbsp;at a minimum, preferably&nbsp;<code>memcached<\/code>&nbsp;to go along with it, and configuring both of those. I&#8217;ll readily admit I&#8217;m not certain whether either or both of those are necessary for Caddy&mdash;I see one of the gears in a promo graphic for it labeled &#8220;Caching,&#8221; but it&#8217;s not entirely clear what Caddy&#8217;s native capabilities here entail. I found documents for an optional cache&nbsp;<a href=\"https:\/\/caddyserver.com\/v1\/docs\/http.cache\">plugin<\/a>&nbsp;for Caddy 1.x, but this doesn&#8217;t appear to be applicable to 2.0.0.<\/p>\n<p>If you really need to get the most performance possible out of a Web stack, you&#8217;re going to veer rapidly from Caddy&#8217;s initial promise of &#8220;easy, fun setup&#8221; and get into the sysadmin&#8217;s usual grind of determination and thoroughness, no matter your platform. Your results are also likely to differ strongly from one workload to another&mdash;&#8221;fastest&#8221; for WordPress and &#8220;fastest&#8221; for Craft or something else may be very different answers.<\/p>\n<h2>Conclusions<\/h2>\n<p>Caddy is a capable Web server that seems to be headed in good directions with the 2.0.0 release. The earlier version&#8217;s installation advice to just pipe&nbsp;<code>curl<\/code>&nbsp;to&nbsp;<code>sudo bash<\/code>&nbsp;made me grind my teeth, but it appears that the project has matured considerably and is going for much saner, healthier recommended configurations now.<\/p>\n<p>It also performs quite well, eking out a small but measurable win against Apache 2.4.41 running the&nbsp;<code>mpm_event<\/code>&nbsp;model. This puts it in the same general performance ballpark as nginx. When properly configured, Apache, nginx, and Caddy will all perform reasonably similarly&mdash;so if Caddy&#8217;s general style and design float your boat, it appears to be a solid choice.<\/p>\n<p>On the other hand, it&#8217;s difficult to beat the decades of experience and flexibility that Apache&#8217;s configuration design brings to the table. If all you&#8217;re worried about is one or two sites, you may not see much difference between configuring Caddy or Apache. But if you&#8217;re routinely managing tens&mdash;or hundreds&mdash;of sites, Apache&#8217;s ability to cleanly separate virtual-host specific configs in their own individual files might start looking pretty indispensable.<\/p>\n<h3>The good<\/h3>\n<ul>\n<li>Built-in everything with no dependencies makes Caddy simple to install and simple to upgrade, even outside traditional package management systems<\/li>\n<li>World-class performance as compared to Apache 2.4.41 (event MPM) and, by extension, Nginx<\/li>\n<li>Caddy has its own apt repos for Debian-based distributions<\/li>\n<li>Lack of dependencies make Caddy extremely portable&nbsp;<em>between<\/em>&nbsp;distributions, with no potential library conflicts in binary builds<\/li>\n<li>Short, if occasionally somewhat arcane,&nbsp;config files<\/li>\n<\/ul>\n<h3>The bad<\/h3>\n<ul>\n<li>Documentation can be a bit rough&mdash;sample files aren&#8217;t entirely workable for standard usecases, are missing functionality, etc<\/li>\n<li>Conflicts between v2.0 and v1.x configuration syntax&mdash;they&#8217;re almost entirely incompatible, and it&#8217;s easy to accidentally end up on a 1.x doc if you&#8217;re Googling for answers<\/li>\n<li>&#8220;Docs&#8221; and &#8220;tutorials&#8221; often seem to conflict&mdash;some focus on cowboy-style running from the CLI, others on a more sane, traditional system-oriented configuration<\/li>\n<\/ul>\n<h3>The ugly<\/h3>\n<ul>\n<li>HTTPS-only means snake oil certs and security warnings if you&#8217;re in an environment with no public IP and\/or no working DNS<\/li>\n<li>Very low &#8220;Web server marketshare&#8221;&mdash;less than 0.1%, according to&nbsp;<a href=\"https:\/\/w3techs.com\/technologies\/details\/ws-caddy\">w3techs<\/a>&mdash;means you&#8217;re very much on the path less traveled<\/li>\n<li>No distribution package management&mdash;you&#8217;re relying directly on the project itself for all QA and security<\/li>\n<\/ul>\n<\/section>\n<p class=\"tags\">\n<div><strong>See Campaign: <\/strong><a href=\"https:\/\/caddyserver.com\/\" target=\"_blank\">https:\/\/caddyserver.com\/<\/a><br \/><b>Contact Information:<\/b><br \/>JIM SALTER<\/p>\n<p><b>Tags:<\/b><br \/><a href=\"\"><\/a>, <a href=\"https:\/\/icrowdnewswire.com\/category\/news-category\/wire\/\" rel=\"category tag\">Wire<\/a>, <a href=\"https:\/\/icrowdnewswire.com\/category\/news-category\/artificial-intelligence-newswire\/\" rel=\"category tag\">Artificial Intelligence Newswire<\/a>, <a href=\"https:\/\/icrowdnewswire.com\/category\/global-regions\/united-states\/\" rel=\"category tag\">United States<\/a>, <a href=\"https:\/\/icrowdnewswire.com\/category\/language\/english\/\" rel=\"category tag\">English<\/a><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\" alt=\"image\" width=\"400\" height=\"300\" class=\"cwdfimg\" \/><\/div>\n<div>\n<h3>Contact Information:<\/h3>\n<p>JIM SALTER<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>We put Caddy 2.0.0 head to head against a ranking heavyweight, Apache 2.4.41. Yesterday, the&nbsp;Caddy&nbsp;Web server reached an important milestone, with its 2.0.0 release. Caddy bills itself as &ldquo;The Ultimate Server,&rdquo; with no dependencies, automatic TLS certificate obtainment and renewal, and much smaller configuration files than Apache or Nginx. Senior Technology Editor&nbsp;Lee Hutchinson&nbsp;expressed both curiosity &hellip; <a href=\"https:\/\/icrowdnewswire.com\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server-2\/\">Continue reading <span>Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server<\/span><\/a> <a href=\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/\" class=\"more-link\">Continue Reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":47,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,3,22,54],"tags":[],"class_list":["post-9875","post","type-post","status-publish","format-standard","hentry","category-artificial-intelligence-newswire","category-english","category-united-states","category-wire"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server - Business<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server - Business\" \/>\n<meta property=\"og:description\" content=\"We put Caddy 2.0.0 head to head against a ranking heavyweight, Apache 2.4.41. Yesterday, the&nbsp;Caddy&nbsp;Web server reached an important milestone, with its 2.0.0 release. Caddy bills itself as &ldquo;The Ultimate Server,&rdquo; with no dependencies, automatic TLS certificate obtainment and renewal, and much smaller configuration files than Apache or Nginx. Senior Technology Editor&nbsp;Lee Hutchinson&nbsp;expressed both curiosity &hellip; Continue reading Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server Continue Reading &rarr;\" \/>\n<meta property=\"og:url\" content=\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/\" \/>\n<meta property=\"og:site_name\" content=\"Business\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-07T11:55:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png\" \/>\n<meta name=\"author\" content=\"Bilal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bilal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/\",\"url\":\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/\",\"name\":\"Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server - Business\",\"isPartOf\":{\"@id\":\"https:\/\/ipsnews.net\/business\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#primaryimage\"},\"image\":{\"@id\":\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png\",\"datePublished\":\"2020-05-07T11:55:00+00:00\",\"author\":{\"@id\":\"https:\/\/ipsnews.net\/business\/#\/schema\/person\/70b05bacee6cf8a877350412fae25e20\"},\"breadcrumb\":{\"@id\":\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#primaryimage\",\"url\":\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png\",\"contentUrl\":\"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ipsnews.net\/business\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ipsnews.net\/business\/#website\",\"url\":\"https:\/\/ipsnews.net\/business\/\",\"name\":\"Business\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ipsnews.net\/business\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/ipsnews.net\/business\/#\/schema\/person\/70b05bacee6cf8a877350412fae25e20\",\"name\":\"Bilal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ipsnews.net\/business\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/01d05f3f41cc0f9ca88d2011a983bb3f2e83e3e92e3532188bf201df38d2aea8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/01d05f3f41cc0f9ca88d2011a983bb3f2e83e3e92e3532188bf201df38d2aea8?s=96&d=mm&r=g\",\"caption\":\"Bilal\"},\"sameAs\":[\"https:\/\/icrowdnewswire.com\/fc\"],\"url\":\"http:\/\/ipsnews.net\/business\/author\/bilal\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server - Business","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/","og_locale":"en_US","og_type":"article","og_title":"Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server - Business","og_description":"We put Caddy 2.0.0 head to head against a ranking heavyweight, Apache 2.4.41. Yesterday, the&nbsp;Caddy&nbsp;Web server reached an important milestone, with its 2.0.0 release. Caddy bills itself as &ldquo;The Ultimate Server,&rdquo; with no dependencies, automatic TLS certificate obtainment and renewal, and much smaller configuration files than Apache or Nginx. Senior Technology Editor&nbsp;Lee Hutchinson&nbsp;expressed both curiosity &hellip; Continue reading Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server Continue Reading &rarr;","og_url":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/","og_site_name":"Business","article_published_time":"2020-05-07T11:55:00+00:00","og_image":[{"url":"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png","type":"","width":"","height":""}],"author":"Bilal","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bilal","Est. reading time":"17 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/","url":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/","name":"Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server - Business","isPartOf":{"@id":"https:\/\/ipsnews.net\/business\/#website"},"primaryImageOfPage":{"@id":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#primaryimage"},"image":{"@id":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#primaryimage"},"thumbnailUrl":"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png","datePublished":"2020-05-07T11:55:00+00:00","author":{"@id":"https:\/\/ipsnews.net\/business\/#\/schema\/person\/70b05bacee6cf8a877350412fae25e20"},"breadcrumb":{"@id":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#primaryimage","url":"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png","contentUrl":"https:\/\/cdn.arstechnica.net\/wp-content\/uploads\/2020\/05\/Screenshot-from-caddyserver.com-slash-v2-grey-canvas-800x444.png"},{"@type":"BreadcrumbList","@id":"http:\/\/ipsnews.net\/business\/2020\/05\/07\/caddy-offers-tls-https-and-more-in-one-dependency-free-go-web-server\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ipsnews.net\/business\/"},{"@type":"ListItem","position":2,"name":"Caddy offers TLS, HTTPS, and more in one dependency-free Go Web server"}]},{"@type":"WebSite","@id":"https:\/\/ipsnews.net\/business\/#website","url":"https:\/\/ipsnews.net\/business\/","name":"Business","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ipsnews.net\/business\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ipsnews.net\/business\/#\/schema\/person\/70b05bacee6cf8a877350412fae25e20","name":"Bilal","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ipsnews.net\/business\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/01d05f3f41cc0f9ca88d2011a983bb3f2e83e3e92e3532188bf201df38d2aea8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/01d05f3f41cc0f9ca88d2011a983bb3f2e83e3e92e3532188bf201df38d2aea8?s=96&d=mm&r=g","caption":"Bilal"},"sameAs":["https:\/\/icrowdnewswire.com\/fc"],"url":"http:\/\/ipsnews.net\/business\/author\/bilal\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/posts\/9875","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/users\/47"}],"replies":[{"embeddable":true,"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/comments?post=9875"}],"version-history":[{"count":2,"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/posts\/9875\/revisions"}],"predecessor-version":[{"id":9991,"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/posts\/9875\/revisions\/9991"}],"wp:attachment":[{"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/media?parent=9875"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/categories?post=9875"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/ipsnews.net\/business\/wp-json\/wp\/v2\/tags?post=9875"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}