<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:og="http://ogp.me/ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:schema="http://schema.org/" xmlns:sioc="http://rdfs.org/sioc/ns#" xmlns:sioct="http://rdfs.org/sioc/types#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:xsd="http://www.w3.org/2001/XMLSchema#" version="2.0" xml:base="https://www.linuxjournal.com/tag/nginx">
  <channel>
    <title>nginx</title>
    <link>https://www.linuxjournal.com/tag/nginx</link>
    <description/>
    <language>en</language>
    
    <item>
  <title>Words, Words, Words--Introducing OpenSearchServer</title>
  <link>https://www.linuxjournal.com/content/words-words-words-introducing-opensearchserver</link>
  <description>  &lt;div data-history-node-id="1340758" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/bigstock-Search-Button-11710235.jpg" width="900" height="675" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/marcel-gagn%C3%A9" lang="" about="https://www.linuxjournal.com/users/marcel-gagn%C3%A9" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Marcel Gagné&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;How to create your own search engine
combined with a crawler that will index all sorts of documents.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
In William Shakespeare's &lt;em&gt;Hamlet&lt;/em&gt;, one of my favorite plays, Prince
Hamlet is approached by Polonius, chief counselor to Claudius, King of
Denmark, who happens to be Hamlet's stepfather, and uncle, and the new
husband of his mother, Queen Gertrude, whose recently deceased last
husband was the previous King of Denmark. That would be Hamlet's
biological father for those who might be having trouble following
along. He was King Hamlet. Polonius, I probably should mention, is also
the father of Hamlet's sweetheart, Ophelia. Despite this hilarious
sounding setup, Hamlet is most definitely not a comedy. (Note: if you
need a refresher, you can read &lt;em&gt;Hamlet&lt;/em&gt; &lt;a href="http://www.shakespeare-online.com/plays/hamletscenes.html"&gt;here&lt;/a&gt;.)
&lt;/p&gt;

&lt;p&gt;
For reasons I won't go into here, Hamlet is doing a great job of trying
to convince people that he's completely lost it and is pretending to be
reading a book when Polonius approaches and asks, "What do you read, my
lord?"
&lt;/p&gt;

&lt;p&gt;
Hamlet replies by saying, "'Words, words, words." In other words, ahem,
nothing of any importance, you annoying little man.
&lt;/p&gt;

&lt;p&gt;
Shakespeare wrote a lot of words. In fact, writers, businesses and
organizations of any size tend to amass a lot of words in the form of
countless documents, many of which seem to contain a great deal of
importance at the time they are written and subsequently stored on some
lonely corporate server. There, locked in their digital prisons, these
many texts await the day when somebody will seek out their wisdom.
Trouble is, there are so many of them, in many different formats, often
with titles that tell you nothing about the content inside. What you
need is a search engine.
&lt;/p&gt;

&lt;p&gt;
Google is a pretty awesome search engine, but it's not for everybody,
especially if the documents in question aren't meant for consumption by
the public at large. For those times, you need your own search engine,
combined with a crawler that will index all sorts of documents, from
OpenDocument format, to old Microsoft Docs, to PDFs and even plain
text. That's where OpenSearchServer comes into play. OpenSearchServer
is, as the name implies, an open-source project designed to perform the
function of crawling through and indexing large collections of
documents, such as you would find on a website.
&lt;/p&gt;

&lt;p&gt;
I'm going to show you how to go about getting this documentation site
set up from scratch so that you can see all the steps. You may, of
course, already have a web server up and running, and that's fine. I've
gone ahead and spun up a Linode server running Ubuntu 18.04 LTS. This
is a great way to get a server up and running quickly without spending
a lot of money if you don't want to, and if you've never done this, it's
also kind of fun.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/words-words-words-introducing-opensearchserver" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 07 Aug 2019 13:46:43 +0000</pubDate>
    <dc:creator>Marcel Gagné</dc:creator>
    <guid isPermaLink="false">1340758 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>ModSecurity and nginx</title>
  <link>https://www.linuxjournal.com/content/modsecurity-and-nginx</link>
  <description>  &lt;div data-history-node-id="1340091" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/security-1202344_640_10.jpg" width="600" height="338" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/elliot-cooper" lang="" about="https://www.linuxjournal.com/users/elliot-cooper" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Elliot Cooper&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;&lt;em&gt;nginx is the web server that's replacing Apache in more and more of the
