如何将Nginx配置为Apache的反向代理

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

笔记: This tutorial is out of date and unmaintained. Updated versions are available for Ubuntu 18.04 and Ubuntu 16.04

为什么要同时运行 Nginx 和 Apache

nginx 和 apache 都是强大而有效的服务器。 Apache 目前是网站的排名第一的服务器,自 2006 年公开发布以来,nginx 已经风靡全球,现在是活跃网站的排名第二的服务器。 每个服务器受欢迎的原因很清楚:apache 的能力和 nginx 的速度是众所周知的。 然而,这两种服务器都有缺点——apache 占用服务器内存很困难,而 nginx(擅长静态文件)需要 php-fpm 或类似模块的帮助来处理动态内容。

但是,可以将两个 web 服务器结合起来,效果很好,nginx 作为静态 web 服务器前端,apache 处理后端。

设置

要执行本教程中的步骤,您需要在虚拟专用服务器上拥有 sudo 权限。

要创建具有sudo权限的用户,请通过初始ubuntu服务器设置教程的第三步和第四步

安装 nginx

首先,我们需要安装和配置 nginx,它将服务于我们网站的前端。

让我们从 apt-get 下载它:

sudo apt-get install nginx

下载后,您可以继续配置虚拟主机以在前端运行。

我们需要在配置中进行一些更改。

配置 nginx

打开 nginx 配置。

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

以下配置将设置您使用 nginx 作为前端服务器。 它与默认设置非常相似,详细信息在配置下。

server {
        listen   80; 

        root /var/www/; 
        index index.php index.html index.htm;

        server_name example.com; 

        location / {
        try_files $uri $uri/ /index.php;
        }

        location ~ \.php$ {
        
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8080;

         }

         location ~ /\.ht {
                deny all;
        }
}

在配置中实现了以下更改:

  • 根设置为正确的 Web 目录
  • index.php 被添加到索引行
  • try_files 尝试为访问者请求的任何页面提供服务。 如果 nginx 无法运行,则将文件传递给代理
  • proxy_pass 让 nginx 获得代理服务器的地址
  • 最后,“location ~ /\.ht {”位置块拒绝访问 .htaccess 文件,如果 Apache 的文档根目录与 nginx 的一致

此配置设置了一个系统,其中所有以 php 结尾的扩展都重新路由到将在端口 8080 上运行的 apache 后端。

激活虚拟主机。

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

此外,删除默认的 nginx 服务器块。

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

下一步是安装和配置 apache。

安装 Apache

处理好 nginx 后,是时候安装我们的后端 apache 了。

sudo apt-get install apache2

由于 nginx 仍未开启,Apache 将开始在 80 端口上运行。

配置阿帕奇

我们需要配置 apache 来接管后端,正如我们告诉 nginx 的,它将在端口 8080 上运行。 打开 apache 端口文件以开始在正确的端口上设置 apache:

sudo nano /etc/apache2/ports.conf

查找并更改以下行以使 apache 在端口 8080 上运行,只能从 localhost 访问:

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080

保存并退出。

随后,打开一个新的虚拟主机文件,从默认的 apache 文件中复制布局:

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example
sudo nano /etc/apache2/sites-available/example

这里需要解决的主要问题是虚拟主机需要再次在端口 8080 上运行(而不是 nginx 的默认 80)。

该行应如下所示:

&ltVirtualHost 127.0.0.1:8080>

确保您的文档根目录正确。 保存并退出文件并激活该虚拟主机:

sudo a2ensite example

在我们开始测试之前,我们需要为 apache 配备 php。 继续并立即安装它:

 sudo apt-get install php5

重新启动两台服务器以使更改生效:

sudo service apache2 restart
sudo service nginx restart

完事

我们已经设置了 VPS,在我们网站的前端运行 nginx,在后端运行 apache 处理 php。 加载我们的域会将我们带到我们网站的默认页面。

我们可以通过运行一个通用的 php 脚本来检查正在路由到 apache 的信息是否正常工作。

继续创建 php.info 文件:

sudo nano /var/www/info.php

将以下行粘贴到该文件中:

&lt?
phpinfo( );
?>

保存并退出。

访问您的 domain/info.php 应该会显示 php 信息屏幕,您将能够看到这是由 apache 处理的。 (截图这里

最后,您可以通过键入此命令查看打开的端口以及每个端口上的应用程序。

sudo netstat -plunt

看更多

一起配置 nginx 和 Apache 可以极大地提升服务器,这只是一个简短的概述。 如果您对将两者配置在一起有任何具体问题,请随时在我们的问答论坛我们很乐意回答他们。

埃特尔·斯维尔德洛夫