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

本教程涵盖将apache和nginx相结合,以更快的速度为网站提供服务。这篇文章将你从一个新鲜的DigitalOceanDroplet到一个apache和nginx配置为一起工作。

为什么要一起运行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

我们需要配置apache来接管后端,我们告诉nginx将在端口8080上运行。打开apache ports文件,在正确的端口上开始设置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(而不是默认的80给nginx)。

该行应该如下所示:

&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( );
?>

保存并退出。

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

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

sudo netstat -plunt

查看更多

将nginx和Apache一起配置可以大大提高服务器,这只是一个简单的概述。 如果您对配置两个任何具体问题一起,随时在我们张贴您的问题Q&A论坛 ,我们很乐意回答他们。

作者Etel Sverdlov