world's websites. Until now, nginx has not been able to benefit from the
security ModSecurity provides. Here's how to install ModSecurity
and get it working with nginx.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
Earlier this year the popular open-source web application firewall,
ModSecurity, released version 3 of its software. Version 3 is a
significant departure from the earlier versions, because it's now
modularized. Before version 3, ModSecurity worked only with the Apache
web server as a dependent module, so there was no way for other HTTP
applications to utilize ModSecurity. Now the core functionality of
ModSecurity, the HTTP filtering engine, exists as a standalone library,
libModSecurity, and it can be integrated into any other application via
a "connector". A connector is a small piece of code that allows any
application to access libModSecurity.
&lt;/p&gt;

&lt;p&gt;
A Web Application Firewall (WAF) is a type of firewall for HTTP
requests. A standard firewall inspects data packets as they arrive and
leave a network interface and compares the properties of the packets
against a list of rules. The rules dictate whether the firewall will
allow the packet to pass or get blocked.
&lt;/p&gt;

&lt;p&gt;
ModSecurity performs the same task as a standard firewall, but instead of
looking at data packets, it inspects HTTP traffic as it arrives at the
server. When an HTTP request arrives at the server, it's first routed
through ModSecurity before it's routed on to the destination application,
such as Apache2 or nginx. ModSecurity compares the inbound HTTP request
against a list of rules. These rules define the form of a malicious or
harmful request, so if the incoming request matches a rule, ModSecurity
blocks the request from reaching the destination application where it
may cause harm.
&lt;/p&gt;

&lt;p&gt;
The following example demonstrates how ModSecurity protects a WordPress
site. The following HTTP request is a non-malicious request for the
index.php file as it appears in Apache2's log files:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
GET /index.php HTTP/1.1
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
This request does not match any rules, so ModSecurity allows it onto the web server.
&lt;/p&gt;

&lt;p&gt;
WordPress keeps much of its secret information, such as the database
password, in a file called wp-config.php, which is located in the same
directory as the index.php file. A careless system administrator may
leave this important file unprotected, which means a web server
like Apache or nginx happily will serve it. This is because they will
serve any file that is not protected by specific configuration. This
means that the following malicious request:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
GET /wp-config.php HTTP/1.1
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
will be served by Apache to whomever requests it.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/modsecurity-and-nginx" hreflang="en"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Mon, 24 Sep 2018 11:30:00 +0000</pubDate>
    <dc:creator>Elliot Cooper</dc:creator>
    <guid isPermaLink="false">1340091 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>nginx and WordPress</title>
  <link>https://www.linuxjournal.com/content/nginx-and-wordpress</link>
  <description>  &lt;div data-history-node-id="1339208" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/12112778334_5b731027e7_z_0.jpg" width="608" height="423" alt="" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/reuven-m-lerner" lang="" about="https://www.linuxjournal.com/users/reuven-m-lerner" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Reuven M. Lerner&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
In &lt;a href="http://www.linuxjournal.com/content/nginx"&gt;my last article&lt;/a&gt;, I took an initial look at nginx, the high-performance
open-source HTTP that uses a single process and a single thread to
service a large number of requests. nginx was designed for speed and
scalability, as opposed to Apache, which was designed to maximize
flexibility and configuration. But through the years, nginx has become
increasingly flexible as well, with a growing number of plugins and
modules that can be used to customize its configuration. Between the
performance, increasingly good documentation and convenience, it's no
wonder nginx has been increasingly popular.
&lt;/p&gt;

