如何将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)。
该行应如下所示:
<VirtualHost 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
将以下行粘贴到该文件中:
<? phpinfo( ); ?>
保存并退出。
访问您的 domain/info.php 应该会显示 php 信息屏幕,您将能够看到这是由 apache 处理的。 (截图这里)
最后,您可以通过键入此命令查看打开的端口以及每个端口上的应用程序。
sudo netstat -plunt
看更多
一起配置 nginx 和 Apache 可以极大地提升服务器,这只是一个简短的概述。 如果您对将两者配置在一起有任何具体问题,请随时在我们的问答论坛我们很乐意回答他们。