如何在一个Ubuntu14.04Droplet上将Nginx配置为Web服务器和Apache的反向代理

来自菜鸟教程
跳转至:导航、​搜索

介绍

Apache 和 Nginx 是两种流行的开源 Web 服务器,通常与 PHP 一起使用。 当托管具有不同要求的多个网站时,在同一虚拟机上运行它们会很有用。 在单个系统上运行两个 Web 服务器的一般解决方案是使用多个 IP 地址或不同的端口号。

可以将同时具有 IPv4 和 IPv6 地址的 Droplet 配置为在一种协议上为 Apache 站点提供服务,而在另一种协议上为 Nginx 站点提供服务,但这目前并不实用,因为 ISP 采用 IPv6 仍然没有普及。 为第二个 Web 服务器使用不同的端口号,例如 818080 是另一种解决方案,但使用端口号(例如 http://example.com:81)共享 URL 并不总是合理的,或者理想的。

本教程将向您展示如何将 Nginx 配置为 Web 服务器和 Apache 的反向代理——所有这些都在一个 Droplet 上。 根据 Web 应用程序,可能需要更改代码以保持 Apache 反向代理感知,尤其是在配置 SSL 站点时。 为了确保这一点,我们将安装一个名为 mod_rpaf 的 Apache 模块,它会重写某些环境变量,因此 Apache 似乎直接处理来自 Web 客户端的请求。

我们将在一个 Droplet 上托管四个域名。 Nginx 将提供两个服务:example.com(默认虚拟主机)和 sample.org。 剩下的两个,foobar.nettest.io,将由 Apache 提供服务。

先决条件

  • 一个新的 Ubuntu 14.04 Droplet。
  • 具有 sudo 权限的标准用户帐户。 您可以按照 Initial Server Setup with Ubuntu 14.04 的步骤 2 和 3 设置标准帐户。
  • 所需的域名应指向 DigitalOcean 控制面板中的 Droplet 的 IP 地址。 有关如何执行此操作的示例,请参阅 如何使用 DigitalOcean 设置主机名的第 3 步。 如果您在其他地方托管您的域的 DNS,您应该在那里创建适当的 A 记录

可选参考

本教程需要 Apache 和 Nginx 中的虚拟主机的基本知识,以及 SSL 证书的创建和配置。 有关这些主题的更多信息,请参阅以下文章。

第 1 步 — 安装 Apache 和 PHP5-FPM

除了 Apache 和 PHP-FPM,我们还必须安装 PHP FastCGI Apache 模块。 这是 libapache2-mod-fastcgi,在 Ubuntu 的 multiverse 存储库中可用,必须首先在 sources.list 文件中启用。

sudo nano /etc/apt/sources.list

找到以下行并通过删除开头的井号 (#) 取消注释它们。

# deb http://mirrors.digitalocean.com/ubuntu trusty multiverse

 . . .

# deb http://mirrors.digitalocean.com/ubuntu trusty-updates multiverse

这应该会给您留下如下所示的内容。

 deb http://mirrors.digitalocean.com/ubuntu trusty multiverse

 . . .

 deb http://mirrors.digitalocean.com/ubuntu trusty-updates multiverse

保存文件并更新 apt 存储库。

sudo apt-get update

然后安装必要的软件包。

sudo apt-get install apache2 libapache2-mod-fastcgi php5-fpm

第 2 步 — 配置 Apache 和 PHP5-FPM

在这一步中,我们将 Apache 的端口号更改为 8080 并使用 mod_fastcgi 模块将其配置为与 PHP5-FPM 一起使用。 编辑 Apache 配置文件并更改 Apache 的端口号。

sudo nano /etc/apache2/ports.conf

找到以下行:

Listen 80

将其更改为:

Listen 8080

保存并退出ports.conf

注意: Web 服务器在配置反向代理时通常设置为侦听 127.0.0.1:8080,但这样做会将 PHP 的环境变量 SERVER_ADDR 的值设置为环回 IP 地址而不是服务器的公共 IP。 我们的目标是设置 Apache,使其网站在其前面看不到反向代理。 因此,我们将其配置为侦听所有 IP 地址上的 8080

接下来我们将编辑 Apache 的默认虚拟主机文件。 此文件中的 <VirtualHost> 指令设置为仅在端口 80 上为站点提供服务。

sudo nano /etc/apache2/sites-available/000-default.conf

第一行应该是:

<VirtualHost *:80>

将其更改为:

<VirtualHost *:8080>

保存文件并重新加载 Apache。

sudo service apache2 reload

验证 Apache 现在正在侦听 8080

sudo netstat -tlpn

输出应如下所示,其中 apache2 正在侦听 :::8080

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address     Foreign Address      State    PID/Program name
tcp        0      0 0.0.0.0:22        0.0.0.0:*            LISTEN   1086/sshd
tcp6       0      0 :::8080           :::*                 LISTEN   4678/apache2
tcp6       0      0 :::22             :::*                 LISTEN   1086/sshd

第 3 步 — 配置 Apache 以使用 mod_fastcgi

Apache 默认使用 mod_php,但它需要额外的配置才能使用 PHP5-FPM。

注意: 如果您在使用 mod_php 的现有 LAMP 安装上尝试本教程,请先禁用它:

sudo a2dismod php5

我们将为 mod_fastcgi 添加一个配置块,它依赖于 mod_actionmod-action默认是禁用的,所以我们首先需要启用它。

sudo a2enmod actions

找出您的 Droplet 上安装了哪个版本的 Apache:

sudo apache2 -v

相应地编辑 fastcgi 配置文件。 这些配置指令将对 .php 文件的请求传递到 PHP5-FPM UNIX 套接字。

sudo nano /etc/apache2/mods-enabled/fastcgi.conf

将以下行添加到 Apache 2.4<IfModule mod_fastcgi.c> . . . </IfModule> 块的底部:

 AddType application/x-httpd-fastphp5 .php
 Action application/x-httpd-fastphp5 /php5-fcgi
 Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
 FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization
 <Directory /usr/lib/cgi-bin>
  Require all granted
 </Directory>

Apache 2.2 不需要 <Directory> 部分,因此添加以下内容:

 AddType application/x-httpd-fastphp5 .php
 Action application/x-httpd-fastphp5 /php5-fcgi
 Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
 FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -socket /var/run/php5-fpm.sock -pass-header Authorization

fastcgi.conf 中完成后,进行配置测试。

sudo apachectl -t

如果显示 Syntax OK,则重新加载 Apache。 如果您看到警告 Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message.,那很好。 现在对我们没有影响。

sudo service apache2 reload

第 4 步 — 验证 PHP 功能

通过创建 phpinfo() 文件并从 Web 浏览器访问它来检查 PHP 是否工作。

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

要在浏览器中查看文件,请转到 http://111.111.111.111:8080/info.php,但使用您的 Droplet 的 IP 地址。 这将为您提供 PHP 正在使用的配置规范列表。

在页面顶部,检查 Server API 是否显示 FPM/FastCGI。 在页面向下大约三分之二的地方,PHP 变量 部分将告诉您 SERVER_SOFTWARE 是 Ubuntu 上的 Apache。 这些确认 mod_fastcgi 处于活动状态并且 Apache 正在使用 PHP5-FPM 处理 PHP 文件。

第 5 步 — 为 Apache 创建虚拟主机

我们将为域 foobar.nettest.io 创建两个 Apache 虚拟主机文件。 首先为两个站点创建 文档根 目录。

sudo mkdir -v /var/www/{foobar.net,test.io}

现在我们将在设置完成后向每个目录添加两个文件进行测试。

首先,我们将为每个站点创建一个 index 文件。

echo "<h1 style='color: green;'>Foo Bar</h1>" | sudo tee /var/www/foobar.net/index.html
echo "<h1 style='color: red;'>Test IO</h1>" | sudo tee /var/www/test.io/index.html

然后,一个 phpinfo() 文件。

echo "<?php phpinfo(); ?>" | sudo tee /var/www/foobar.net/info.php
echo "<?php phpinfo(); ?>" | sudo tee /var/www/test.io/info.php

foobar.net 域创建虚拟主机文件。

sudo nano /etc/apache2/sites-available/foobar.net.conf

将以下指令放入其中:

<VirtualHost *:*>
    ServerName foobar.net
    ServerAlias www.foobar.net
    DocumentRoot /var/www/foobar.net
    <Directory /var/www/foobar.net>
        AllowOverride All
    </Directory>
</VirtualHost>

保存并关闭文件。 然后对 test.io 执行相同的操作。

sudo nano /etc/apache2/sites-available/test.io.conf
<VirtualHost *:*>
    ServerName test.io
    ServerAlias www.test.io
    DocumentRoot /var/www/test.io
    <Directory /var/www/test.io>
        AllowOverride All
    </Directory>
</VirtualHost>

注1: AllowOverride All enables .htaccess support.

注2: 这些只是最基本的指令。 有关在 Apache 中设置虚拟主机的完整指南,请参阅 如何在 Ubuntu 14.04 LTS 上设置 Apache 虚拟主机。

现在两个 Apache 虚拟主机都设置好了,使用 a2ensite 命令启用站点。 这将在 sites-enabled 目录中创建一个指向虚拟主机文件的符号链接。

sudo a2ensite foobar.net
sudo a2ensite test.io

再次检查 Apache 是否存在配置错误。

sudo apachectl -t

如果显示 Syntax OK,则重新加载它。

sudo service apache2 reload

要确认站点是否正常工作,请在浏览器中打开 http://foobar.net:8080http://test.io:8080 并确认它们正在显示其 index.html 文件。

你应该看到:

此外,通过访问 info.php 文件检查 PHP 是否正常工作:http://foobar.net:8080/info.phphttp://test.io:8080/info.php

您应该在每个站点上看到与步骤 1 中相同的 PHP 配置规范列表。 我们现在有两个网站托管在 Apache 的端口 8080 上。

第 6 步 — 安装和配置 Nginx

在这一步中,我们将安装 Nginx 并将域 example.comsample.org 配置为 Nginx 的虚拟主机。 有关在 Nginx 中设置虚拟主机的完整指南,请参阅 如何在 Ubuntu 14.04 LTS 上设置 Nginx 服务器块(虚拟主机)。

安装 Nginx。

sudo apt-get install nginx

然后删除默认虚拟主机的符号链接。

sudo rm /etc/nginx/sites-enabled/default

现在我们将为 Nginx 创建虚拟主机。 首先为两个网站制作 文档根 目录:

sudo mkdir -v /usr/share/nginx/{example.com,sample.org}

正如我们对 Apache 的虚拟主机所做的那样,我们将在设置完成后再次创建 indexphpinfo() 文件进行测试。

echo "<h1 style='color: green;'>Example.com</h1>" | sudo tee /usr/share/nginx/example.com/index.html
echo "<h1 style='color: red;'>Sample.org</h1>" | sudo tee /usr/share/nginx/sample.org/index.html
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/example.com/info.php
echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/sample.org/info.php

现在为域 example.com 创建一个虚拟主机文件。

sudo nano /etc/nginx/sites-available/example.com

Nginx 调用配置文件 服务器块server {. . .} 区域。 为主要虚拟主机 example.com 创建一个服务器块。 default_server 配置指令使它成为默认虚拟主机,它处理与任何其他虚拟主机不匹配的 HTTP 请求。

将以下内容粘贴到 example.com 的文件中:

server {
    listen 80 default_server;

    root /usr/share/nginx/example.com;
    index index.php index.html index.htm;

    server_name example.com www.example.com;
    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

保存并关闭文件。 现在为 Nginx 的第二个域 sample.org 创建一个虚拟主机文件。

sudo nano /etc/nginx/sites-available/sample.org

sample.org 的服务器块应如下所示:

server {
    root /usr/share/nginx/sample.org;
    index index.php index.html index.htm;

    server_name sample.org www.sample.org;
    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
    }
}

保存并关闭文件。 然后通过创建指向 sites-enabled 目录的符号链接来启用这两个站点。

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo ln -s /etc/nginx/sites-available/sample.org /etc/nginx/sites-enabled/sample.org

做一个 Nginx 配置测试:

sudo service nginx configtest

如果显示 OK 则重新加载 Nginx。

sudo service nginx reload

现在通过 http://example.com/info.phphttp://sample.org/info.php 在网络浏览器中访问 Nginx 虚拟主机的 phpinfo() 文件。 再次查看 PHP 变量 部分。

[“SERVER_SOFTWARE”] 应该是 nginx,表示文件是由 Nginx 直接提供的。 [“DOCUMENT_ROOT”] 应该指向您在此步骤之前为每个 Nginx 站点创建的目录。

至此,我们已经安装好 Nginx 并创建了两个虚拟主机。 接下来,我们将设置一个额外的虚拟主机来代理针对托管在 Apache 上的域的请求。

第 7 步 — 为 Apache 的虚拟主机配置 Nginx

在本节中,我们将在 server_name 指令中创建一个具有多个域名的附加 Nginx 虚拟主机。 对这些域名的请求将被代理到 Apache。

创建一个新的 Nginx 虚拟主机文件:

sudo nano /etc/nginx/sites-available/apache

添加下面的代码块。 这指定了两个 Apache 虚拟主机域的名称,并将它们的请求代理到 Apache。 请记住使用 proxy_pass 中的公共 IP 地址。

server {
    listen 80;
    server_name foobar.net www.foobar.net test.io www.test.io;

    location / {
        proxy_pass http://111.111.111.111:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

保存文件并通过创建符号链接启用这个新的虚拟主机。

sudo ln -s /etc/nginx/sites-available/apache /etc/nginx/sites-enabled/apache

做一个配置测试:

sudo service nginx configtest

如果显示 OK 则重新加载 Nginx。

sudo service nginx reload

打开浏览器并访问 Apache 的其中一个域名上的 http://foobar.net/info.php。 向下滚动到 PHP 变量 部分并检查显示的值。

变量 SERVER_SOFTWAREDOCUMENT_ROOT 应确认此请求已由 Apache 处理。 变量 HTTP_X_REAL_IPHTTP_X_FORWARDED_FOR 是由 Nginx 添加的,应该显示您在浏览器中访问 URL 的计算机的公共 IP 地址。

我们已经成功地将 Nginx 设置为将特定域的请求代理到 Apache。 下一步是配置 Apache 以设置变量 REMOTE_ADDR,就好像它直接处理这些请求一样。

第 8 步 — 安装和配置 mod_rpaf

在这一步中,我们将安装一个名为 mod_rpaf 的 Apache 模块,它根据提供的值重写 REMOTE_ADDRHTTPSHTTP_PORT 的值通过反向代理。 如果没有这个模块,一些 PHP 应用程序需要更改代码才能在代理后面无缝工作。 该模块在 Ubuntu 的存储库中以 libapache2-mod-rpaf 的形式存在,但已过时并且不支持某些配置指令。 相反,我们将从源代码安装它。

安装编译和构建模块所需的包:

sudo apt-get install unzip build-essential apache2-threaded-dev

从 GitHub 下载最新的稳定版本。

wget https://github.com/gnif/mod_rpaf/archive/stable.zip

提取它:

unzip stable.zip

切换到工作目录。

cd mod_rpaf-stable

然后编译并安装模块。

sudo make
sudo make install

在加载 rpaf 模块的 mods-available 目录中创建一个文件。

sudo nano /etc/apache2/mods-available/rpaf.load

将以下行添加到文件中:

LoadModule rpaf_module /usr/lib/apache2/modules/mod_rpaf.so

在此目录中创建另一个文件。 这将包含配置指令。

sudo nano /etc/apache2/mods-available/rpaf.conf

添加以下代码块,确保添加您的 Droplet 的 IP 地址。

<IfModule mod_rpaf.c>
        RPAF_Enable             On
        RPAF_Header             X-Real-Ip
        RPAF_ProxyIPs           111.111.111.111
        RPAF_SetHostName        On
        RPAF_SetHTTPS           On
        RPAF_SetPort            On
</IfModule>

以下是每个指令的简要说明。 有关详细信息,请参阅 mod_rpaf README 文件。

  • RPAF_Header - 用于客户端真实 IP 地址的标头。
  • RPAF_ProxyIPs - 用于调整 HTTP 请求的代理 IP。
  • RPAF_SetHostName - 更新虚拟主机名,以便 ServerName 和 ServerAlias 工作。
  • RPAF_SetHTTPS - 根据 X-Forwarded-Proto 中包含的值设置 HTTPS 环境变量。
  • RPAF_SetPort - 设置 SERVER_PORT 环境变量。 当 Apache 位于 SSL 代理之后时很有用。

保存 rpaf.conf 并启用模块。

sudo a2enmod rpaf

这将在 mods-enabled 目录中创建文件 rpaf.loadrpaf.conf 的符号链接。 现在进行配置测试。

sudo apachectl -t

如果返回 Syntax OK,则重新加载 Apache。

sudo service apache2 reload

在浏览器上访问 Apache 网站的 phpinfo() 页面并检查 PHP 变量 部分。 REMOTE_ADDR 变量现在也将是您本地计算机的公共 IP 地址的变量。

第 9 步 — 设置 HTTPS 网站(可选)

在这一步中,我们将为托管在 Apache 上的两个域配置 SSL 证书。 Nginx 支持 SSL 终止,因此我们可以在不修改 Apache 的配置文件的情况下设置 SSL。 mod_rpaf 模块确保在 Apache 上设置所需的环境变量,以使应用程序在 SSL 反向代理后面无缝工作。

为 SSL 证书及其私钥创建一个目录。

sudo mkdir /etc/nginx/ssl

对于本文,我们将使用有效期为 10 年的自签名 SSL 证书。 为 foobar.nettest.io 生成自签名证书。

sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/foobar.net-key.pem -out /etc/nginx/ssl/foobar.net-cert.pem -days 3650 -nodes
sudo openssl req -x509 -sha256 -newkey rsa:2048 -keyout /etc/nginx/ssl/test.io-key.pem -out /etc/nginx/ssl/test.io-cert.pem -days 3650 -nodes

每次都会提示您输入证书标识详细信息。

Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:DigitalOcean Inc
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:

现在打开代理从 Nginx 到 Apache 的请求的 apache 虚拟主机文件。

sudo nano /etc/nginx/sites-available/apache

由于我们为每个域都有单独的证书和密钥,我们需要为每个域有单独的 server { . . . } 块。 您应该删除它的当前内容,完成后,您的 apache 虚拟主机文件应如下所示。

server {
    listen 80;
    listen 443 ssl;
    server_name test.io www.test.io;

    ssl on;
    ssl_certificate /etc/nginx/ssl/test.io-cert.pem;
    ssl_certificate_key /etc/nginx/ssl/test.io-key.pem;

    location / {
        proxy_pass http://111.111.111.111:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    listen 443 ssl;
    server_name foobar.net www.foobar.net;

    ssl on;
    ssl_certificate /etc/nginx/ssl/foobar.net-cert.pem;
    ssl_certificate_key /etc/nginx/ssl/foobar.net-key.pem;

    location / {
        proxy_pass http://111.111.111.111:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

保存文件并执行配置测试。

sudo service nginx configtest

如果测试成功,则重新加载 Nginx。

sudo service nginx reload

通过带有 https:// 前缀的浏览器访问 Apache 的域之一:https://foobar.net/info.php

查看 PHP 变量 部分。 变量 SERVER_PORT 已设置为 443 并且 HTTPS 设置为 on,就好像 Apache 是通过 HTTPS 直接访问的一样。 设置这些变量后,PHP 应用程序不必专门配置为在反向代理后面工作。

第 10 步 — 阻止对 Apache 的直接访问(可选)

由于 Apache 正在侦听公共 IP 地址上的端口 8080,因此每个人都可以访问它。 可以通过在防火墙规则集中使用以下 IPtables 命令来阻止它。

sudo iptables -I INPUT -p tcp --dport 8080 ! -s 111.111.111.111 -j REJECT --reject-with tcp-reset

请务必使用您的 Droplet 的 IP 地址代替红色示例。 一旦端口 8080 在您的防火墙中被阻止,请测试 Apache 在其上是否无法访问。 打开您的 Web 浏览器并尝试在端口 8080 上访问 Apache 的域名之一。 例如:http://example.com:8080

浏览器应显示“无法连接”或“网页不可用”错误消息。 使用 IPtables tcp-reset 选项,局外人会发现端口 8080 和没有任何服务的端口之间没有区别。

注意: 默认情况下,IPtables 规则不会在系统重新启动后继续存在。 有多种方法可以保留 IPtables 规则,但最简单的方法是使用 Ubuntu 存储库中的 iptables-persistent

第 11 步 — 使用 Nginx 提供静态文件(可选)

当 Nginx 代理对 Apache 域的请求时,它会将对域的每个文件请求发送到 Apache。 Nginx 在提供静态文件(如图像、JavaScript 和样式表)方面比 Apache 更快。 所以本节我们将配置 Nginx 的 apache 虚拟主机文件直接服务静态文件,只向 Apache 发送 PHP 请求。

打开 apache 虚拟主机文件。

sudo nano /etc/nginx/sites-available/apache

将两个额外的 location 块添加到每个服务器块,如下面代码块中的红色所示。

server {
    listen 80;
    server_name test.io www.test.io;
    root /var/www/test.io;
    index index.php index.htm index.html;

    location / {
      try_files $uri $uri/ /index.php;
    }
 
    location ~ \.php$ {
        proxy_pass http://111.111.111.111:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /\. {
      deny all;
    }
}

server {
    listen 80;
    server_name foobar.net www.foobar.net;
    root /var/www/foobar.net;
    index index.php index.htm index.html;

    location / {
      try_files $uri $uri/ /index.php;
    }
 
    location ~ \.php$ {
        proxy_pass http://111.111.111.111:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location ~ /\. {
      deny all;
    }
}

try_files 指令使 Nginx 在 文档根 中查找文件并直接提供它们。 如果文件具有 .php 扩展名,则将请求传递给 Apache。 即使在 文档根 中找不到该文件,请求也会被传递给 Apache,以便永久链接等应用程序功能正常工作。

保护文件并执行配置测试。

sudo service nginx configtest

如果测试成功,则重新加载 Nginx。

sudo service nginx reload

要验证这是否有效,您可以检查 /var/log/apache2 中的 Apache 日志文件,并查看 test.iofoobar.netindex.php 文件的 GET 请求。 此设置的唯一警告是 Apache 将无法限制对静态文件的访问。 静态文件的访问控制需要在 Nginx 的 apache 虚拟主机文件中配置。

Warning: location ~ /\. 指令非常重要。 这可以防止 Nginx 打印 .htaccess.htpasswd 等文件的内容。

结论

完成本教程后,您现在应该拥有一个 Ubuntu Droplet,其中 Nginx 服务 example.comsample.org,Apache 服务 foobar.nettest.io。 尽管 Nginx 充当 Apache 的反向代理,但 Nginx 的代理服务是透明的,与 Apache 域的连接似乎是直接从 Apache 本身提供的。