&lt;p&gt;
It's also no surprise that WordPress, the open-source blogging and CMS
platform, has become hugely popular. I've heard people say that 10% of
websites are now run using WordPress. Even if that's not precisely
true, there's no doubt that a huge number of sites are powered by
WordPress. I'm a mostly satisfied WordPress user, having converted my
main site and my two ebook sites to it in the past year after years
of using it to power my blog.
&lt;/p&gt;

&lt;p&gt;
So, I thought it would be interesting to demonstrate how easy it
is to set up WordPress with nginx, given the popularity of each of
these systems alone as well as together. In my last article, I described how you
can set up a plain-vanilla PHP system with nginx; WordPress is a bit
more complex, but less than you might think. Starting with a
bare-bones Linux installation, let's walk through the configuration
needed to get WordPress up and running.
&lt;/p&gt;

&lt;h3&gt;
The Basics&lt;/h3&gt;

&lt;p&gt;
In order to install WordPress and nginx together, you're going
to need three basic software systems installed: WordPress, nginx and
MySQL. The first two are pretty obvious, given this article's goal;
the third is a byproduct of using WordPress, which works exclusively
with MySQL.
&lt;/p&gt;

&lt;p&gt;
So, on my Ubuntu Linux machine, I would run the following:

&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;
$ sudo apt-get install mysql-server mysql-client nginx-core
 ↪php5-cli php5-fpm php5-mysql
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
This installs a very large number of packages, but it will give you
the core of what you need to get your system up and running. Notice
that you're not installing WordPress here, so that you can install it
manually, using the source code. Indeed, installing WordPress via
&lt;code&gt;apt-get&lt;/code&gt; also means installing Apache; although it's certainly possible to
undo this choice, the benefits of installing WordPress on your own
outweigh those of doing it via a package manager.
&lt;/p&gt;

&lt;p&gt;
You will, as part of this installation, need to choose a password for
your MySQL root user. This is an important part of security on your
system, so do try to use a strong password.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/nginx-and-wordpress" hreflang="und"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 08 Nov 2016 12:13:35 +0000</pubDate>
    <dc:creator>Reuven M. Lerner</dc:creator>
    <guid isPermaLink="false">1339208 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Linaro Ltd.'s OpenDataPlane</title>
  <link>https://www.linuxjournal.com/content/linaro-ltds-opendataplane</link>
  <description>  &lt;div data-history-node-id="1339203" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/12078f6.png" width="600" height="424" alt="" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/james-gray" lang="" about="https://www.linuxjournal.com/users/james-gray" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;James Gray&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
The &lt;a href="http://opendataplane.org"&gt;OpenDataPlane&lt;/a&gt; (ODP) project is a founding initiative by the &lt;a href="http://linaro.org"&gt;Linaro&lt;/a&gt;
Networking Group to produce an open-source, cross-platform application
programming interface (API) for the
networking Software Defined Data Plane. Linaro Ltd. recently announced the
availability of the first Long Term Support (LTS) Monarch release of
OpenDataPlane, which will enable other projects to leverage the
acceleration provided by the ODP APIs now that the code base will be fully
supported for the foreseeable future. 
&lt;/p&gt;

