如何在一个 Ubuntu 14.04 Droplet 上将 Nginx 配置为 Apache 的 Web 服务器和反向代理如何在一个 Ubuntu 14.04 Droplet 上将 Nginx 配置为 Apache 的 Web 服务器和反向代理如何在一个 Ubuntu 14.04 Droplet 上将 Nginx 配置为 Apache 的 Web 服务器和反向代理如何在一个 Ubuntu 14.04 Droplet 上将 Nginx 配置为 Apache 的 Web 服务器和反向代理
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

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

介绍

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

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

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

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

先决条件

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

可选参考

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

  • 在 Apache 上设置虚拟主机
  • 在 Nginx 上设置虚拟主机
  • 使用 Nginx 在一个 IP 上设置多个 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.linux教程/ubuntu trusty multiverse

 . . .

# deb http://mirrors.linux教程/ubuntu trusty-updates multiverse

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

 deb http://mirrors.linux教程/ubuntu trusty multiverse

 . . .

 deb http://mirrors.linux教程/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 的默认虚拟主机文件。此文件中的 指令设置为仅在端口 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_action。 mod-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 的块:

 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 不需要 部分,因此添加以下内容:

 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 reliable determine the servers fully qualified domain name, using 127.0.1.1。全局设置 ServerName 指令以抑制此消息。,没关系。它现在不影响我们。

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 正在使用的配置规范列表。

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

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

我们将为域 foobar.net 和 test.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 启用 .htaccess 支持。

注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:8080 和 http://test.io: 8080 在您的浏览器中并验证他们正在显示他们的 index.html 文件。

你应该看到:

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

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

第 6 步 — 安装和配置 Nginx

在此步骤中,我们将安装 Nginx 并将域 example.com 和 sample.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 的虚拟主机所做的那样,我们将再次创建 index 和 phpinfo() 文件以在设置完成后进行测试。

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.php 在 Web 浏览器中访问 Nginx 虚拟主机的 phpinfo() 文件并http://sample.org/info.php。再次查看 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_SOFTWARE 和 DOCUMENT_ROOT 应该确认这个请求是由 Apache 处理的。变量 HTTP_X_REAL_IP 和 HTTP_X_FORWARDED_FOR 是由 Nginx 添加的,应该显示您在浏览器中访问 URL 的计算机的公共 IP 地址。

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

第 8 步 — 安装和配置 mod_rpaf

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

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

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 自述文件。

  • 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.load 和 rpaf.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.net 和 test.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 设置为打开,就好像 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 虚拟主机文件以直接为静态文件提供服务,并将 PHP 请求发送到 Apache。

打开 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 的 index.php 文件的 GET 请求。 io 和 foobar.net。此设置的唯一警告是 Apache 将无法限制对静态文件的访问。静态文件的访问控制需要在 Nginx 的 apache 虚拟主机文件中配置。

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

结论

完成本教程后,您现在应该拥有一个 Ubuntu Droplet,其中 Nginx 服务于 example.com 和 sample.org,Apache 服务于 foobar.net 和 test.io。尽管 Nginx 充当 Apache 的反向代理,但 Nginx 的代理服务是透明的,与 Apache 域的连接似乎直接来自 Apache 本身。

©2015-2025 艾丽卡 support@alaica.com