&lt;p&gt;
Linaro adds that work already
has begun on network protocol stacks, such as OpenFastPath (OFP), products like
the nginx web server accelerated with ODP and OFP and libraries like
OpenSSL that provide crypto acceleration via ODP. In addition, ODP and
ODP-based products, such as OFP, nginx and
OpenSSL, now can be made available as packages in popular Linux
distributions like Debian, CentOS and OpenEmbedded. To accompany the
release, Linaro launched a validation test suite that permits users and
vendors to verify API compatibility between different ODP implementations.
&lt;/p&gt;
&lt;img src="http://www.linuxjournal.com/files/linuxjournal.com/ufiles/imagecache/large-550px-centered/u1000009/12078f6.png" alt="" title="" class="imagecache-large-550px-centered" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/linaro-ltds-opendataplane" hreflang="und"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Wed, 02 Nov 2016 15:14:35 +0000</pubDate>
    <dc:creator>James Gray</dc:creator>
    <guid isPermaLink="false">1339203 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>Let's Automate Let's Encrypt</title>
  <link>https://www.linuxjournal.com/content/lets-automate-lets-encrypt</link>
  <description>  &lt;div data-history-node-id="1339202" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/HTTPS_icon.png" width="600" height="300" alt="""" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/andrei-lukovenko-0" lang="" about="https://www.linuxjournal.com/users/andrei-lukovenko-0" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Andrei Lukovenko&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
HTTPS is a small island of security in this insecure world, and in this day
and age, there is absolutely no reason not to have it on every Web site you
host. Up until last year, there was just a single last excuse: purchasing
certificates was kind of pricey. That probably was not a big deal for
enterprises; however, if you routinely host a dozen Web sites, each
with multiple subdomains, and have to pay for each certificate
out of your own dear pocket—well, that quickly could become a burden.
&lt;/p&gt;

&lt;p&gt;
Now you have no more excuses. Enter &lt;a href="https://letsencrypt.org"&gt;Let's Encrypt&lt;/a&gt;
a free Certificate Authority
that officially left Beta status in April 2016.
&lt;/p&gt;

&lt;p&gt;
Aside from being totally free, there is another special thing about Let's
Encrypt certificates: they don't last long. Currently all certificates
issued by Let's Encrypt are &lt;a href="https://letsencrypt.org/2015/11/09/why-90-days.html"&gt;valid for only 90 days&lt;/a&gt;, and you should expect
that someday this term will become even shorter.
Although this short
lifespan definitely creates a much higher level of security, many people
consider it as an inconvenience, and I've seen people going back from
using Let's Encrypt to buying certificates from commercial certificate
authorities for this very reason.
&lt;/p&gt;

&lt;p&gt;
Of course, if you are running multiple Web sites, having to renew
several certificates manually every three months quickly could become
annoying to say the least. Some
day you even may forget (and you will regret that forgetfulness). Let's leave
routines to computers, right?
&lt;/p&gt;

&lt;p&gt;
If you are using Apache under a Debian-based distribution, Let's Encrypt
already has you covered with the libaugeas0 package, and it is
capable of both issuing and renewing certificates. If, like me, you
prefer nginx and want to have zero-downtime automatic certificate updates
with industrial-grade encryption, keep reading. I'm going to show you how to get
there.
&lt;/p&gt;

&lt;p&gt;
First things first—some assumptions and requirements:
&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;
&lt;p&gt;
You are running the &lt;a href="https://www.nginx.com"&gt;nginx&lt;/a&gt;
Web server/load balancer, and you are going
to use it for TLS termination (that's a fancy, but technically correct way
of saying "nginx will handle all this HTTPS stuff").
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
nginx serves several Web sites, and you want HTTPS on all of them, and
you are not going to pay a single dime.
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
You also want to get the highest grade on the industry standard for SSL
tests—&lt;a href="https://www.ssllabs.com/ssltest"&gt;SSL Lab's SSL server test&lt;/a&gt;.
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
You do not enjoy the idea of running some not-so-well-sandboxed
third-party code on your server, and you would rather have this code in a
Docker container.
&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;
&lt;p&gt;
Naturally, you are lazy (or experienced) enough, so you want to write
some scripts that will re-issue all certificates way before they expire.
&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/lets-automate-lets-encrypt" hreflang="und"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 01 Nov 2016 10:08:36 +0000</pubDate>
    <dc:creator>Andrei Lukovenko</dc:creator>
    <guid isPermaLink="false">1339202 at https://www.linuxjournal.com</guid>
    </item>
<item>
  <title>nginx</title>
  <link>https://www.linuxjournal.com/content/nginx</link>
  <description>  &lt;div data-history-node-id="1339168" class="layout layout--onecol"&gt;
    &lt;div class="layout__region layout__region--content"&gt;
      
            &lt;div class="field field--name-field-node-image field--type-image field--label-hidden field--item"&gt;  &lt;img src="https://www.linuxjournal.com/sites/default/files/nodeimage/story/12112778334_5b731027e7_z.jpg" width="608" height="423" alt="" typeof="foaf:Image" class="img-responsive" /&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-author field--type-ds field--label-hidden field--item"&gt;by &lt;a title="View user profile." href="https://www.linuxjournal.com/users/reuven-m-lerner" lang="" about="https://www.linuxjournal.com/users/reuven-m-lerner" typeof="schema:Person" property="schema:name" datatype="" xml:lang=""&gt;Reuven M. Lerner&lt;/a&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"&gt;&lt;p&gt;
Engineers love to think that they make decisions based on pure
logic and merit. But of course, everyone has biases in terms of
programming languages, editors and other technologies—biases that
probably can be defended in technical terms, but that often come down to an
emotional argument as much as a technical one. (Except in the case of
Emacs, of course, which is &lt;em&gt;clearly&lt;/em&gt; the best editor by all objective
standards.) The problem with such biases is that they can cause people to
make choices and decisions that feel comfortable, but aren't
necessarily right.
&lt;/p&gt;

&lt;p&gt;
Case in point: I've been using the Apache HTTP server for many years
now. Indeed, you could say that I've been using Apache since before it
was even called "Apache"—what started as the original NCSA HTTP
server, and then the patched server that some enterprising open-source
developers distributed, and finally the Apache Foundation-backed
open-source colossus that everyone recognizes, and even relies on,
today—doing much more than just producing HTTP servers.
&lt;/p&gt;

&lt;p&gt;
Apache's genius was its modularity. You could, with minimal effort,
configure Apache to use a custom configuration of modules. If you
wanted to have a full-featured server with tons of debugging and
diagnostics, you could do that. If you wanted to have high-level
languages, such as Perl and Tcl, embedded inside your server for
high-speed Web applications, you could do that. If you needed the
ability to match, analyze and rewrite every part of an HTTP
transaction, you could do that, with &lt;code&gt;mod_rewrite&lt;/code&gt;. And of course,
there were third-party modules as well.
&lt;/p&gt;

&lt;p&gt;
Things got even better through the years as the Web got larger, and Web
sites were expected to do more and more. Scalability became an
important issue, and Apache handled it with (not surprisingly) a
variety of modules that implemented different back-end schemes. You
could have the traditional mix of processes, or use threads, or
combinations of the two.
&lt;/p&gt;

&lt;p&gt;
Beyond the flexibility, it was clear that Apache httpd was well
maintained, well documented and stable. Installation was easy,
upgrades were easy—really, everything was easy.
&lt;/p&gt;

&lt;p&gt;
So, it's no surprise that Apache always has been my first choice when
it comes to HTTP servers. And yet, I always knew in the back of my
mind that I really should spend more time checking out other options.
In particular, one alternative stood out—nginx.
&lt;/p&gt;&lt;/div&gt;
      
            &lt;div class="field field--name-node-link field--type-ds field--label-hidden field--item"&gt;  &lt;a href="https://www.linuxjournal.com/content/nginx" hreflang="und"&gt;Go to Full Article&lt;/a&gt;
&lt;/div&gt;
      
    &lt;/div&gt;
  &lt;/div&gt;

</description>
  <pubDate>Tue, 27 Sep 2016 13:30:00 +0000</pubDate>
    <dc:creator>Reuven M. Lerner</dc:creator>
    <guid isPermaLink="false">1339168 at https://www.linuxjournal.com</guid>
    </item>

  </channel>
</rss>
